diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index 980467d5188..574b3669113 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -136,7 +136,6 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.CreatePrivateTemplateCommand; import com.cloud.agent.api.storage.DownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.agent.api.to.StoragePoolTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.resource.computing.LibvirtStoragePoolDef.poolType; @@ -160,13 +159,14 @@ import com.cloud.hypervisor.Hypervisor; import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; +import com.cloud.storage.Storage; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.StorageLayer; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.Volume.StorageResourceType; import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.template.Processor; import com.cloud.storage.template.QCOW2Processor; @@ -182,6 +182,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.Script; import com.cloud.vm.ConsoleProxyVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.DomainRouter; import com.cloud.vm.State; import com.cloud.vm.VirtualMachineName; @@ -1162,13 +1163,13 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - protected StorageResourceType getStorageResourceType() { - return StorageResourceType.STORAGE_POOL; + protected Storage.StorageResourceType getStorageResourceType() { + return Storage.StorageResourceType.STORAGE_POOL; } protected Answer execute(CreateCommand cmd) { StoragePoolTO pool = cmd.getPool(); - DiskCharacteristicsTO dskch = cmd.getDiskCharacteristics(); + DiskCharacteristics dskch = cmd.getDiskCharacteristics(); StorageVol tmplVol = null; StoragePool primaryPool = null; StorageVol vol = null; diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java index 08eccfeb8ff..106616673b3 100644 --- a/api/src/com/cloud/storage/Storage.java +++ b/api/src/com/cloud/storage/Storage.java @@ -18,7 +18,7 @@ package com.cloud.storage; public class Storage { - public enum ImageFormat { + public static enum ImageFormat { QCOW2(true, true, false), RAW(false, false, false), VHD(true, true, true), @@ -51,7 +51,7 @@ public class Storage { } } - public enum FileSystem { + public static enum FileSystem { Unknown, ext3, ntfs, @@ -66,7 +66,7 @@ public class Storage { hfsp } - public enum StoragePoolType { + public static enum StoragePoolType { Filesystem(false), //local directory NetworkFilesystem(true), //NFS or CIFS IscsiLUN(true), //shared LUN, with a clusterfs overlay @@ -84,4 +84,6 @@ public class Storage { return shared; } } + + public static enum StorageResourceType {STORAGE_POOL, STORAGE_HOST, SECONDARY_STORAGE} } diff --git a/core/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java old mode 100755 new mode 100644 similarity index 84% rename from core/src/com/cloud/storage/Volume.java rename to api/src/com/cloud/storage/Volume.java index 45d22ee4018..eaddb7c8195 --- a/core/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -17,16 +17,23 @@ */ package com.cloud.storage; -import com.cloud.async.AsyncInstanceCreateStatus; public interface Volume { enum VolumeType {UNKNOWN, ROOT, SWAP, DATADISK}; enum MirrorState {NOT_MIRRORED, ACTIVE, DEFUNCT}; - enum StorageResourceType {STORAGE_POOL, STORAGE_HOST, SECONDARY_STORAGE}; - - /** + enum State { + Allocated, + Creating, + Created, + Corrupted, + ToBeDestroyed, + Expunging, + Destroyed + } + + /** * @return the volume name */ String getName(); @@ -69,12 +76,9 @@ public interface Volume { VolumeType getVolumeType(); - StorageResourceType getStorageResourceType(); + Storage.StorageResourceType getStorageResourceType(); Long getPoolId(); - public AsyncInstanceCreateStatus getStatus(); - - public void setStatus(AsyncInstanceCreateStatus status); - + State getState(); } diff --git a/core/src/com/cloud/agent/api/to/DiskCharacteristicsTO.java b/api/src/com/cloud/vm/DiskCharacteristics.java similarity index 54% rename from core/src/com/cloud/agent/api/to/DiskCharacteristicsTO.java rename to api/src/com/cloud/vm/DiskCharacteristics.java index ec4bf6f8482..b281c661b14 100644 --- a/core/src/com/cloud/agent/api/to/DiskCharacteristicsTO.java +++ b/api/src/com/cloud/vm/DiskCharacteristics.java @@ -15,63 +15,97 @@ * along with this program. If not, see . * */ -package com.cloud.agent.api.to; +package com.cloud.vm; -import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.Volume; -public class DiskCharacteristicsTO { +/** + * DiskCharacteristics describes a disk and what functionality is required from it. + * This object is generated by the management server and passed to the allocators + * and resources to allocate and create disks. There object is immutable once + * it has been created. + */ +public class DiskCharacteristics { private long size; private String[] tags; private Volume.VolumeType type; private String name; private boolean useLocalStorage; private boolean recreatable; + private long diskOfferingId; + private Long templateId; - protected DiskCharacteristicsTO() { + protected DiskCharacteristics() { } - public DiskCharacteristicsTO(Volume.VolumeType type, String name, long size, String[] tags, boolean useLocalStorage, boolean recreatable) { + public DiskCharacteristics(Volume.VolumeType type, String name, long diskOfferingId, long size, String[] tags, boolean useLocalStorage, boolean recreatable, Long templateId) { this.type = type; this.name = name; this.size = size; this.tags = tags; this.useLocalStorage = useLocalStorage; this.recreatable = recreatable; + this.diskOfferingId = diskOfferingId; + this.templateId = templateId; } - - public DiskCharacteristicsTO(Volume.VolumeType type, String name, DiskOfferingVO offering, long size) { - this(type, name, size, offering.getTagsArray(), offering.getUseLocalStorage(), offering.isRecreatable()); - } - - public DiskCharacteristicsTO(Volume.VolumeType type, String name, DiskOfferingVO offering) { - this(type, name, offering.getDiskSizeInBytes(), offering.getTagsArray(), offering.getUseLocalStorage(), offering.isRecreatable()); - } - + + /** + * @return size of the disk requested in bytes. + */ public long getSize() { return size; } + /** + * @return Unique name for the disk. + */ public String getName() { return name; } + /** + * @return tags for the disk. This can be used to match it to different storage pools. + */ public String[] getTags() { return tags; } + /** + * @return type of volume. + */ public Volume.VolumeType getType() { return type; } + /** + * @return Does this volume require local storage? + */ public boolean useLocalStorage() { return useLocalStorage; } + /** + * @return Is this volume recreatable? A volume is recreatable if the disk's content can be + * reconstructed from the template. + */ public boolean isRecreatable() { return recreatable; } + /** + * @return template id the disk is based on. Can be null if it is not based on any templates. + */ + public Long getTemplateId() { + return templateId; + } + + /** + * @return disk offering id that the disk is based on. + */ + public long getDiskOfferingId() { + return diskOfferingId; + } + @Override public String toString() { return new StringBuilder("DskChr[").append(type).append("|").append(size).append("|").append("]").toString(); diff --git a/api/src/com/cloud/vm/NetworkCharacteristics.java b/api/src/com/cloud/vm/NetworkCharacteristics.java new file mode 100644 index 00000000000..9d97e02e6a4 --- /dev/null +++ b/api/src/com/cloud/vm/NetworkCharacteristics.java @@ -0,0 +1,58 @@ +/** + * + */ +package com.cloud.vm; + +import com.cloud.network.Network.BroadcastDomainType; +import com.cloud.network.Network.Mode; + +public class NetworkCharacteristics { + long id; + BroadcastDomainType type; + String ip4Address; + String netmask; + String gateway; + Mode mode; + String[] dns; + + public BroadcastDomainType getType() { + return type; + } + + public String[] getDns() { + return dns; + } + + public String getIp4Address() { + return ip4Address; + } + + public String getNetmask() { + return netmask; + } + + public String getGateway() { + return gateway; + } + + public Mode getMode() { + return mode; + } + + public long getNetworkId() { + return id; + } + + public NetworkCharacteristics() { + } + + public NetworkCharacteristics(long id, BroadcastDomainType type, String ip4Address, String netmask, String gateway, Mode mode, String[] dns) { + this.id = id; + this.type = type; + this.ip4Address = ip4Address; + this.netmask = netmask; + this.gateway = gateway; + this.mode = mode; + this.dns = dns; + } +} diff --git a/api/src/com/cloud/vm/VmCharacteristics.java b/api/src/com/cloud/vm/VmCharacteristics.java index 6df26121c30..94b5f5ac5e6 100644 --- a/api/src/com/cloud/vm/VmCharacteristics.java +++ b/api/src/com/cloud/vm/VmCharacteristics.java @@ -22,12 +22,12 @@ import java.util.Map; import com.cloud.hypervisor.Hypervisor; public class VmCharacteristics { + long id; int core; int speed; // in mhz long ram; // in bytes Hypervisor.Type hypervisorType; VirtualMachine.Type type; - Map params; public VmCharacteristics(VirtualMachine.Type type) { @@ -39,9 +39,6 @@ public class VmCharacteristics { } - public VmCharacteristics() { - } - public int getCores() { return core; } @@ -58,11 +55,15 @@ public class VmCharacteristics { return hypervisorType; } - public VmCharacteristics(int core, int speed, long ram, Hypervisor.Type type, Map params) { + public VmCharacteristics(long id, int core, int speed, long ram, Hypervisor.Type type, Map params) { this.core = core; this.speed = speed; this.ram = ram; this.hypervisorType = type; this.params = params; + this.id = id; + } + + protected VmCharacteristics() { } } \ No newline at end of file diff --git a/build/.gitignore b/build/.gitignore new file mode 100644 index 00000000000..ca06b0abecc --- /dev/null +++ b/build/.gitignore @@ -0,0 +1 @@ +/override diff --git a/build/build.number b/build/build.number new file mode 100644 index 00000000000..e130ae9cdbf --- /dev/null +++ b/build/build.number @@ -0,0 +1,3 @@ +#Build Number for ANT. Do not edit! +#Mon Aug 16 11:01:21 PDT 2010 +build.number=31 diff --git a/build/developer.xml b/build/developer.xml old mode 100755 new mode 100644 index 9bb2d33e6e3..0928e48dfd6 --- a/build/developer.xml +++ b/build/developer.xml @@ -27,6 +27,18 @@ + + + + + + + + + + + + @@ -86,23 +98,11 @@ - + - diff --git a/build/override/build-cloud.properties b/build/override/build-cloud.properties new file mode 100644 index 00000000000..fbceda3fcaa --- /dev/null +++ b/build/override/build-cloud.properties @@ -0,0 +1,19 @@ +# This is a template file for defining properties needed by build-vmops.xml. +# If you need to add properties to be used in build-vmops.xml, then you should +# add it in this file. If all you need is to change the default values, +# you should "cp build-vmops.properties.template build-vmops.properties" +# and modify the values within build-vmops.properties. + +debug=true +debuglevel=vars,lines,source +tomcat.home=/home/tomcat/current +debug.jvmarg=-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n +deprecation=off +meld.home=/usr/bin +target.compat.version=1.6 +source.compat.version=1.6 +assertion=-ea +branding.name=default +build.type=developer +premium.name=premium +#manual.build.number=8 diff --git a/build/override/replace.properties b/build/override/replace.properties new file mode 100644 index 00000000000..2e1bbaab5e2 --- /dev/null +++ b/build/override/replace.properties @@ -0,0 +1,7 @@ +DBUSER=cloud +DBROOTPW= +DBPW=cloud +MSLOG=.\/dist\/vmops.log +APISERVERLOG=.\/dist\/api.log +DBHOST=localhost + diff --git a/core/src/com/cloud/agent/api/StartupStorageCommand.java b/core/src/com/cloud/agent/api/StartupStorageCommand.java old mode 100755 new mode 100644 index a698f58468d..1122e82f0d3 --- a/core/src/com/cloud/agent/api/StartupStorageCommand.java +++ b/core/src/com/cloud/agent/api/StartupStorageCommand.java @@ -20,7 +20,7 @@ package com.cloud.agent.api; import java.util.HashMap; import java.util.Map; -import com.cloud.storage.Volume; +import com.cloud.storage.Storage; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.template.TemplateInfo; @@ -31,7 +31,7 @@ public class StartupStorageCommand extends StartupCommand { Map templateInfo; long totalSize; StoragePoolInfo poolInfo; - Volume.StorageResourceType resourceType; + Storage.StorageResourceType resourceType; StoragePoolType fsType; Map hostDetails = new HashMap(); String nfsShare; @@ -91,11 +91,11 @@ public class StartupStorageCommand extends StartupCommand { this.poolInfo = poolInfo; } - public Volume.StorageResourceType getResourceType() { + public Storage.StorageResourceType getResourceType() { return resourceType; } - public void setResourceType(Volume.StorageResourceType resourceType) { + public void setResourceType(Storage.StorageResourceType resourceType) { this.resourceType = resourceType; } diff --git a/core/src/com/cloud/agent/api/storage/CreateCommand.java b/core/src/com/cloud/agent/api/storage/CreateCommand.java index 2c0ade671a9..99c3d3051c5 100644 --- a/core/src/com/cloud/agent/api/storage/CreateCommand.java +++ b/core/src/com/cloud/agent/api/storage/CreateCommand.java @@ -18,16 +18,16 @@ package com.cloud.agent.api.storage; import com.cloud.agent.api.Command; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.agent.api.to.StoragePoolTO; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VolumeVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; public class CreateCommand extends Command { private long volId; private StoragePoolTO pool; - private DiskCharacteristicsTO diskCharacteristics; + private DiskCharacteristics diskCharacteristics; private String templateUrl; private long size; @@ -44,7 +44,7 @@ public class CreateCommand extends Command { * @param templateUrl * @param pool */ - public CreateCommand(VolumeVO vol, VMInstanceVO vm, DiskCharacteristicsTO diskCharacteristics, String templateUrl, StoragePoolVO pool) { + public CreateCommand(VolumeVO vol, VMInstanceVO vm, DiskCharacteristics diskCharacteristics, String templateUrl, StoragePoolVO pool) { this(vol, vm, diskCharacteristics, pool, 0); this.templateUrl = templateUrl; } @@ -57,7 +57,7 @@ public class CreateCommand extends Command { * @param diskCharacteristics * @param pool */ - public CreateCommand(VolumeVO vol, VMInstanceVO vm, DiskCharacteristicsTO diskCharacteristics, StoragePoolVO pool, long size) { + public CreateCommand(VolumeVO vol, VMInstanceVO vm, DiskCharacteristics diskCharacteristics, StoragePoolVO pool, long size) { this.volId = vol.getId(); this.diskCharacteristics = diskCharacteristics; this.pool = new StoragePoolTO(pool); @@ -78,7 +78,7 @@ public class CreateCommand extends Command { return pool; } - public DiskCharacteristicsTO getDiskCharacteristics() { + public DiskCharacteristics getDiskCharacteristics() { return diskCharacteristics; } diff --git a/core/src/com/cloud/agent/api/to/VolumeTO.java b/core/src/com/cloud/agent/api/to/VolumeTO.java index e0afde2cb2e..39561f9d310 100644 --- a/core/src/com/cloud/agent/api/to/VolumeTO.java +++ b/core/src/com/cloud/agent/api/to/VolumeTO.java @@ -17,12 +17,13 @@ */ package com.cloud.agent.api.to; +import com.cloud.storage.Storage; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateStoragePoolVO; import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.Volume.StorageResourceType; public class VolumeTO { @@ -35,11 +36,11 @@ public class VolumeTO { private String path; private long size; private Volume.VolumeType type; - private Volume.StorageResourceType resourceType; + private Storage.StorageResourceType resourceType; private StoragePoolType storagePoolType; private long poolId; - public VolumeTO(long id, Volume.VolumeType type, Volume.StorageResourceType resourceType, StoragePoolType poolType, String name, String mountPoint, String path, long size) { + public VolumeTO(long id, Volume.VolumeType type, Storage.StorageResourceType resourceType, StoragePoolType poolType, String name, String mountPoint, String path, long size) { this.id = id; this.name= name; this.path = path; @@ -65,12 +66,12 @@ public class VolumeTO { this.id = templatePoolRef.getId(); this.path = templatePoolRef.getInstallPath(); this.size = templatePoolRef.getTemplateSize(); - this.resourceType = StorageResourceType.STORAGE_POOL; + this.resourceType = Storage.StorageResourceType.STORAGE_POOL; this.storagePoolType = pool.getPoolType(); this.mountPoint = pool.getPath(); } - public Volume.StorageResourceType getResourceType() { + public Storage.StorageResourceType getResourceType() { return resourceType; } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 1f5ca0f6827..6503da76def 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -141,18 +141,18 @@ import com.cloud.agent.api.storage.DownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.storage.ShareAnswer; import com.cloud.agent.api.storage.ShareCommand; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.agent.api.to.StoragePoolTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.exception.InternalErrorException; import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor; import com.cloud.resource.ServerResource; +import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.StorageLayer; import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.Volume.StorageResourceType; import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.VolumeVO; import com.cloud.storage.resource.StoragePoolResource; @@ -165,6 +165,7 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; import com.cloud.vm.ConsoleProxyVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.DomainRouter; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; @@ -1119,8 +1120,8 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR } } - protected StorageResourceType getStorageResourceType() { - return StorageResourceType.STORAGE_POOL; + protected Storage.StorageResourceType getStorageResourceType() { + return Storage.StorageResourceType.STORAGE_POOL; } protected CheckHealthAnswer execute(CheckHealthCommand cmd) { @@ -3423,7 +3424,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR StartupStorageCommand cmd = new StartupStorageCommand(); cmd.setPoolInfo(pInfo); cmd.setGuid(_host.uuid); - cmd.setResourceType(StorageResourceType.STORAGE_POOL); + cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL); return cmd; } catch (XenAPIException e) { String msg = "build startupstoragecommand err in host:" + _host.uuid + e.toString(); @@ -4263,7 +4264,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR public CreateAnswer execute(CreateCommand cmd) { StoragePoolTO pool = cmd.getPool(); - DiskCharacteristicsTO dskch = cmd.getDiskCharacteristics(); + DiskCharacteristics dskch = cmd.getDiskCharacteristics(); VDI vdi = null; Connection conn = getConnection(); @@ -4293,7 +4294,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR vdir = vdi.getRecord(conn); s_logger.debug("Succesfully created VDI for " + cmd + ". Uuid = " + vdir.uuid); - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), StorageResourceType.STORAGE_POOL, pool.getType(), vdir.nameLabel, pool.getPath(), vdir.uuid, + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), Storage.StorageResourceType.STORAGE_POOL, pool.getType(), vdir.nameLabel, pool.getPath(), vdir.uuid, vdir.virtualSize); return new CreateAnswer(cmd, vol); } catch (Exception e) { diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 5b972e817a0..eaed5fa3d4b 100644 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -86,8 +86,7 @@ public class DiskOfferingVO implements DiskOffering { @Column(name="use_local_storage") private boolean useLocalStorage; - - + public DiskOfferingVO() { } diff --git a/core/src/com/cloud/storage/FileSystemStorageResource.java b/core/src/com/cloud/storage/FileSystemStorageResource.java index 4df2f409583..72f180935bb 100644 --- a/core/src/com/cloud/storage/FileSystemStorageResource.java +++ b/core/src/com/cloud/storage/FileSystemStorageResource.java @@ -41,7 +41,7 @@ import com.cloud.agent.api.storage.UpgradeDiskAnswer; import com.cloud.agent.api.storage.UpgradeDiskCommand; import com.cloud.agent.api.to.VolumeTO; import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.Volume.StorageResourceType; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.template.TemplateInfo; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NfsUtils; @@ -329,8 +329,8 @@ public abstract class FileSystemStorageResource extends StorageResource { } @Override - protected StorageResourceType getStorageResourceType() { - return StorageResourceType.STORAGE_POOL; + protected Storage.StorageResourceType getStorageResourceType() { + return Storage.StorageResourceType.STORAGE_POOL; } protected String mountNfs(String hostAddress, String hostPath, String localPath) { diff --git a/core/src/com/cloud/storage/StorageManager.java b/core/src/com/cloud/storage/StorageManager.java index 7b7ed9c1aef..77629924d44 100644 --- a/core/src/com/cloud/storage/StorageManager.java +++ b/core/src/com/cloud/storage/StorageManager.java @@ -34,7 +34,6 @@ import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.user.Account; -import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; import com.cloud.utils.exception.ExecutionException; diff --git a/core/src/com/cloud/storage/StorageResource.java b/core/src/com/cloud/storage/StorageResource.java old mode 100755 new mode 100644 index 6ca2dd80cc7..c80509708a4 --- a/core/src/com/cloud/storage/StorageResource.java +++ b/core/src/com/cloud/storage/StorageResource.java @@ -304,7 +304,7 @@ public abstract class StorageResource extends ServerResourceBase implements Serv protected abstract Answer execute(DestroyCommand cmd) ; protected abstract UpgradeDiskAnswer execute(final UpgradeDiskCommand cmd); protected abstract String delete(String imagePath, String extra); - protected abstract Volume.StorageResourceType getStorageResourceType(); + protected abstract Storage.StorageResourceType getStorageResourceType(); protected abstract void configureFolders(String name, Map params) throws ConfigurationException ; diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java old mode 100755 new mode 100644 index c85d628b8da..fe0c6ce0e02 --- a/core/src/com/cloud/storage/VolumeVO.java +++ b/core/src/com/cloud/storage/VolumeVO.java @@ -96,7 +96,7 @@ public class VolumeVO implements Volume { String hostip; @Column(name="disk_offering_id") - Long diskOfferingId; + long diskOfferingId; @Expose @Column(name="mirror_vol") @@ -129,7 +129,7 @@ public class VolumeVO implements Volume { @Expose @Column(name="resource_type") @Enumerated(EnumType.STRING) - StorageResourceType storageResourceType; + Storage.StorageResourceType storageResourceType; @Expose @Column(name="status", updatable = true, nullable=false) @@ -143,6 +143,10 @@ public class VolumeVO implements Volume { @Column(name="recreatable") boolean recreatable; + @Column(name="state") + @Enumerated(value=EnumType.STRING) + private State state; + /** * Constructor for data disk. * @param type @@ -167,9 +171,24 @@ public class VolumeVO implements Volume { this.templateId = null; this.mirrorState = MirrorState.NOT_MIRRORED; this.mirrorVolume = null; - this.storageResourceType = StorageResourceType.STORAGE_POOL; + this.storageResourceType = Storage.StorageResourceType.STORAGE_POOL; this.poolType = null; } + + // Real Constructor + public VolumeVO(VolumeType type, String name, long dcId, long domainId, long accountId, long diskOfferingId, long size) { + this.volumeType = type; + this.name = name; + this.dataCenterId = dcId; + this.accountId = accountId; + this.domainId = domainId; + this.size = size; + this.mirrorVolume = null; + this.mirrorState = MirrorState.NOT_MIRRORED; + this.diskOfferingId = diskOfferingId; + this.status = AsyncInstanceCreateStatus.Creating; + this.state = State.Allocated; + } /** * Constructor for volume based on a template. @@ -371,11 +390,11 @@ public class VolumeVO implements Volume { this.mirrorState = mirrorState; } - public Long getDiskOfferingId() { + public long getDiskOfferingId() { return diskOfferingId; } - public void setDiskOfferingId(Long diskOfferingId) { + public void setDiskOfferingId(long diskOfferingId) { this.diskOfferingId = diskOfferingId; } @@ -404,11 +423,11 @@ public class VolumeVO implements Volume { } @Override - public StorageResourceType getStorageResourceType() { + public Storage.StorageResourceType getStorageResourceType() { return storageResourceType; } - public void setStorageResourceType(StorageResourceType storageResourceType2) { + public void setStorageResourceType(Storage.StorageResourceType storageResourceType2) { this.storageResourceType = storageResourceType2; } @@ -420,12 +439,10 @@ public class VolumeVO implements Volume { this.poolId = poolId; } - @Override public AsyncInstanceCreateStatus getStatus() { return status; } - @Override public void setStatus(AsyncInstanceCreateStatus status) { this.status = status; } @@ -433,6 +450,10 @@ public class VolumeVO implements Volume { public Date getUpdated() { return updated; } + + public State getState() { + return state; + } public void setUpdated(Date updated) { this.updated = updated; diff --git a/core/src/com/cloud/storage/resource/DummySecondaryStorageResource.java b/core/src/com/cloud/storage/resource/DummySecondaryStorageResource.java index b15a538de78..611dc1c5450 100644 --- a/core/src/com/cloud/storage/resource/DummySecondaryStorageResource.java +++ b/core/src/com/cloud/storage/resource/DummySecondaryStorageResource.java @@ -42,7 +42,7 @@ import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; -import com.cloud.storage.Volume; +import com.cloud.storage.Storage; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.template.TemplateInfo; @@ -102,7 +102,7 @@ public class DummySecondaryStorageResource extends ServerResourceBase implements StoragePoolType.NetworkFilesystem, 1024*1024*1024*100L, new HashMap()); - cmd.setResourceType(Volume.StorageResourceType.SECONDARY_STORAGE); + cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE); cmd.setIqn(null); cmd.setNfsShare(_guid); diff --git a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java index dc00d8983d0..51be90328c7 100644 --- a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java +++ b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java @@ -52,8 +52,8 @@ import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; +import com.cloud.storage.Storage; import com.cloud.storage.StorageLayer; -import com.cloud.storage.Volume; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.template.DownloadManager; import com.cloud.storage.template.DownloadManagerImpl; @@ -600,7 +600,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S final StartupStorageCommand cmd = new StartupStorageCommand(_parent, StoragePoolType.NetworkFilesystem, getTotalSize(), new HashMap()); - cmd.setResourceType(Volume.StorageResourceType.SECONDARY_STORAGE); + cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE); cmd.setIqn(null); fillNetworkInformation(cmd); diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java old mode 100755 new mode 100644 index a34cd13381f..d360d1ec242 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -110,11 +110,12 @@ import com.cloud.resource.Discoverer; import com.cloud.resource.ServerResource; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.GuestOSCategoryVO; +import com.cloud.storage.Storage; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VirtualMachineTemplate; -import com.cloud.storage.Volume.StorageResourceType; import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; @@ -1403,7 +1404,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { if (startup instanceof StartupStorageCommand) { StartupStorageCommand ssCmd = ((StartupStorageCommand) startup); - if (ssCmd.getResourceType() == StorageResourceType.SECONDARY_STORAGE) { + if (ssCmd.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE) { type = Host.Type.SecondaryStorage; if (resource != null && resource instanceof DummySecondaryStorageResource){ resource = null; @@ -1755,7 +1756,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { if (startup instanceof StartupStorageCommand) { StartupStorageCommand ssCmd = (StartupStorageCommand) startup; - if (ssCmd.getResourceType() == StorageResourceType.STORAGE_HOST) { + if (ssCmd.getResourceType() == Storage.StorageResourceType.STORAGE_HOST) { CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), 0L, server.getTotalSize(), CapacityVO.CAPACITY_TYPE_STORAGE); _capacityDao.persist(capacity); diff --git a/server/src/com/cloud/api/commands/ListVolumesCmd.java b/server/src/com/cloud/api/commands/ListVolumesCmd.java index ca414103ec1..a4680be0441 100644 --- a/server/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/server/src/com/cloud/api/commands/ListVolumesCmd.java @@ -218,11 +218,8 @@ public class ListVolumesCmd extends BaseCmd{ volumeData.add(new Pair(BaseCmd.Properties.STORAGE_TYPE.getName(), storageType)); volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_ID.getName(),volume.getDiskOfferingId())); - if(volume.getDiskOfferingId()!=null) - { - volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_NAME.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getName())); - volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_DISPLAY_TEXT.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getDisplayText())); - } + volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_NAME.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getName())); + volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_DISPLAY_TEXT.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getDisplayText())); Long poolId = volume.getPoolId(); String poolName = (poolId == null) ? "none" : getManagementServer().findPoolById(poolId).getName(); volumeData.add(new Pair(BaseCmd.Properties.STORAGE.getName(), poolName)); diff --git a/server/src/com/cloud/storage/LocalStoragePoolListener.java b/server/src/com/cloud/storage/LocalStoragePoolListener.java index 626a7cad7d8..2c82edfe064 100644 --- a/server/src/com/cloud/storage/LocalStoragePoolListener.java +++ b/server/src/com/cloud/storage/LocalStoragePoolListener.java @@ -29,7 +29,7 @@ import com.cloud.agent.api.StartupStorageCommand; import com.cloud.agent.api.StoragePoolInfo; import com.cloud.host.HostVO; import com.cloud.host.Status; -import com.cloud.storage.Volume.StorageResourceType; +import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.utils.component.Inject; @@ -72,7 +72,7 @@ public class LocalStoragePoolListener implements Listener { StartupStorageCommand ssCmd = (StartupStorageCommand)cmd; - if (ssCmd.getResourceType() != StorageResourceType.STORAGE_POOL) { + if (ssCmd.getResourceType() != Storage.StorageResourceType.STORAGE_POOL) { return true; } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index a25e42c3f0c..f13c6b30699 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -55,7 +55,6 @@ import com.cloud.agent.api.storage.CreateAnswer; import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.api.storage.DeleteTemplateCommand; import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.alert.AlertManager; import com.cloud.api.BaseCmd; @@ -64,7 +63,6 @@ import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.async.BaseAsyncJobExecutor; -import com.cloud.async.executor.VMOperationParam; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Config; @@ -91,9 +89,9 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; +import com.cloud.host.Host.Type; import com.cloud.host.HostVO; import com.cloud.host.Status; -import com.cloud.host.Host.Type; import com.cloud.host.dao.DetailsDao; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; @@ -104,7 +102,6 @@ import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Volume.MirrorState; -import com.cloud.storage.Volume.StorageResourceType; import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.allocator.StoragePoolAllocator; import com.cloud.storage.dao.DiskOfferingDao; @@ -122,6 +119,7 @@ import com.cloud.storage.snapshot.SnapshotScheduler; import com.cloud.template.TemplateManager; import com.cloud.user.Account; import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; import com.cloud.user.User; import com.cloud.user.dao.AccountDao; import com.cloud.uservm.UserVm; @@ -138,7 +136,7 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; -import com.cloud.vm.ConsoleProxyVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.State; import com.cloud.vm.UserVmManager; import com.cloud.vm.UserVmVO; @@ -227,6 +225,39 @@ public class StorageManagerImpl implements StorageManager { return true; } + protected void setDeviceId(VolumeVO vol) { + //TODO: Need to figure out what to do here. + vol.setDeviceId(1l); + } + + @DB + public List allocate(DiskCharacteristics rootDisk, List dataDisks, VMInstanceVO vm, DataCenterVO dc, AccountVO account) { + ArrayList vols = new ArrayList(dataDisks.size() + 1); + VolumeVO dataVol = null; + VolumeVO rootVol = null; + long deviceId = 0; + Transaction txn = Transaction.currentTxn(); + txn.start(); + rootVol = new VolumeVO(VolumeType.ROOT, rootDisk.getName(), dc.getId(), account.getDomainId(), account.getId(), rootDisk.getDiskOfferingId(), rootDisk.getSize()); + if (rootDisk.getTemplateId() != null) { + rootVol.setTemplateId(rootDisk.getTemplateId()); + } + rootVol.setInstanceId(vm.getId()); + rootVol.setDeviceId(deviceId++); + rootVol = _volsDao.persist(rootVol); + vols.add(rootVol); + for (DiskCharacteristics dataDisk : dataDisks) { + dataVol = new VolumeVO(VolumeType.DATADISK, dataDisk.getName(), dc.getId(), account.getDomainId(), account.getId(), dataDisk.getDiskOfferingId(), dataDisk.getSize()); + dataVol.setDeviceId(deviceId++); + dataVol = _volsDao.persist(dataVol); + dataVol.setInstanceId(vm.getId()); + vols.add(dataVol); + } + txn.commit(); + + return vols; + } + public List prepare(VMInstanceVO vm, HostVO host) { List vols = _volsDao.findCreatedByInstance(vm.getId()); List recreateVols = new ArrayList(vols.size()); @@ -259,9 +290,7 @@ public class StorageManagerImpl implements StorageManager { DataCenterVO dc = _dcDao.findById(create.getDataCenterId()); HostPodVO pod = _podDao.findById(host.getPodId()); DiskOfferingVO diskOffering = null; - if (vol.getDiskOfferingId() != null) { - diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId()); - } + diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId()); ServiceOfferingVO offering; if (vm instanceof UserVmVO) { offering = _offeringDao.findById(((UserVmVO)vm).getServiceOfferingId()); @@ -333,7 +362,7 @@ public class StorageManagerImpl implements StorageManager { return unshare(vm, vols, host) ? vols : null; } - protected StoragePoolVO findStoragePool(DiskCharacteristicsTO dskCh, final DataCenterVO dc, HostPodVO pod, Long clusterId, final ServiceOffering offering, final VMInstanceVO vm, final VMTemplateVO template, final Set avoid) { + protected StoragePoolVO findStoragePool(DiskCharacteristics dskCh, final DataCenterVO dc, HostPodVO pod, Long clusterId, final ServiceOffering offering, final VMInstanceVO vm, final VMTemplateVO template, final Set avoid) { Enumeration en = _storagePoolAllocators.enumeration(); while (en.hasMoreElements()) { final StoragePoolAllocator allocator = en.nextElement(); @@ -385,7 +414,7 @@ public class StorageManagerImpl implements StorageManager { return answers[0]; } - protected DiskCharacteristicsTO createDiskCharacteristics(VolumeVO volume, VMTemplateVO template, DataCenterVO dc, DiskOfferingVO diskOffering) { + protected DiskCharacteristics createDiskCharacteristics(VolumeVO volume, VMTemplateVO template, DataCenterVO dc, DiskOfferingVO diskOffering) { if (volume.getVolumeType() == VolumeType.ROOT && Storage.ImageFormat.ISO != template.getFormat()) { SearchCriteria sc = HostTemplateStatesSearch.create(); sc.setParameters("id", template.getId()); @@ -398,9 +427,9 @@ public class StorageManagerImpl implements StorageManager { } VMTemplateHostVO ss = sss.get(0); - return new DiskCharacteristicsTO(volume.getVolumeType(), volume.getName(), diskOffering, ss.getSize()); + return new DiskCharacteristics(volume.getVolumeType(), volume.getName(), diskOffering.getId(), ss.getSize(), diskOffering.getTagsArray(), diskOffering.getUseLocalStorage(), diskOffering.isRecreatable(), Storage.ImageFormat.ISO != template.getFormat() ? template.getId() : null); } else { - return new DiskCharacteristicsTO(volume.getVolumeType(), volume.getName(), diskOffering); + return new DiskCharacteristics(volume.getVolumeType(), volume.getName(), diskOffering.getId(), diskOffering.getDiskSizeInBytes(), diskOffering.getTagsArray(), diskOffering.getUseLocalStorage(), diskOffering.isRecreatable(), null); } } @@ -436,7 +465,7 @@ public class StorageManagerImpl implements StorageManager { volume.setDiskOfferingId(diskOffering.getId()); } volume.setSize(originalVolumeSize); - volume.setStorageResourceType(StorageResourceType.STORAGE_POOL); + volume.setStorageResourceType(Storage.StorageResourceType.STORAGE_POOL); volume.setInstanceId(null); volume.setUpdated(new Date()); volume.setStatus(AsyncInstanceCreateStatus.Creating); @@ -462,7 +491,7 @@ public class StorageManagerImpl implements StorageManager { String volumeUUID = null; String details = null; - DiskCharacteristicsTO dskCh = createDiskCharacteristics(volume, template, dc, diskOffering); + DiskCharacteristics dskCh = createDiskCharacteristics(volume, template, dc, diskOffering); // Determine what pod to store the volume in @@ -617,9 +646,7 @@ public class StorageManagerImpl implements StorageManager { if(originalVolume.getTemplateId() != null){ templateId = originalVolume.getTemplateId(); } - if(originalVolume.getDiskOfferingId() != null){ - diskOfferingId = originalVolume.getDiskOfferingId(); - } + diskOfferingId = originalVolume.getDiskOfferingId(); long sizeMB = createdVolume.getSize()/(1024*1024); String poolName = _storagePoolDao.findById(createdVolume.getPoolId()).getName(); @@ -690,7 +717,7 @@ public class StorageManagerImpl implements StorageManager { StoragePoolVO pool = null; final HashSet avoidPools = new HashSet(avoids); - DiskCharacteristicsTO dskCh = null; + DiskCharacteristics dskCh = null; if (volume.getVolumeType() == VolumeType.ROOT && Storage.ImageFormat.ISO != template.getFormat()) { dskCh = createDiskCharacteristics(volume, template, dc, offering); } else { @@ -1439,7 +1466,7 @@ public class StorageManagerImpl implements StorageManager { public VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId) throws InternalErrorException { // Find a destination storage pool with the specified criteria DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId()); - DiskCharacteristicsTO dskCh = new DiskCharacteristicsTO(volume.getVolumeType(), volume.getName(), diskOffering); + DiskCharacteristics dskCh = new DiskCharacteristics(volume.getVolumeType(), volume.getName(), diskOffering.getId(), diskOffering.getDiskSizeInBytes(), diskOffering.getTagsArray(), diskOffering.getUseLocalStorage(), diskOffering.isRecreatable(), null); DataCenterVO destPoolDataCenter = _dcDao.findById(destPoolDcId); HostPodVO destPoolPod = _podDao.findById(destPoolPodId); StoragePoolVO destPool = findStoragePool(dskCh, destPoolDataCenter, destPoolPod, destPoolClusterId, null, null, null, new HashSet()); @@ -1523,7 +1550,7 @@ public class StorageManagerImpl implements StorageManager { volume.setDomainId(account.getDomainId().longValue()); volume.setMirrorState(MirrorState.NOT_MIRRORED); volume.setDiskOfferingId(diskOffering.getId()); - volume.setStorageResourceType(StorageResourceType.STORAGE_POOL); + volume.setStorageResourceType(Storage.StorageResourceType.STORAGE_POOL); volume.setInstanceId(null); volume.setUpdated(new Date()); volume.setStatus(AsyncInstanceCreateStatus.Creating); diff --git a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java index ed8d67ca8a3..b332bd187cc 100644 --- a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java @@ -27,7 +27,6 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -56,6 +55,7 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; @@ -100,7 +100,7 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement return true; } - abstract boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering); + abstract boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering); protected boolean templateAvailable(long templateId, long poolId) { VMTemplateStorageResourceAssoc thvo = _templatePoolDao.findByPoolTemplate(poolId, templateId); @@ -114,7 +114,7 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement } } - protected boolean localStorageAllocationNeeded(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + protected boolean localStorageAllocationNeeded(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { if (vm == null) { // We are finding a pool for a volume, so we need a shared storage allocator return false; @@ -128,12 +128,12 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement } } - protected boolean poolIsCorrectType(DiskCharacteristicsTO dskCh, StoragePool pool, VMInstanceVO vm, ServiceOffering offering) { + protected boolean poolIsCorrectType(DiskCharacteristics dskCh, StoragePool pool, VMInstanceVO vm, ServiceOffering offering) { boolean localStorageAllocationNeeded = localStorageAllocationNeeded(dskCh, vm, offering); return ((!localStorageAllocationNeeded && pool.getPoolType().isShared()) || (localStorageAllocationNeeded && !pool.getPoolType().isShared())); } - protected boolean checkPool(Set avoid, StoragePoolVO pool, DiskCharacteristicsTO dskCh, VMTemplateVO template, List templatesInPool, ServiceOffering offering, + protected boolean checkPool(Set avoid, StoragePoolVO pool, DiskCharacteristics dskCh, VMTemplateVO template, List templatesInPool, ServiceOffering offering, VMInstanceVO vm, StatsCollector sc) { if (avoid.contains(pool)) { return false; diff --git a/server/src/com/cloud/storage/allocator/FirstFitStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/FirstFitStoragePoolAllocator.java index ae9bf16f7db..24bc8a3e6c9 100644 --- a/server/src/com/cloud/storage/allocator/FirstFitStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/FirstFitStoragePoolAllocator.java @@ -25,7 +25,6 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.offering.ServiceOffering; @@ -33,6 +32,7 @@ import com.cloud.server.StatsCollector; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; @Local(value=StoragePoolAllocator.class) @@ -40,12 +40,12 @@ public class FirstFitStoragePoolAllocator extends AbstractStoragePoolAllocator { private static final Logger s_logger = Logger.getLogger(FirstFitStoragePoolAllocator.class); @Override - public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { return !localStorageAllocationNeeded(dskCh, vm, offering); } @Override - public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, + public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set avoid) { // Check that the allocator type is correct if (!allocatorIsCorrectType(dskCh, vm, offering)) { diff --git a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java index 9bb42ce5c90..ca49b197d89 100644 --- a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java @@ -26,7 +26,6 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; @@ -35,6 +34,7 @@ import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; import com.cloud.storage.VMTemplateVO; import com.cloud.utils.component.ComponentLocator; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; @Local(value=StoragePoolAllocator.class) @@ -48,7 +48,7 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl boolean _storagePoolCleanupEnabled; @Override - public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { return true; } @@ -61,7 +61,7 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl } @Override - public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, + public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, diff --git a/server/src/com/cloud/storage/allocator/LocalStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/LocalStoragePoolAllocator.java index 6c77e946c2a..b70e7049fd0 100644 --- a/server/src/com/cloud/storage/allocator/LocalStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/LocalStoragePoolAllocator.java @@ -27,7 +27,6 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.dao.ConfigurationDao; @@ -49,6 +48,7 @@ import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.State; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; @@ -83,12 +83,12 @@ public class LocalStoragePoolAllocator extends FirstFitStoragePoolAllocator { @Override - public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { return localStorageAllocationNeeded(dskCh, vm, offering); } @Override - public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, + public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, diff --git a/server/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java index ee0b6252911..7937372ec79 100644 --- a/server/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java @@ -25,7 +25,6 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.offering.ServiceOffering; @@ -33,6 +32,7 @@ import com.cloud.server.StatsCollector; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateVO; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; @Local(value=StoragePoolAllocator.class) @@ -40,12 +40,12 @@ public class RandomStoragePoolAllocator extends AbstractStoragePoolAllocator { private static final Logger s_logger = Logger.getLogger(RandomStoragePoolAllocator.class); @Override - public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { return true; } @Override - public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, + public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set avoid) { diff --git a/server/src/com/cloud/storage/allocator/StoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/StoragePoolAllocator.java index 8d592ec4bfb..8972d2418e7 100644 --- a/server/src/com/cloud/storage/allocator/StoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/StoragePoolAllocator.java @@ -19,7 +19,6 @@ package com.cloud.storage.allocator; import java.util.Set; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.host.Host; @@ -27,6 +26,7 @@ import com.cloud.offering.ServiceOffering; import com.cloud.storage.StoragePool; import com.cloud.storage.VMTemplateVO; import com.cloud.utils.component.Adapter; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; @@ -36,7 +36,7 @@ import com.cloud.vm.VirtualMachine; */ public interface StoragePoolAllocator extends Adapter { - StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long cluster, VMInstanceVO vm, VMTemplateVO template, Set avoids); + StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long cluster, VMInstanceVO vm, VMTemplateVO template, Set avoids); String chooseStorageIp(VirtualMachine vm, Host host, Host storage); } diff --git a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java index 1423b214349..6d9c1adfdef 100644 --- a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java +++ b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java @@ -23,7 +23,6 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.agent.api.to.DiskCharacteristicsTO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; @@ -34,6 +33,7 @@ import com.cloud.storage.StoragePool; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume.VolumeType; import com.cloud.utils.component.ComponentLocator; +import com.cloud.vm.DiskCharacteristics; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; @@ -42,7 +42,7 @@ public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implemen boolean _useLocalStorage; @Override - public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set avoids) { + public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set avoids) { if (!_useLocalStorage) { return null; } @@ -69,7 +69,7 @@ public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implemen } @Override - protected boolean localStorageAllocationNeeded(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) { + protected boolean localStorageAllocationNeeded(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) { if (dskCh.getType() == VolumeType.ROOT) { return true; } else if (dskCh.getType() == VolumeType.DATADISK) { diff --git a/server/src/com/cloud/storage/download/DownloadListener.java b/server/src/com/cloud/storage/download/DownloadListener.java index e0e97e111ce..0d83855bd32 100644 --- a/server/src/com/cloud/storage/download/DownloadListener.java +++ b/server/src/com/cloud/storage/download/DownloadListener.java @@ -40,9 +40,9 @@ import com.cloud.agent.api.storage.DownloadProgressCommand.RequestType; import com.cloud.event.EventTypes; import com.cloud.event.EventVO; import com.cloud.host.HostVO; +import com.cloud.storage.Storage; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.Volume; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.download.DownloadState.DownloadEvent; @@ -286,8 +286,8 @@ public class DownloadListener implements Listener { long agentId = agent.getId(); StartupStorageCommand storage = (StartupStorageCommand)cmd; - if (storage.getResourceType() == Volume.StorageResourceType.STORAGE_HOST || - storage.getResourceType() == Volume.StorageResourceType.SECONDARY_STORAGE ) + if (storage.getResourceType() == Storage.StorageResourceType.STORAGE_HOST || + storage.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE ) { downloadMonitor.handleTemplateSync(agentId, storage.getTemplateInfo()); } else { diff --git a/server/src/com/cloud/storage/secondary/LocalSecondaryStorageResource.java b/server/src/com/cloud/storage/secondary/LocalSecondaryStorageResource.java index f5878e0aa48..0d051c1b452 100644 --- a/server/src/com/cloud/storage/secondary/LocalSecondaryStorageResource.java +++ b/server/src/com/cloud/storage/secondary/LocalSecondaryStorageResource.java @@ -40,8 +40,8 @@ import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; +import com.cloud.storage.Storage; import com.cloud.storage.StorageLayer; -import com.cloud.storage.Volume; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.template.DownloadManager; import com.cloud.storage.template.DownloadManagerImpl; @@ -160,7 +160,7 @@ public class LocalSecondaryStorageResource extends ServerResourceBase implements public StartupCommand[] initialize() { final StartupStorageCommand cmd = new StartupStorageCommand(_parent, StoragePoolType.Filesystem, 1024l*1024l*1024l*1024l, _dlMgr.gatherTemplateInfo()); - cmd.setResourceType(Volume.StorageResourceType.SECONDARY_STORAGE); + cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE); cmd.setIqn(null); fillNetworkInformation(cmd); cmd.setDataCenter(_dc); diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java b/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java index 3c91763f102..72677dbfe9c 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java @@ -28,7 +28,8 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupStorageCommand; import com.cloud.host.HostVO; import com.cloud.host.Status; -import com.cloud.storage.Volume.StorageResourceType; +import com.cloud.storage.Storage; +import com.cloud.storage.Storage.StorageResourceType; public class SecondaryStorageListener implements Listener { private final static Logger s_logger = Logger.getLogger(SecondaryStorageListener.class); @@ -82,7 +83,7 @@ public class SecondaryStorageListener implements Listener { if (cmd instanceof StartupStorageCommand) { StartupStorageCommand ss = (StartupStorageCommand)cmd; - if (ss.getResourceType() == StorageResourceType.SECONDARY_STORAGE) { + if (ss.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE) { _ssVmMgr.onAgentConnect(agent.getDataCenterId(), cmd); _ssVmMgr.generateFirewallConfiguration(agent.getId()); _ssVmMgr.generateSetupCommand(agent.getDataCenterId()); diff --git a/server/src/com/cloud/vm/MauriceMoss.java b/server/src/com/cloud/vm/MauriceMoss.java index 1223b63012e..c3da57fd10b 100644 --- a/server/src/com/cloud/vm/MauriceMoss.java +++ b/server/src/com/cloud/vm/MauriceMoss.java @@ -17,6 +17,8 @@ */ package com.cloud.vm; +import java.util.List; + import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.DiskOfferingVO; @@ -27,41 +29,27 @@ public class MauriceMoss implements VmManager { public VMInstanceVO allocate(VMInstanceVO vm, ServiceOfferingVO serviceOffering, NetworkOfferingVO[] networkOfferings, DiskOfferingVO[] diskOffering) { return null; } - - /* (non-Javadoc) - * @see com.cloud.vm.VmManager#create(com.cloud.vm.VMInstanceVO) - */ @Override - public void create(VMInstanceVO vm) { + public void create(VmCharacteristics vm, List disks, List networks) { // TODO Auto-generated method stub } - /* (non-Javadoc) - * @see com.cloud.vm.VmManager#destroy() - */ @Override public void destroy() { // TODO Auto-generated method stub } - /* (non-Javadoc) - * @see com.cloud.vm.VmManager#start() - */ @Override public void start() { // TODO Auto-generated method stub } - /* (non-Javadoc) - * @see com.cloud.vm.VmManager#stop() - */ @Override public void stop() { // TODO Auto-generated method stub - } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java old mode 100755 new mode 100644 index 89ae3351502..14b6a32c94d --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1767,9 +1767,7 @@ public class UserVmManagerImpl implements UserVmManager { if(volume.getTemplateId() !=null){ templateId = volume.getTemplateId(); } - if(volume.getDiskOfferingId() !=null){ - diskOfferingId = volume.getDiskOfferingId(); - } + diskOfferingId = volume.getDiskOfferingId(); long sizeMB = volume.getSize()/(1024*1024); String eventParams = "id=" + volume.getId() +"\ndoId="+diskOfferingId+"\ntId="+templateId+"\ndcId="+volume.getDataCenterId()+"\nsize="+sizeMB; EventVO volEvent = new EventVO(); diff --git a/server/src/com/cloud/vm/VmManager.java b/server/src/com/cloud/vm/VmManager.java index 115bb18936b..2da194a7f7c 100644 --- a/server/src/com/cloud/vm/VmManager.java +++ b/server/src/com/cloud/vm/VmManager.java @@ -17,6 +17,8 @@ */ package com.cloud.vm; +import java.util.List; + import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.DiskOfferingVO; @@ -31,7 +33,7 @@ public interface VmManager { NetworkOfferingVO[] networkOfferings, DiskOfferingVO[] diskOffering); - void create(VMInstanceVO vm); + void create(VmCharacteristics vm, List disks, List networks); void start(); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index d58e157bffe..2bfe94c29bf 100644 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -222,7 +222,7 @@ CREATE TABLE `cloud`.`volumes` ( `data_center_id` bigint unsigned NOT NULL COMMENT 'data center this volume belongs to', `iscsi_name` varchar(255) COMMENT 'iscsi target name', `host_ip` varchar(15) COMMENT 'host ip address for convenience', - `volume_type` varchar(64) COMMENT 'root, swap or data', + `volume_type` varchar(64) NOT NULL COMMENT 'root, swap or data', `resource_type` varchar(64) COMMENT 'pool-based or host-based', `pool_type` varchar(64) COMMENT 'type of the pool', `mirror_state` varchar(64) COMMENT 'not_mirrored, active or defunct', @@ -236,6 +236,7 @@ CREATE TABLE `cloud`.`volumes` ( `updated` datetime COMMENT 'Date updated for attach/detach', `removed` datetime COMMENT 'Date removed. not null if removed', `status` varchar(32) COMMENT 'Async API volume creation status', + `state` varchar(32) COMMENT 'State machine', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/setup/db/override/server-setup.xml b/setup/db/override/server-setup.xml new file mode 100644 index 00000000000..76f67e0cd8d --- /dev/null +++ b/setup/db/override/server-setup.xml @@ -0,0 +1,583 @@ + + + 2.0 + + + 1 + AH + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 100-199 + 10.1.1.0/24 + + + 2 + KM + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 200-299 + 10.1.1.0/24 + + + 3 + KY + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 300-399 + 10.1.1.0/24 + + + 4 + WC + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 400-499 + 10.1.1.0/24 + + + 5 + CV + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 500-599 + 10.1.1.0/24 + + + 6 + KS + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 600-699 + 10.1.1.0/24 + + + 7 + ES + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 700-799 + 10.1.1.0/24 + + + 8 + RC + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 800-899 + 10.1.1.0/24 + + + 9 + AX + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 900-999 + 10.1.1.0/24 + + + 10 + JW + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 900-999 + 10.1.1.0/24 + + + 11 + AJ + 72.52.126.11 + 72.52.126.12 + 192.168.10.253 + 192.168.10.254 + 1000-1099 + 10.1.1.0/24 + + + + + + + 1 + 31 + VirtualNetwork + 192.168.31.1 + 255.255.255.0 + 192.168.31.150-192.168.31.159 + + + 2 + 32 + VirtualNetwork + 192.168.32.1 + 255.255.255.0 + 192.168.32.150-192.168.32.159 + + + 3 + 33 + VirtualNetwork + 192.168.33.1 + 255.255.255.0 + 192.168.33.150-192.168.33.159 + + + 4 + 34 + VirtualNetwork + 192.168.34.1 + 255.255.255.0 + 192.168.34.150-192.168.34.159 + + + 5 + 35 + VirtualNetwork + 192.168.35.1 + 255.255.255.0 + 192.168.35.150-192.168.35.159 + + + 6 + 36 + VirtualNetwork + 192.168.36.1 + 255.255.255.0 + 192.168.36.150-192.168.36.159 + + + 7 + 37 + VirtualNetwork + 192.168.37.1 + 255.255.255.0 + 192.168.37.150-192.168.37.159 + + + 8 + 38 + VirtualNetwork + 192.168.38.1 + 255.255.255.0 + 192.168.38.150-192.168.38.159 + + + 9 + 39 + VirtualNetwork + 192.168.39.1 + 255.255.255.0 + 192.168.39.150-192.168.39.159 + + + 10 + 40 + VirtualNetwork + 192.168.40.1 + 255.255.255.0 + 192.168.40.150-192.168.40.159 + + + 11 + 41 + VirtualNetwork + 192.168.41.1 + 255.255.255.0 + 192.168.41.150-192.168.41.159 + + + + + + 1 + AH + 1 + 192.168.140.20-192.168.140.24 + 192.168.140.0/24 + 192.168.140.1 + + + 2 + KM + 2 + 192.168.10.25-192.168.10.29 + 192.168.10.0/24 + 192.168.10.1 + + + 3 + KY + 3 + 192.168.10.30-192.168.10.34 + 192.168.10.0/24 + 192.168.10.1 + + + 4 + WC + 4 + 192.168.10.35-192.168.10.39 + 192.168.10.0/24 + 192.168.10.1 + + + 5 + CV + 5 + 192.168.10.40-192.168.10.44 + 192.168.10.0/24 + 192.168.10.1 + + + 6 + KS + 6 + 192.168.10.45-192.168.10.49 + 192.168.10.0/24 + 192.168.10.1 + + + 7 + ES + 7 + 192.168.10.50-192.168.10.54 + 192.168.10.0/24 + 192.168.10.1 + + + 8 + RC + 8 + 192.168.10.55-192.168.10.59 + 192.168.10.0/24 + 192.168.10.1 + + + 9 + AX + 9 + 192.168.10.62-192.168.10.64 + 192.168.10.0/24 + 192.168.10.1 + + + 10 + JW + 10 + 192.168.10.65-192.168.10.69 + 192.168.10.0/24 + 192.168.10.1 + + + 11 + AJ + 11 + 192.168.10.70-192.168.10.74 + 192.168.10.0/24 + 192.168.10.1 + + + + + + + 1 + Small Instance + Small Instance [500MHZ CPU, 512MB MEM, 16GB Disk] - $0.10 per hour + 1 + 512 + 500 + false + + + 2 + Medium Instance + Medium Instance [500MHZ CPU, 1GB MEM, 32GB Disk] - $0.20 per hour + 1 + 1024 + 512 + + + 3 + Large Instance + Large Instance [2GHZ CPU, 4GB MEM, 64GB Disk] - $0.30 per hour + 2 + 4096 + 2000 + + + + + + 1 + 1 + Small Disk + Small Disk [16GB Disk] + 16000 + + + 2 + 1 + Medium Disk + Medium Disk [32GB Disk] + 32000 + mid_disk,mid_performance + + + 3 + 1 + Large Disk + Large Disk [64GB Disk] + 64000 + high_performance + + + + + + + 2 + admin + password + Admin + User + admin@mailprovider.com + + + + + + ssh.privatekey + -----BEGIN RSA PRIVATE KEY-----\nMIIEoQIBAAKCAQEAnNUMVgQS87EzAQN9ufGgH3T1kOpqcvTmUrp8RVZyeA5qwptS\nrZxONRbhLK709pZFBJLmeFqiqciWoA/srVIFk+rPmBlVsMw8BK53hTGoax7iSe8s\nLFCAATm6vp0HnZzYqNfrzR2by36ET5aQD/VAyA55u+uUgAlxQuhKff2xjyahEHs+\nUiRlReiAgItygm9g3co3+8fJDOuRse+s0TOip1D0jPdo2AJFscyxrG9hWqQH86R/\nZlLJ7DqsiaAcUmn52u6Nsmd3BkRmGVx/D35Mq6upJqrk/QDfug9LF66yiIP/BEIn\n08N/wQ6m/O37WUtqqyl3rRKqs5TJ9ZnhsqeO9QIBIwKCAQA6QIDsv69EkkYk8qsK\njPJU06uq2rnS7T+bEhDmjdK+4MiRbOQx2vh6HnDktgM3BJ1K13oss/NGYHJ190lH\nsMA+QUXKx5TbRItSMixkrAta/Ne1D7FSScklBtBVbYZ8XtQhdMVML5GjWuCv2NZs\nU8eaw4xNHPyklcr7mBurI7b6p13VK5BNUWR/VNuigT4U89YzRcoEZ/sTlR+4ACYr\nxbUJJGBA03+NhdSAe2vodlMh5lGflD0JmHMFqqg9BcAtVb73JsOsxFQArbXwRd/q\nNckdoAvgJfhTOvXF5GMPLI0lGb6skJkS229F4GaBB2Iz4A9O0aHZob8I8zsWUbiu\npvBrAoGBAMjUDfF2x13NjH1cFHietO5O1oM0nZaAxKodxoAUvHVMUd5DIY50tqYw\n7ecKi2Cw43ONpdj0nP9Nc2NV3NDRqLopwkKUsTtq9AKQ2cIuw3+uS5vm0VZBzmTP\nuF04Qo4bXh/jFRA62u9bXsmIFtaehKxE1Gp6zi393GcbWP4HX/3dAoGBAMfq0KD3\ngeU1PHi9uI3Ss89nXzJsiGcwC5Iunu1aTzJCYhMlJkfmRcXYMAqSfg0nGWnfvlDh\nuOO26CHKjG182mTwYXdgQzIPpBc8suvgUWDBTrIzJI+zuyBLtPbd9DJEVrZkRVQX\nXrOV3Y5oOWsba4F+b20jaaHFAiY7s6OtrX/5AoGBAMMXI3zZyPwJgSlSIoPNX03m\nL3gke9QID4CvNduB26UlkVuRq5GzNRZ4rJdMEl3tqcC1fImdKswfWiX7o06ChqY3\nMb0FePfkPX7V2tnkSOJuzRsavLoxTCdqsxi6T0g318c0XZq81K4A/P5Jr8ksRl40\nPA+qfyVdAf3Cy3ptkHLzAoGASkFGLSi7N+CSzcLPhSJgCzUGGgsOF7LCeB/x4yGL\nIUvbSPCKj7vuB6gR2AqGlyvHnFprQpz7h8eYDI0PlmGS8kqn2+HtEpgYYGcAoMEI\nSIJQbhL+84vmaxTOL87IanEnhZL1LdzLZ0ZK+mE55fQ936P9gE77WVfNmSweJtob\n3xMCgYAl0aLeGf4oUZbI56eEaCbu8U7dEe6MF54VbozyiXqbp455QnUpuBrRn5uf\nc079dNcqTNDuk1+hYX9qNn1aXsvWeuofBXqWoFXu/c4yoWxJAPhEVhzZ9xrXI76I\nBKiPCyKrOa7bSLvs6SQPpuf5AQ8+NJrOxkEB9hbMuaAr2N5rCw==\n-----END RSA PRIVATE KEY----- + + Hidden + + + ssh.publickey + ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnNUMVgQS87EzAQN9ufGgH3T1kOpqcvTmUrp8RVZyeA5qwptSrZxONRbhLK709pZFBJLmeFqiqciWoA/srVIFk+rPmBlVsMw8BK53hTGoax7iSe8sLFCAATm6vp0HnZzYqNfrzR2by36ET5aQD/VAyA55u+uUgAlxQuhKff2xjyahEHs+UiRlReiAgItygm9g3co3+8fJDOuRse+s0TOip1D0jPdo2AJFscyxrG9hWqQH86R/ZlLJ7DqsiaAcUmn52u6Nsmd3BkRmGVx/D35Mq6upJqrk/QDfug9LF66yiIP/BEIn08N/wQ6m/O37WUtqqyl3rRKqs5TJ9ZnhsqeO9Q== root@test2.lab.vmops.com + + Hidden + + + default.zone + AH + + + domain.suffix + vmops-test.vmops.com + + + instance.name + AH + + + consoleproxy.ram.size + 256 + + + host.stats.interval + 3600000 + + + storage.stats.interval + 120000 + + + volume.stats.interval + -1 + + + ping.interval + 60 + + + alert.wait + 1800 + + + expunge.interval + 86400 + + + usage.aggregation.timezone + GMT + + + init + true + + + use.local.storage + true + + + system.vm.use.local.storage + true + + + secondary.storage.vm + false + + + + + memory.capacity.threshold + 0.85 + + + cpu.capacity.threshold + 0.85 + + + storage.capacity.threshold + 0.85 + + + storage.allocated.capacity.threshold + 0.85 + + + capacity.check.period + 3600000 + + + wait + 240 + + + network.throttling.rate + 200 + + + multicast.throttling.rate + 10 + + + management.network.cidr + 192.168.1.0/24 + + + usage.aggregation.timezone + GMT + + + usage.stats.job.exec.time + 00:15 + + + system.vm.local.storage.required + false + + + hypervisor.type + xenserver + + + secondary.storage.vm + false + + + + + + +