iso.buildDir = new File(getInstanceDir(), "config_iso_src");
iso.model = new TemplateDataSource() {
@Override
public void buildTemplateModel(Map<String, Object> model) throws OpsException {
InterfaceModel eth0 = InterfaceModel.build("eth0");
AddressModel ipv4 = address4.get();
eth0.addAddress(ipv4);
AddressModel ipv6 = address6.get();
eth0.addAddress(ipv6);
List<InterfaceModel> interfaces = Lists.newArrayList();
interfaces.add(eth0);
model.put("interfaces", interfaces);
List<String> authorizedKeys = Lists.newArrayList();
authorizedKeys.add(OpenSshUtils.serialize(sshPublicKey));
model.put("authorizedKeys", authorizedKeys);
}
};
instance.addChild(iso);
}
{
DownloadImage download = injected(DownloadImage.class);
download.imageFile = getImagePath();
download.recipeKey = recipeId;
download.imageFormats = Arrays.asList(ImageFormat.DiskRaw, ImageFormat.DiskQcow2);
instance.addChild(download);
}
{
ManagedKvmInstance kvmInstance = addChild(ManagedKvmInstance.class);
kvmInstance.id = id;
kvmInstance.memoryMb = Math.max(256, minimumMemoryMB);
kvmInstance.vcpus = 1;
kvmInstance.base = getInstanceDir();
kvmInstance.monitor = assignMonitorPort;
kvmInstance.vnc = assignVncPort;
kvmInstance.nics = buildVnics();
kvmInstance.drives = buildDrives();
kvmInstance.addresses.add(address4);
kvmInstance.addresses.add(address6);
}
{
final DirectInstance model = OpsContext.get().getInstance(DirectInstance.class);
OpsProvider<TagChanges> tagChanges = new OpsProvider<TagChanges>() {
@Override
public TagChanges get() {
TagChanges tagChanges = new TagChanges();
tagChanges.addTags.add(Tag.INSTANCE_KEY.build(model.getKey()));
AddressModel ipv4 = address4.get();
AddressModel ipv6 = address6.get();
tagChanges.addTags.add(Tag.NETWORK_ADDRESS.build(ipv4));
tagChanges.addTags.add(Tag.NETWORK_ADDRESS.build(ipv6));
return tagChanges;