package org.zstack.header.vm; import org.zstack.header.configuration.DiskOfferingInventory; import org.zstack.header.host.HostInventory; import org.zstack.header.image.ImageBackupStorageRefInventory; import org.zstack.header.image.ImageInventory; import org.zstack.header.message.Message; import org.zstack.header.message.NoJsonSchema; import org.zstack.header.network.l3.L3NetworkInventory; import org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory; import org.zstack.header.storage.primary.PrimaryStorageInventory; import org.zstack.header.vm.VmInstanceConstant.VmOperation; import org.zstack.header.volume.VolumeInventory; import org.zstack.utils.JsonWrapper; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class VmInstanceSpec implements Serializable { public String getRequiredPrimaryStorageUuidForRootVolume() { return requiredPrimaryStorageUuidForRootVolume; } public void setRequiredPrimaryStorageUuidForRootVolume(String requiredPrimaryStorageUuidForRootVolume) { this.requiredPrimaryStorageUuidForRootVolume = requiredPrimaryStorageUuidForRootVolume; } public static class VolumeSpec { private PrimaryStorageInventory primaryStorageInventory; private boolean isRoot; private long size; private String diskOfferingUuid; private boolean isVolumeCreated; public boolean isVolumeCreated() { return isVolumeCreated; } public void setIsVolumeCreated(boolean isVolumeCreated) { this.isVolumeCreated = isVolumeCreated; } public void setIsRoot(boolean isRoot) { this.isRoot = isRoot; } public PrimaryStorageInventory getPrimaryStorageInventory() { return primaryStorageInventory; } public void setPrimaryStorageInventory(PrimaryStorageInventory primaryStorageInventory) { this.primaryStorageInventory = primaryStorageInventory; } public String getDiskOfferingUuid() { return diskOfferingUuid; } public void setDiskOfferingUuid(String diskOfferingUuid) { this.diskOfferingUuid = diskOfferingUuid; } public boolean isRoot() { return isRoot; } public void setRoot(boolean isRoot) { this.isRoot = isRoot; } public long getSize() { return size; } public void setSize(long size) { this.size = size; } } public static class ImageSpec implements Serializable { private ImageInventory inventory; private ImageBackupStorageRefInventory selectedBackupStorage; public ImageInventory getInventory() { return inventory; } public void setInventory(ImageInventory inventory) { this.inventory = inventory; } public ImageBackupStorageRefInventory getSelectedBackupStorage() { return selectedBackupStorage; } public void setSelectedBackupStorage(ImageBackupStorageRefInventory selectedBackupStorage) { this.selectedBackupStorage = selectedBackupStorage; } } public static class IsoSpec implements Serializable { private String installPath; private String imageUuid; private String primaryStorageUuid; private String backupStorageUuid; public String getBackupStorageUuid() { return backupStorageUuid; } public void setBackupStorageUuid(String backupStorageUuid) { this.backupStorageUuid = backupStorageUuid; } public String getPrimaryStorageUuid() { return primaryStorageUuid; } public void setPrimaryStorageUuid(String primaryStorageUuid) { this.primaryStorageUuid = primaryStorageUuid; } public String getImageUuid() { return imageUuid; } public void setImageUuid(String imageUuid) { this.imageUuid = imageUuid; } public String getInstallPath() { return installPath; } public void setInstallPath(String installPath) { this.installPath = installPath; } } public static class HostName implements Serializable { private String l3NetworkUuid; private String hostname; public String getL3NetworkUuid() { return l3NetworkUuid; } public void setL3NetworkUuid(String l3NetworkUuid) { this.l3NetworkUuid = l3NetworkUuid; } public String getHostname() { return hostname; } public void setHostname(String hostname) { this.hostname = hostname; } } private VmInstanceInventory vmInventory; private List<L3NetworkInventory> l3Networks; private List<DiskOfferingInventory> dataDiskOfferings; private DiskOfferingInventory rootDiskOffering; private String hostAllocatorStrategy; private String ipAllocatorStrategy; private Message message; private ImageSpec imageSpec = new ImageSpec(); private List<VolumeSpec> volumeSpecs = new ArrayList<>(); private String requiredClusterUuid; private String requiredHostUuid; private String requiredPrimaryStorageUuidForRootVolume; private List<HostName> hostnames = new ArrayList<>(); private HostInventory destHost; private List<VmNicInventory> destNics = new ArrayList<>(); private List<VolumeInventory> destDataVolumes = new ArrayList<>(); private VolumeInventory destRootVolume; private VmOperation currentVmOperation; @NoJsonSchema private Map<String, JsonWrapper> extensionData = new HashMap<>(); private String dataIsoPath; private IsoSpec destIso; private String userdata; private List<String> bootOrders; private boolean gcOnStopFailure; private String consolePassword; private VmAccountPreference accountPerference; public VmAccountPreference getAccountPerference() { return accountPerference; } public void setAccountPerference(VmAccountPreference accountPerference) { this.accountPerference = accountPerference; } public String getRequiredClusterUuid() { return requiredClusterUuid; } public void setRequiredClusterUuid(String requiredClusterUuid) { this.requiredClusterUuid = requiredClusterUuid; } public String getRequiredHostUuid() { return requiredHostUuid; } public void setRequiredHostUuid(String requiredHostUuid) { this.requiredHostUuid = requiredHostUuid; } public boolean isGcOnStopFailure() { return gcOnStopFailure; } public void setGcOnStopFailure(boolean gcOnStopFailure) { this.gcOnStopFailure = gcOnStopFailure; } public List<String> getBootOrders() { return bootOrders; } public void setBootOrders(List<String> bootOrders) { this.bootOrders = bootOrders; } public String getConsolePassword() { return consolePassword; } public void setConsolePassword(String consolePassword) { this.consolePassword = consolePassword; } public String getUserdata() { return userdata; } public void setUserdata(String userdata) { this.userdata = userdata; } public IsoSpec getDestIso() { return destIso; } public void setDestIso(IsoSpec destIso) { this.destIso = destIso; } public VmInstanceSpec() { } public List<HostName> getHostnames() { return hostnames; } public void setHostnames(List<HostName> hostnames) { this.hostnames = hostnames; } public List<VolumeSpec> getVolumeSpecs() { return volumeSpecs; } public void setVolumeSpecs(List<VolumeSpec> volumeSpecs) { this.volumeSpecs = volumeSpecs; } public List<L3NetworkInventory> getL3Networks() { return l3Networks; } public void setL3Networks(List<L3NetworkInventory> l3Networks) { this.l3Networks = l3Networks; } public List<DiskOfferingInventory> getDataDiskOfferings() { if (dataDiskOfferings == null) { dataDiskOfferings = new ArrayList<>(0); } return dataDiskOfferings; } public void setDataDiskOfferings(List<DiskOfferingInventory> dataDiskOfferings) { this.dataDiskOfferings = dataDiskOfferings; } public DiskOfferingInventory getRootDiskOffering() { return rootDiskOffering; } public void setRootDiskOffering(DiskOfferingInventory rootDiskOffering) { this.rootDiskOffering = rootDiskOffering; } public String getHostAllocatorStrategy() { return hostAllocatorStrategy; } public void setHostAllocatorStrategy(String hostAllocatorStrategy) { this.hostAllocatorStrategy = hostAllocatorStrategy; } public String getIpAllocatorStrategy() { return ipAllocatorStrategy; } public void setIpAllocatorStrategy(String ipAllocatorStrategy) { this.ipAllocatorStrategy = ipAllocatorStrategy; } public Message getMessage() { return message; } public void setMessage(Message message) { this.message = message; } public ImageSpec getImageSpec() { return imageSpec; } public void setImageSpec(ImageSpec imageSpec) { this.imageSpec = imageSpec; } public <T> T getExtensionData(String key, Class<?> clazz) { JsonWrapper<T> wrapper = extensionData.get(key); if (wrapper == null) { return null; } return wrapper.get(); } public void putExtensionData(String key, Object data) { this.extensionData.put(key, JsonWrapper.wrap(data)); } public HostInventory getDestHost() { return destHost; } public void setDestHost(HostInventory destHost) { this.destHost = destHost; } public List<VmNicInventory> getDestNics() { return destNics; } public void setDestNics(List<VmNicInventory> destNics) { this.destNics = destNics; } public List<VolumeInventory> getDestDataVolumes() { return destDataVolumes; } public void setDestDataVolumes(List<VolumeInventory> destDataVolumes) { this.destDataVolumes = destDataVolumes; } public VolumeInventory getDestRootVolume() { return destRootVolume; } public void setDestRootVolume(VolumeInventory destRootVolume) { this.destRootVolume = destRootVolume; } public VmOperation getCurrentVmOperation() { return currentVmOperation; } public void setCurrentVmOperation(VmOperation currentVmOperation) { this.currentVmOperation = currentVmOperation; } public VmInstanceInventory getVmInventory() { return vmInventory; } public void setVmInventory(VmInstanceInventory vmInventory) { this.vmInventory = vmInventory; } public String getDataIsoPath() { return dataIsoPath; } public void setDataIsoPath(String dataIsoPath) { this.dataIsoPath = dataIsoPath; } public List<String> getRequiredNetworkServiceTypes() { List<String> nsTypes = new ArrayList<>(); if (getL3Networks() != null) { for (L3NetworkInventory l3 : getL3Networks()) { for (NetworkServiceL3NetworkRefInventory ref : l3.getNetworkServices()) { nsTypes.add(ref.getNetworkServiceType()); } } } return nsTypes; } }