mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
more changes for the rewrite.
This commit is contained in:
parent
c3c5f7fa7c
commit
867b43dcf9
@ -136,7 +136,6 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
|
|||||||
import com.cloud.agent.api.storage.CreatePrivateTemplateCommand;
|
import com.cloud.agent.api.storage.CreatePrivateTemplateCommand;
|
||||||
import com.cloud.agent.api.storage.DownloadAnswer;
|
import com.cloud.agent.api.storage.DownloadAnswer;
|
||||||
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
|
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.StoragePoolTO;
|
||||||
import com.cloud.agent.api.to.VolumeTO;
|
import com.cloud.agent.api.to.VolumeTO;
|
||||||
import com.cloud.agent.resource.computing.LibvirtStoragePoolDef.poolType;
|
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.network.NetworkEnums.RouterPrivateIpStrategy;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.resource.ServerResourceBase;
|
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.StorageLayer;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.Volume;
|
import com.cloud.storage.Volume;
|
||||||
import com.cloud.storage.VolumeVO;
|
import com.cloud.storage.VolumeVO;
|
||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.Volume.StorageResourceType;
|
|
||||||
import com.cloud.storage.Volume.VolumeType;
|
import com.cloud.storage.Volume.VolumeType;
|
||||||
import com.cloud.storage.template.Processor;
|
import com.cloud.storage.template.Processor;
|
||||||
import com.cloud.storage.template.QCOW2Processor;
|
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.OutputInterpreter;
|
||||||
import com.cloud.utils.script.Script;
|
import com.cloud.utils.script.Script;
|
||||||
import com.cloud.vm.ConsoleProxyVO;
|
import com.cloud.vm.ConsoleProxyVO;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.DomainRouter;
|
import com.cloud.vm.DomainRouter;
|
||||||
import com.cloud.vm.State;
|
import com.cloud.vm.State;
|
||||||
import com.cloud.vm.VirtualMachineName;
|
import com.cloud.vm.VirtualMachineName;
|
||||||
@ -1162,13 +1163,13 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected StorageResourceType getStorageResourceType() {
|
protected Storage.StorageResourceType getStorageResourceType() {
|
||||||
return StorageResourceType.STORAGE_POOL;
|
return Storage.StorageResourceType.STORAGE_POOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Answer execute(CreateCommand cmd) {
|
protected Answer execute(CreateCommand cmd) {
|
||||||
StoragePoolTO pool = cmd.getPool();
|
StoragePoolTO pool = cmd.getPool();
|
||||||
DiskCharacteristicsTO dskch = cmd.getDiskCharacteristics();
|
DiskCharacteristics dskch = cmd.getDiskCharacteristics();
|
||||||
StorageVol tmplVol = null;
|
StorageVol tmplVol = null;
|
||||||
StoragePool primaryPool = null;
|
StoragePool primaryPool = null;
|
||||||
StorageVol vol = null;
|
StorageVol vol = null;
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
package com.cloud.storage;
|
package com.cloud.storage;
|
||||||
|
|
||||||
public class Storage {
|
public class Storage {
|
||||||
public enum ImageFormat {
|
public static enum ImageFormat {
|
||||||
QCOW2(true, true, false),
|
QCOW2(true, true, false),
|
||||||
RAW(false, false, false),
|
RAW(false, false, false),
|
||||||
VHD(true, true, true),
|
VHD(true, true, true),
|
||||||
@ -51,7 +51,7 @@ public class Storage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum FileSystem {
|
public static enum FileSystem {
|
||||||
Unknown,
|
Unknown,
|
||||||
ext3,
|
ext3,
|
||||||
ntfs,
|
ntfs,
|
||||||
@ -66,7 +66,7 @@ public class Storage {
|
|||||||
hfsp
|
hfsp
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum StoragePoolType {
|
public static enum StoragePoolType {
|
||||||
Filesystem(false), //local directory
|
Filesystem(false), //local directory
|
||||||
NetworkFilesystem(true), //NFS or CIFS
|
NetworkFilesystem(true), //NFS or CIFS
|
||||||
IscsiLUN(true), //shared LUN, with a clusterfs overlay
|
IscsiLUN(true), //shared LUN, with a clusterfs overlay
|
||||||
@ -84,4 +84,6 @@ public class Storage {
|
|||||||
return shared;
|
return shared;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static enum StorageResourceType {STORAGE_POOL, STORAGE_HOST, SECONDARY_STORAGE}
|
||||||
}
|
}
|
||||||
|
|||||||
18
core/src/com/cloud/storage/Volume.java → api/src/com/cloud/storage/Volume.java
Executable file → Normal file
18
core/src/com/cloud/storage/Volume.java → api/src/com/cloud/storage/Volume.java
Executable file → Normal file
@ -17,14 +17,21 @@
|
|||||||
*/
|
*/
|
||||||
package com.cloud.storage;
|
package com.cloud.storage;
|
||||||
|
|
||||||
import com.cloud.async.AsyncInstanceCreateStatus;
|
|
||||||
|
|
||||||
public interface Volume {
|
public interface Volume {
|
||||||
enum VolumeType {UNKNOWN, ROOT, SWAP, DATADISK};
|
enum VolumeType {UNKNOWN, ROOT, SWAP, DATADISK};
|
||||||
|
|
||||||
enum MirrorState {NOT_MIRRORED, ACTIVE, DEFUNCT};
|
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
|
* @return the volume name
|
||||||
@ -69,12 +76,9 @@ public interface Volume {
|
|||||||
|
|
||||||
VolumeType getVolumeType();
|
VolumeType getVolumeType();
|
||||||
|
|
||||||
StorageResourceType getStorageResourceType();
|
Storage.StorageResourceType getStorageResourceType();
|
||||||
|
|
||||||
Long getPoolId();
|
Long getPoolId();
|
||||||
|
|
||||||
public AsyncInstanceCreateStatus getStatus();
|
State getState();
|
||||||
|
|
||||||
public void setStatus(AsyncInstanceCreateStatus status);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -15,63 +15,97 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package com.cloud.agent.api.to;
|
package com.cloud.vm;
|
||||||
|
|
||||||
import com.cloud.storage.DiskOfferingVO;
|
|
||||||
import com.cloud.storage.Volume;
|
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 long size;
|
||||||
private String[] tags;
|
private String[] tags;
|
||||||
private Volume.VolumeType type;
|
private Volume.VolumeType type;
|
||||||
private String name;
|
private String name;
|
||||||
private boolean useLocalStorage;
|
private boolean useLocalStorage;
|
||||||
private boolean recreatable;
|
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.type = type;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.tags = tags;
|
this.tags = tags;
|
||||||
this.useLocalStorage = useLocalStorage;
|
this.useLocalStorage = useLocalStorage;
|
||||||
this.recreatable = recreatable;
|
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());
|
* @return size of the disk requested in bytes.
|
||||||
}
|
*/
|
||||||
|
|
||||||
public DiskCharacteristicsTO(Volume.VolumeType type, String name, DiskOfferingVO offering) {
|
|
||||||
this(type, name, offering.getDiskSizeInBytes(), offering.getTagsArray(), offering.getUseLocalStorage(), offering.isRecreatable());
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getSize() {
|
public long getSize() {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Unique name for the disk.
|
||||||
|
*/
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return tags for the disk. This can be used to match it to different storage pools.
|
||||||
|
*/
|
||||||
public String[] getTags() {
|
public String[] getTags() {
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return type of volume.
|
||||||
|
*/
|
||||||
public Volume.VolumeType getType() {
|
public Volume.VolumeType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Does this volume require local storage?
|
||||||
|
*/
|
||||||
public boolean useLocalStorage() {
|
public boolean useLocalStorage() {
|
||||||
return 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() {
|
public boolean isRecreatable() {
|
||||||
return recreatable;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new StringBuilder("DskChr[").append(type).append("|").append(size).append("|").append("]").toString();
|
return new StringBuilder("DskChr[").append(type).append("|").append(size).append("|").append("]").toString();
|
||||||
58
api/src/com/cloud/vm/NetworkCharacteristics.java
Normal file
58
api/src/com/cloud/vm/NetworkCharacteristics.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -22,12 +22,12 @@ import java.util.Map;
|
|||||||
import com.cloud.hypervisor.Hypervisor;
|
import com.cloud.hypervisor.Hypervisor;
|
||||||
|
|
||||||
public class VmCharacteristics {
|
public class VmCharacteristics {
|
||||||
|
long id;
|
||||||
int core;
|
int core;
|
||||||
int speed; // in mhz
|
int speed; // in mhz
|
||||||
long ram; // in bytes
|
long ram; // in bytes
|
||||||
Hypervisor.Type hypervisorType;
|
Hypervisor.Type hypervisorType;
|
||||||
VirtualMachine.Type type;
|
VirtualMachine.Type type;
|
||||||
|
|
||||||
Map<String, String> params;
|
Map<String, String> params;
|
||||||
|
|
||||||
public VmCharacteristics(VirtualMachine.Type type) {
|
public VmCharacteristics(VirtualMachine.Type type) {
|
||||||
@ -39,9 +39,6 @@ public class VmCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public VmCharacteristics() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCores() {
|
public int getCores() {
|
||||||
return core;
|
return core;
|
||||||
}
|
}
|
||||||
@ -58,11 +55,15 @@ public class VmCharacteristics {
|
|||||||
return hypervisorType;
|
return hypervisorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public VmCharacteristics(int core, int speed, long ram, Hypervisor.Type type, Map<String, String> params) {
|
public VmCharacteristics(long id, int core, int speed, long ram, Hypervisor.Type type, Map<String, String> params) {
|
||||||
this.core = core;
|
this.core = core;
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
this.ram = ram;
|
this.ram = ram;
|
||||||
this.hypervisorType = type;
|
this.hypervisorType = type;
|
||||||
this.params = params;
|
this.params = params;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected VmCharacteristics() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
1
build/.gitignore
vendored
Normal file
1
build/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/override
|
||||||
3
build/build.number
Normal file
3
build/build.number
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#Build Number for ANT. Do not edit!
|
||||||
|
#Mon Aug 16 11:01:21 PDT 2010
|
||||||
|
build.number=31
|
||||||
26
build/developer.xml
Executable file → Normal file
26
build/developer.xml
Executable file → Normal file
@ -28,6 +28,18 @@
|
|||||||
<target name="stop" depends="stop-tomcat"/>
|
<target name="stop" depends="stop-tomcat"/>
|
||||||
<target name="debug" depends="debug-tomcat"/>
|
<target name="debug" depends="debug-tomcat"/>
|
||||||
|
|
||||||
|
<target name="setup">
|
||||||
|
<mkdir dir="${build.dir}/override"/>
|
||||||
|
<copy todir="${build.dir}/override">
|
||||||
|
<fileset dir="${build.dir}">
|
||||||
|
<include name="build-cloud.properties"/>
|
||||||
|
<include name="replace.properties"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
<loadproperties srcfile="${build.dir}/override/replace.properties" resource="propertyresource"/>
|
||||||
|
<!-- propertyfile file="${build.dir}/override/replace.properties"/ -->
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="debug-suspend">
|
<target name="debug-suspend">
|
||||||
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
||||||
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
||||||
@ -86,23 +98,11 @@
|
|||||||
<target name="unzip-usage" if="usagezip.uptodate">
|
<target name="unzip-usage" if="usagezip.uptodate">
|
||||||
<unzip src="${deploy.work.dir}/usage.zip" dest="${deploy.work.dir}/usage"/>
|
<unzip src="${deploy.work.dir}/usage.zip" dest="${deploy.work.dir}/usage"/>
|
||||||
</target>
|
</target>
|
||||||
<!--
|
|
||||||
<target name="deploy-db">
|
|
||||||
<property file="
|
|
||||||
<sql
|
|
||||||
driver="com.mysql.jdbc.Driver"
|
|
||||||
url="jdbc:database-url"
|
|
||||||
userid="cloud"
|
|
||||||
password="cloud"
|
|
||||||
src="data.sql"
|
|
||||||
/>
|
|
||||||
</target>
|
|
||||||
-->
|
|
||||||
<target name="deploy-server" depends="deploy-common" >
|
<target name="deploy-server" depends="deploy-common" >
|
||||||
<copy todir="${server.deploy.to.dir}/webapps/client/WEB-INF/lib/vms" file="${dist.dir}/systemvm.zip" />
|
<copy todir="${server.deploy.to.dir}/webapps/client/WEB-INF/lib/vms" file="${dist.dir}/systemvm.zip" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|
||||||
<target name="deploy-common" >
|
<target name="deploy-common" >
|
||||||
<condition property="zip.uptodate">
|
<condition property="zip.uptodate">
|
||||||
<available file="${deploy.work.dir}/client.zip" type="file"/>
|
<available file="${deploy.work.dir}/client.zip" type="file"/>
|
||||||
|
|||||||
19
build/override/build-cloud.properties
Normal file
19
build/override/build-cloud.properties
Normal file
@ -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
|
||||||
7
build/override/replace.properties
Normal file
7
build/override/replace.properties
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
DBUSER=cloud
|
||||||
|
DBROOTPW=
|
||||||
|
DBPW=cloud
|
||||||
|
MSLOG=.\/dist\/vmops.log
|
||||||
|
APISERVERLOG=.\/dist\/api.log
|
||||||
|
DBHOST=localhost
|
||||||
|
|
||||||
8
core/src/com/cloud/agent/api/StartupStorageCommand.java
Executable file → Normal file
8
core/src/com/cloud/agent/api/StartupStorageCommand.java
Executable file → Normal file
@ -20,7 +20,7 @@ package com.cloud.agent.api;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.cloud.storage.Volume;
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.template.TemplateInfo;
|
import com.cloud.storage.template.TemplateInfo;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ public class StartupStorageCommand extends StartupCommand {
|
|||||||
Map<String, TemplateInfo> templateInfo;
|
Map<String, TemplateInfo> templateInfo;
|
||||||
long totalSize;
|
long totalSize;
|
||||||
StoragePoolInfo poolInfo;
|
StoragePoolInfo poolInfo;
|
||||||
Volume.StorageResourceType resourceType;
|
Storage.StorageResourceType resourceType;
|
||||||
StoragePoolType fsType;
|
StoragePoolType fsType;
|
||||||
Map<String, String> hostDetails = new HashMap<String, String>();
|
Map<String, String> hostDetails = new HashMap<String, String>();
|
||||||
String nfsShare;
|
String nfsShare;
|
||||||
@ -91,11 +91,11 @@ public class StartupStorageCommand extends StartupCommand {
|
|||||||
this.poolInfo = poolInfo;
|
this.poolInfo = poolInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Volume.StorageResourceType getResourceType() {
|
public Storage.StorageResourceType getResourceType() {
|
||||||
return resourceType;
|
return resourceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setResourceType(Volume.StorageResourceType resourceType) {
|
public void setResourceType(Storage.StorageResourceType resourceType) {
|
||||||
this.resourceType = resourceType;
|
this.resourceType = resourceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,16 +18,16 @@
|
|||||||
package com.cloud.agent.api.storage;
|
package com.cloud.agent.api.storage;
|
||||||
|
|
||||||
import com.cloud.agent.api.Command;
|
import com.cloud.agent.api.Command;
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.agent.api.to.StoragePoolTO;
|
import com.cloud.agent.api.to.StoragePoolTO;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.VolumeVO;
|
import com.cloud.storage.VolumeVO;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
|
|
||||||
public class CreateCommand extends Command {
|
public class CreateCommand extends Command {
|
||||||
private long volId;
|
private long volId;
|
||||||
private StoragePoolTO pool;
|
private StoragePoolTO pool;
|
||||||
private DiskCharacteristicsTO diskCharacteristics;
|
private DiskCharacteristics diskCharacteristics;
|
||||||
private String templateUrl;
|
private String templateUrl;
|
||||||
private long size;
|
private long size;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ public class CreateCommand extends Command {
|
|||||||
* @param templateUrl
|
* @param templateUrl
|
||||||
* @param pool
|
* @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(vol, vm, diskCharacteristics, pool, 0);
|
||||||
this.templateUrl = templateUrl;
|
this.templateUrl = templateUrl;
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ public class CreateCommand extends Command {
|
|||||||
* @param diskCharacteristics
|
* @param diskCharacteristics
|
||||||
* @param pool
|
* @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.volId = vol.getId();
|
||||||
this.diskCharacteristics = diskCharacteristics;
|
this.diskCharacteristics = diskCharacteristics;
|
||||||
this.pool = new StoragePoolTO(pool);
|
this.pool = new StoragePoolTO(pool);
|
||||||
@ -78,7 +78,7 @@ public class CreateCommand extends Command {
|
|||||||
return pool;
|
return pool;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiskCharacteristicsTO getDiskCharacteristics() {
|
public DiskCharacteristics getDiskCharacteristics() {
|
||||||
return diskCharacteristics;
|
return diskCharacteristics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,12 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.cloud.agent.api.to;
|
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.StoragePoolVO;
|
||||||
import com.cloud.storage.VMTemplateStoragePoolVO;
|
import com.cloud.storage.VMTemplateStoragePoolVO;
|
||||||
import com.cloud.storage.Volume;
|
import com.cloud.storage.Volume;
|
||||||
import com.cloud.storage.VolumeVO;
|
import com.cloud.storage.VolumeVO;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.Volume.StorageResourceType;
|
|
||||||
|
|
||||||
|
|
||||||
public class VolumeTO {
|
public class VolumeTO {
|
||||||
@ -35,11 +36,11 @@ public class VolumeTO {
|
|||||||
private String path;
|
private String path;
|
||||||
private long size;
|
private long size;
|
||||||
private Volume.VolumeType type;
|
private Volume.VolumeType type;
|
||||||
private Volume.StorageResourceType resourceType;
|
private Storage.StorageResourceType resourceType;
|
||||||
private StoragePoolType storagePoolType;
|
private StoragePoolType storagePoolType;
|
||||||
private long poolId;
|
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.id = id;
|
||||||
this.name= name;
|
this.name= name;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
@ -65,12 +66,12 @@ public class VolumeTO {
|
|||||||
this.id = templatePoolRef.getId();
|
this.id = templatePoolRef.getId();
|
||||||
this.path = templatePoolRef.getInstallPath();
|
this.path = templatePoolRef.getInstallPath();
|
||||||
this.size = templatePoolRef.getTemplateSize();
|
this.size = templatePoolRef.getTemplateSize();
|
||||||
this.resourceType = StorageResourceType.STORAGE_POOL;
|
this.resourceType = Storage.StorageResourceType.STORAGE_POOL;
|
||||||
this.storagePoolType = pool.getPoolType();
|
this.storagePoolType = pool.getPoolType();
|
||||||
this.mountPoint = pool.getPath();
|
this.mountPoint = pool.getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Volume.StorageResourceType getResourceType() {
|
public Storage.StorageResourceType getResourceType() {
|
||||||
return resourceType;
|
return resourceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -141,18 +141,18 @@ import com.cloud.agent.api.storage.DownloadAnswer;
|
|||||||
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
|
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
|
||||||
import com.cloud.agent.api.storage.ShareAnswer;
|
import com.cloud.agent.api.storage.ShareAnswer;
|
||||||
import com.cloud.agent.api.storage.ShareCommand;
|
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.StoragePoolTO;
|
||||||
import com.cloud.agent.api.to.VolumeTO;
|
import com.cloud.agent.api.to.VolumeTO;
|
||||||
import com.cloud.exception.InternalErrorException;
|
import com.cloud.exception.InternalErrorException;
|
||||||
import com.cloud.host.Host.Type;
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.hypervisor.Hypervisor;
|
import com.cloud.hypervisor.Hypervisor;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.Storage.ImageFormat;
|
import com.cloud.storage.Storage.ImageFormat;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
|
import com.cloud.storage.Storage.StorageResourceType;
|
||||||
import com.cloud.storage.StorageLayer;
|
import com.cloud.storage.StorageLayer;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.Volume.StorageResourceType;
|
|
||||||
import com.cloud.storage.Volume.VolumeType;
|
import com.cloud.storage.Volume.VolumeType;
|
||||||
import com.cloud.storage.VolumeVO;
|
import com.cloud.storage.VolumeVO;
|
||||||
import com.cloud.storage.resource.StoragePoolResource;
|
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.net.NetUtils;
|
||||||
import com.cloud.utils.script.Script;
|
import com.cloud.utils.script.Script;
|
||||||
import com.cloud.vm.ConsoleProxyVO;
|
import com.cloud.vm.ConsoleProxyVO;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.DomainRouter;
|
import com.cloud.vm.DomainRouter;
|
||||||
import com.cloud.vm.SecondaryStorageVmVO;
|
import com.cloud.vm.SecondaryStorageVmVO;
|
||||||
import com.cloud.vm.State;
|
import com.cloud.vm.State;
|
||||||
@ -1119,8 +1120,8 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected StorageResourceType getStorageResourceType() {
|
protected Storage.StorageResourceType getStorageResourceType() {
|
||||||
return StorageResourceType.STORAGE_POOL;
|
return Storage.StorageResourceType.STORAGE_POOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CheckHealthAnswer execute(CheckHealthCommand cmd) {
|
protected CheckHealthAnswer execute(CheckHealthCommand cmd) {
|
||||||
@ -3423,7 +3424,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
|||||||
StartupStorageCommand cmd = new StartupStorageCommand();
|
StartupStorageCommand cmd = new StartupStorageCommand();
|
||||||
cmd.setPoolInfo(pInfo);
|
cmd.setPoolInfo(pInfo);
|
||||||
cmd.setGuid(_host.uuid);
|
cmd.setGuid(_host.uuid);
|
||||||
cmd.setResourceType(StorageResourceType.STORAGE_POOL);
|
cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
|
||||||
return cmd;
|
return cmd;
|
||||||
} catch (XenAPIException e) {
|
} catch (XenAPIException e) {
|
||||||
String msg = "build startupstoragecommand err in host:" + _host.uuid + e.toString();
|
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) {
|
public CreateAnswer execute(CreateCommand cmd) {
|
||||||
StoragePoolTO pool = cmd.getPool();
|
StoragePoolTO pool = cmd.getPool();
|
||||||
DiskCharacteristicsTO dskch = cmd.getDiskCharacteristics();
|
DiskCharacteristics dskch = cmd.getDiskCharacteristics();
|
||||||
|
|
||||||
VDI vdi = null;
|
VDI vdi = null;
|
||||||
Connection conn = getConnection();
|
Connection conn = getConnection();
|
||||||
@ -4293,7 +4294,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR
|
|||||||
vdir = vdi.getRecord(conn);
|
vdir = vdi.getRecord(conn);
|
||||||
s_logger.debug("Succesfully created VDI for " + cmd + ". Uuid = " + vdir.uuid);
|
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);
|
vdir.virtualSize);
|
||||||
return new CreateAnswer(cmd, vol);
|
return new CreateAnswer(cmd, vol);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@ -87,7 +87,6 @@ public class DiskOfferingVO implements DiskOffering {
|
|||||||
@Column(name="use_local_storage")
|
@Column(name="use_local_storage")
|
||||||
private boolean useLocalStorage;
|
private boolean useLocalStorage;
|
||||||
|
|
||||||
|
|
||||||
public DiskOfferingVO() {
|
public DiskOfferingVO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ import com.cloud.agent.api.storage.UpgradeDiskAnswer;
|
|||||||
import com.cloud.agent.api.storage.UpgradeDiskCommand;
|
import com.cloud.agent.api.storage.UpgradeDiskCommand;
|
||||||
import com.cloud.agent.api.to.VolumeTO;
|
import com.cloud.agent.api.to.VolumeTO;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
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.storage.template.TemplateInfo;
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
import com.cloud.utils.net.NfsUtils;
|
import com.cloud.utils.net.NfsUtils;
|
||||||
@ -329,8 +329,8 @@ public abstract class FileSystemStorageResource extends StorageResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StorageResourceType getStorageResourceType() {
|
protected Storage.StorageResourceType getStorageResourceType() {
|
||||||
return StorageResourceType.STORAGE_POOL;
|
return Storage.StorageResourceType.STORAGE_POOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String mountNfs(String hostAddress, String hostPath, String localPath) {
|
protected String mountNfs(String hostAddress, String hostPath, String localPath) {
|
||||||
|
|||||||
@ -34,7 +34,6 @@ import com.cloud.host.Host;
|
|||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
import com.cloud.service.ServiceOfferingVO;
|
import com.cloud.service.ServiceOfferingVO;
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
import com.cloud.uservm.UserVm;
|
|
||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import com.cloud.utils.component.Manager;
|
import com.cloud.utils.component.Manager;
|
||||||
import com.cloud.utils.exception.ExecutionException;
|
import com.cloud.utils.exception.ExecutionException;
|
||||||
|
|||||||
2
core/src/com/cloud/storage/StorageResource.java
Executable file → Normal file
2
core/src/com/cloud/storage/StorageResource.java
Executable file → Normal file
@ -304,7 +304,7 @@ public abstract class StorageResource extends ServerResourceBase implements Serv
|
|||||||
protected abstract Answer execute(DestroyCommand cmd) ;
|
protected abstract Answer execute(DestroyCommand cmd) ;
|
||||||
protected abstract UpgradeDiskAnswer execute(final UpgradeDiskCommand cmd);
|
protected abstract UpgradeDiskAnswer execute(final UpgradeDiskCommand cmd);
|
||||||
protected abstract String delete(String imagePath, String extra);
|
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<String, Object> params) throws ConfigurationException ;
|
protected abstract void configureFolders(String name, Map<String, Object> params) throws ConfigurationException ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
39
core/src/com/cloud/storage/VolumeVO.java
Executable file → Normal file
39
core/src/com/cloud/storage/VolumeVO.java
Executable file → Normal file
@ -96,7 +96,7 @@ public class VolumeVO implements Volume {
|
|||||||
String hostip;
|
String hostip;
|
||||||
|
|
||||||
@Column(name="disk_offering_id")
|
@Column(name="disk_offering_id")
|
||||||
Long diskOfferingId;
|
long diskOfferingId;
|
||||||
|
|
||||||
@Expose
|
@Expose
|
||||||
@Column(name="mirror_vol")
|
@Column(name="mirror_vol")
|
||||||
@ -129,7 +129,7 @@ public class VolumeVO implements Volume {
|
|||||||
@Expose
|
@Expose
|
||||||
@Column(name="resource_type")
|
@Column(name="resource_type")
|
||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
StorageResourceType storageResourceType;
|
Storage.StorageResourceType storageResourceType;
|
||||||
|
|
||||||
@Expose
|
@Expose
|
||||||
@Column(name="status", updatable = true, nullable=false)
|
@Column(name="status", updatable = true, nullable=false)
|
||||||
@ -143,6 +143,10 @@ public class VolumeVO implements Volume {
|
|||||||
@Column(name="recreatable")
|
@Column(name="recreatable")
|
||||||
boolean recreatable;
|
boolean recreatable;
|
||||||
|
|
||||||
|
@Column(name="state")
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
private State state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for data disk.
|
* Constructor for data disk.
|
||||||
* @param type
|
* @param type
|
||||||
@ -167,10 +171,25 @@ public class VolumeVO implements Volume {
|
|||||||
this.templateId = null;
|
this.templateId = null;
|
||||||
this.mirrorState = MirrorState.NOT_MIRRORED;
|
this.mirrorState = MirrorState.NOT_MIRRORED;
|
||||||
this.mirrorVolume = null;
|
this.mirrorVolume = null;
|
||||||
this.storageResourceType = StorageResourceType.STORAGE_POOL;
|
this.storageResourceType = Storage.StorageResourceType.STORAGE_POOL;
|
||||||
this.poolType = null;
|
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.
|
* Constructor for volume based on a template.
|
||||||
*
|
*
|
||||||
@ -371,11 +390,11 @@ public class VolumeVO implements Volume {
|
|||||||
this.mirrorState = mirrorState;
|
this.mirrorState = mirrorState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getDiskOfferingId() {
|
public long getDiskOfferingId() {
|
||||||
return diskOfferingId;
|
return diskOfferingId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDiskOfferingId(Long diskOfferingId) {
|
public void setDiskOfferingId(long diskOfferingId) {
|
||||||
this.diskOfferingId = diskOfferingId;
|
this.diskOfferingId = diskOfferingId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,11 +423,11 @@ public class VolumeVO implements Volume {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StorageResourceType getStorageResourceType() {
|
public Storage.StorageResourceType getStorageResourceType() {
|
||||||
return storageResourceType;
|
return storageResourceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStorageResourceType(StorageResourceType storageResourceType2) {
|
public void setStorageResourceType(Storage.StorageResourceType storageResourceType2) {
|
||||||
this.storageResourceType = storageResourceType2;
|
this.storageResourceType = storageResourceType2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,12 +439,10 @@ public class VolumeVO implements Volume {
|
|||||||
this.poolId = poolId;
|
this.poolId = poolId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public AsyncInstanceCreateStatus getStatus() {
|
public AsyncInstanceCreateStatus getStatus() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setStatus(AsyncInstanceCreateStatus status) {
|
public void setStatus(AsyncInstanceCreateStatus status) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
@ -434,6 +451,10 @@ public class VolumeVO implements Volume {
|
|||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
public void setUpdated(Date updated) {
|
public void setUpdated(Date updated) {
|
||||||
this.updated = updated;
|
this.updated = updated;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,7 +42,7 @@ import com.cloud.host.Host;
|
|||||||
import com.cloud.host.Host.Type;
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.resource.ServerResourceBase;
|
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.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.template.TemplateInfo;
|
import com.cloud.storage.template.TemplateInfo;
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ public class DummySecondaryStorageResource extends ServerResourceBase implements
|
|||||||
StoragePoolType.NetworkFilesystem, 1024*1024*1024*100L,
|
StoragePoolType.NetworkFilesystem, 1024*1024*1024*100L,
|
||||||
new HashMap<String, TemplateInfo>());
|
new HashMap<String, TemplateInfo>());
|
||||||
|
|
||||||
cmd.setResourceType(Volume.StorageResourceType.SECONDARY_STORAGE);
|
cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE);
|
||||||
cmd.setIqn(null);
|
cmd.setIqn(null);
|
||||||
cmd.setNfsShare(_guid);
|
cmd.setNfsShare(_guid);
|
||||||
|
|
||||||
|
|||||||
@ -52,8 +52,8 @@ import com.cloud.host.Host;
|
|||||||
import com.cloud.host.Host.Type;
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.resource.ServerResourceBase;
|
import com.cloud.resource.ServerResourceBase;
|
||||||
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.StorageLayer;
|
import com.cloud.storage.StorageLayer;
|
||||||
import com.cloud.storage.Volume;
|
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.template.DownloadManager;
|
import com.cloud.storage.template.DownloadManager;
|
||||||
import com.cloud.storage.template.DownloadManagerImpl;
|
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<String, TemplateInfo>());
|
final StartupStorageCommand cmd = new StartupStorageCommand(_parent, StoragePoolType.NetworkFilesystem, getTotalSize(), new HashMap<String, TemplateInfo>());
|
||||||
|
|
||||||
cmd.setResourceType(Volume.StorageResourceType.SECONDARY_STORAGE);
|
cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE);
|
||||||
cmd.setIqn(null);
|
cmd.setIqn(null);
|
||||||
|
|
||||||
fillNetworkInformation(cmd);
|
fillNetworkInformation(cmd);
|
||||||
|
|||||||
7
server/src/com/cloud/agent/manager/AgentManagerImpl.java
Executable file → Normal file
7
server/src/com/cloud/agent/manager/AgentManagerImpl.java
Executable file → Normal file
@ -110,11 +110,12 @@ import com.cloud.resource.Discoverer;
|
|||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.service.ServiceOfferingVO;
|
import com.cloud.service.ServiceOfferingVO;
|
||||||
import com.cloud.storage.GuestOSCategoryVO;
|
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.StoragePoolVO;
|
||||||
import com.cloud.storage.VMTemplateHostVO;
|
import com.cloud.storage.VMTemplateHostVO;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.storage.VirtualMachineTemplate;
|
import com.cloud.storage.VirtualMachineTemplate;
|
||||||
import com.cloud.storage.Volume.StorageResourceType;
|
|
||||||
import com.cloud.storage.dao.GuestOSCategoryDao;
|
import com.cloud.storage.dao.GuestOSCategoryDao;
|
||||||
import com.cloud.storage.dao.StoragePoolDao;
|
import com.cloud.storage.dao.StoragePoolDao;
|
||||||
import com.cloud.storage.dao.StoragePoolHostDao;
|
import com.cloud.storage.dao.StoragePoolHostDao;
|
||||||
@ -1403,7 +1404,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory {
|
|||||||
if (startup instanceof StartupStorageCommand) {
|
if (startup instanceof StartupStorageCommand) {
|
||||||
|
|
||||||
StartupStorageCommand ssCmd = ((StartupStorageCommand) startup);
|
StartupStorageCommand ssCmd = ((StartupStorageCommand) startup);
|
||||||
if (ssCmd.getResourceType() == StorageResourceType.SECONDARY_STORAGE) {
|
if (ssCmd.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE) {
|
||||||
type = Host.Type.SecondaryStorage;
|
type = Host.Type.SecondaryStorage;
|
||||||
if (resource != null && resource instanceof DummySecondaryStorageResource){
|
if (resource != null && resource instanceof DummySecondaryStorageResource){
|
||||||
resource = null;
|
resource = null;
|
||||||
@ -1755,7 +1756,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory {
|
|||||||
|
|
||||||
if (startup instanceof StartupStorageCommand) {
|
if (startup instanceof StartupStorageCommand) {
|
||||||
StartupStorageCommand ssCmd = (StartupStorageCommand) startup;
|
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 = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), 0L, server.getTotalSize(),
|
||||||
CapacityVO.CAPACITY_TYPE_STORAGE);
|
CapacityVO.CAPACITY_TYPE_STORAGE);
|
||||||
_capacityDao.persist(capacity);
|
_capacityDao.persist(capacity);
|
||||||
|
|||||||
@ -218,11 +218,8 @@ public class ListVolumesCmd extends BaseCmd{
|
|||||||
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.STORAGE_TYPE.getName(), storageType));
|
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.STORAGE_TYPE.getName(), storageType));
|
||||||
|
|
||||||
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_ID.getName(),volume.getDiskOfferingId()));
|
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_ID.getName(),volume.getDiskOfferingId()));
|
||||||
if(volume.getDiskOfferingId()!=null)
|
|
||||||
{
|
|
||||||
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_NAME.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getName()));
|
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_NAME.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getName()));
|
||||||
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_DISPLAY_TEXT.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getDisplayText()));
|
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.DISK_OFFERING_DISPLAY_TEXT.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getDisplayText()));
|
||||||
}
|
|
||||||
Long poolId = volume.getPoolId();
|
Long poolId = volume.getPoolId();
|
||||||
String poolName = (poolId == null) ? "none" : getManagementServer().findPoolById(poolId).getName();
|
String poolName = (poolId == null) ? "none" : getManagementServer().findPoolById(poolId).getName();
|
||||||
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.STORAGE.getName(), poolName));
|
volumeData.add(new Pair<String, Object>(BaseCmd.Properties.STORAGE.getName(), poolName));
|
||||||
|
|||||||
@ -29,7 +29,7 @@ import com.cloud.agent.api.StartupStorageCommand;
|
|||||||
import com.cloud.agent.api.StoragePoolInfo;
|
import com.cloud.agent.api.StoragePoolInfo;
|
||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
import com.cloud.host.Status;
|
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.StoragePoolDao;
|
||||||
import com.cloud.storage.dao.StoragePoolHostDao;
|
import com.cloud.storage.dao.StoragePoolHostDao;
|
||||||
import com.cloud.utils.component.Inject;
|
import com.cloud.utils.component.Inject;
|
||||||
@ -72,7 +72,7 @@ public class LocalStoragePoolListener implements Listener {
|
|||||||
|
|
||||||
StartupStorageCommand ssCmd = (StartupStorageCommand)cmd;
|
StartupStorageCommand ssCmd = (StartupStorageCommand)cmd;
|
||||||
|
|
||||||
if (ssCmd.getResourceType() != StorageResourceType.STORAGE_POOL) {
|
if (ssCmd.getResourceType() != Storage.StorageResourceType.STORAGE_POOL) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,6 @@ import com.cloud.agent.api.storage.CreateAnswer;
|
|||||||
import com.cloud.agent.api.storage.CreateCommand;
|
import com.cloud.agent.api.storage.CreateCommand;
|
||||||
import com.cloud.agent.api.storage.DeleteTemplateCommand;
|
import com.cloud.agent.api.storage.DeleteTemplateCommand;
|
||||||
import com.cloud.agent.api.storage.DestroyCommand;
|
import com.cloud.agent.api.storage.DestroyCommand;
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.agent.api.to.VolumeTO;
|
import com.cloud.agent.api.to.VolumeTO;
|
||||||
import com.cloud.alert.AlertManager;
|
import com.cloud.alert.AlertManager;
|
||||||
import com.cloud.api.BaseCmd;
|
import com.cloud.api.BaseCmd;
|
||||||
@ -64,7 +63,6 @@ import com.cloud.async.AsyncJobExecutor;
|
|||||||
import com.cloud.async.AsyncJobManager;
|
import com.cloud.async.AsyncJobManager;
|
||||||
import com.cloud.async.AsyncJobVO;
|
import com.cloud.async.AsyncJobVO;
|
||||||
import com.cloud.async.BaseAsyncJobExecutor;
|
import com.cloud.async.BaseAsyncJobExecutor;
|
||||||
import com.cloud.async.executor.VMOperationParam;
|
|
||||||
import com.cloud.capacity.CapacityVO;
|
import com.cloud.capacity.CapacityVO;
|
||||||
import com.cloud.capacity.dao.CapacityDao;
|
import com.cloud.capacity.dao.CapacityDao;
|
||||||
import com.cloud.configuration.Config;
|
import com.cloud.configuration.Config;
|
||||||
@ -91,9 +89,9 @@ import com.cloud.exception.ResourceAllocationException;
|
|||||||
import com.cloud.exception.ResourceInUseException;
|
import com.cloud.exception.ResourceInUseException;
|
||||||
import com.cloud.exception.StorageUnavailableException;
|
import com.cloud.exception.StorageUnavailableException;
|
||||||
import com.cloud.host.Host;
|
import com.cloud.host.Host;
|
||||||
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
import com.cloud.host.Status;
|
import com.cloud.host.Status;
|
||||||
import com.cloud.host.Host.Type;
|
|
||||||
import com.cloud.host.dao.DetailsDao;
|
import com.cloud.host.dao.DetailsDao;
|
||||||
import com.cloud.host.dao.HostDao;
|
import com.cloud.host.dao.HostDao;
|
||||||
import com.cloud.hypervisor.Hypervisor;
|
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.ImageFormat;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.Volume.MirrorState;
|
import com.cloud.storage.Volume.MirrorState;
|
||||||
import com.cloud.storage.Volume.StorageResourceType;
|
|
||||||
import com.cloud.storage.Volume.VolumeType;
|
import com.cloud.storage.Volume.VolumeType;
|
||||||
import com.cloud.storage.allocator.StoragePoolAllocator;
|
import com.cloud.storage.allocator.StoragePoolAllocator;
|
||||||
import com.cloud.storage.dao.DiskOfferingDao;
|
import com.cloud.storage.dao.DiskOfferingDao;
|
||||||
@ -122,6 +119,7 @@ import com.cloud.storage.snapshot.SnapshotScheduler;
|
|||||||
import com.cloud.template.TemplateManager;
|
import com.cloud.template.TemplateManager;
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
import com.cloud.user.AccountManager;
|
import com.cloud.user.AccountManager;
|
||||||
|
import com.cloud.user.AccountVO;
|
||||||
import com.cloud.user.User;
|
import com.cloud.user.User;
|
||||||
import com.cloud.user.dao.AccountDao;
|
import com.cloud.user.dao.AccountDao;
|
||||||
import com.cloud.uservm.UserVm;
|
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.db.Transaction;
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
import com.cloud.utils.exception.ExecutionException;
|
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.State;
|
||||||
import com.cloud.vm.UserVmManager;
|
import com.cloud.vm.UserVmManager;
|
||||||
import com.cloud.vm.UserVmVO;
|
import com.cloud.vm.UserVmVO;
|
||||||
@ -227,6 +225,39 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setDeviceId(VolumeVO vol) {
|
||||||
|
//TODO: Need to figure out what to do here.
|
||||||
|
vol.setDeviceId(1l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DB
|
||||||
|
public List<VolumeVO> allocate(DiskCharacteristics rootDisk, List<DiskCharacteristics> dataDisks, VMInstanceVO vm, DataCenterVO dc, AccountVO account) {
|
||||||
|
ArrayList<VolumeVO> vols = new ArrayList<VolumeVO>(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<VolumeVO> prepare(VMInstanceVO vm, HostVO host) {
|
public List<VolumeVO> prepare(VMInstanceVO vm, HostVO host) {
|
||||||
List<VolumeVO> vols = _volsDao.findCreatedByInstance(vm.getId());
|
List<VolumeVO> vols = _volsDao.findCreatedByInstance(vm.getId());
|
||||||
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
|
||||||
@ -259,9 +290,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
DataCenterVO dc = _dcDao.findById(create.getDataCenterId());
|
DataCenterVO dc = _dcDao.findById(create.getDataCenterId());
|
||||||
HostPodVO pod = _podDao.findById(host.getPodId());
|
HostPodVO pod = _podDao.findById(host.getPodId());
|
||||||
DiskOfferingVO diskOffering = null;
|
DiskOfferingVO diskOffering = null;
|
||||||
if (vol.getDiskOfferingId() != null) {
|
|
||||||
diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
|
diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
|
||||||
}
|
|
||||||
ServiceOfferingVO offering;
|
ServiceOfferingVO offering;
|
||||||
if (vm instanceof UserVmVO) {
|
if (vm instanceof UserVmVO) {
|
||||||
offering = _offeringDao.findById(((UserVmVO)vm).getServiceOfferingId());
|
offering = _offeringDao.findById(((UserVmVO)vm).getServiceOfferingId());
|
||||||
@ -333,7 +362,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
return unshare(vm, vols, host) ? vols : null;
|
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<StoragePool> avoid) {
|
protected StoragePoolVO findStoragePool(DiskCharacteristics dskCh, final DataCenterVO dc, HostPodVO pod, Long clusterId, final ServiceOffering offering, final VMInstanceVO vm, final VMTemplateVO template, final Set<StoragePool> avoid) {
|
||||||
Enumeration<StoragePoolAllocator> en = _storagePoolAllocators.enumeration();
|
Enumeration<StoragePoolAllocator> en = _storagePoolAllocators.enumeration();
|
||||||
while (en.hasMoreElements()) {
|
while (en.hasMoreElements()) {
|
||||||
final StoragePoolAllocator allocator = en.nextElement();
|
final StoragePoolAllocator allocator = en.nextElement();
|
||||||
@ -385,7 +414,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
return answers[0];
|
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()) {
|
if (volume.getVolumeType() == VolumeType.ROOT && Storage.ImageFormat.ISO != template.getFormat()) {
|
||||||
SearchCriteria<VMTemplateHostVO> sc = HostTemplateStatesSearch.create();
|
SearchCriteria<VMTemplateHostVO> sc = HostTemplateStatesSearch.create();
|
||||||
sc.setParameters("id", template.getId());
|
sc.setParameters("id", template.getId());
|
||||||
@ -398,9 +427,9 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
}
|
}
|
||||||
VMTemplateHostVO ss = sss.get(0);
|
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 {
|
} 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.setDiskOfferingId(diskOffering.getId());
|
||||||
}
|
}
|
||||||
volume.setSize(originalVolumeSize);
|
volume.setSize(originalVolumeSize);
|
||||||
volume.setStorageResourceType(StorageResourceType.STORAGE_POOL);
|
volume.setStorageResourceType(Storage.StorageResourceType.STORAGE_POOL);
|
||||||
volume.setInstanceId(null);
|
volume.setInstanceId(null);
|
||||||
volume.setUpdated(new Date());
|
volume.setUpdated(new Date());
|
||||||
volume.setStatus(AsyncInstanceCreateStatus.Creating);
|
volume.setStatus(AsyncInstanceCreateStatus.Creating);
|
||||||
@ -462,7 +491,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
String volumeUUID = null;
|
String volumeUUID = null;
|
||||||
String details = 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
|
// Determine what pod to store the volume in
|
||||||
@ -617,9 +646,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
if(originalVolume.getTemplateId() != null){
|
if(originalVolume.getTemplateId() != null){
|
||||||
templateId = originalVolume.getTemplateId();
|
templateId = originalVolume.getTemplateId();
|
||||||
}
|
}
|
||||||
if(originalVolume.getDiskOfferingId() != null){
|
|
||||||
diskOfferingId = originalVolume.getDiskOfferingId();
|
diskOfferingId = originalVolume.getDiskOfferingId();
|
||||||
}
|
|
||||||
long sizeMB = createdVolume.getSize()/(1024*1024);
|
long sizeMB = createdVolume.getSize()/(1024*1024);
|
||||||
|
|
||||||
String poolName = _storagePoolDao.findById(createdVolume.getPoolId()).getName();
|
String poolName = _storagePoolDao.findById(createdVolume.getPoolId()).getName();
|
||||||
@ -690,7 +717,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
StoragePoolVO pool = null;
|
StoragePoolVO pool = null;
|
||||||
final HashSet<StoragePool> avoidPools = new HashSet<StoragePool>(avoids);
|
final HashSet<StoragePool> avoidPools = new HashSet<StoragePool>(avoids);
|
||||||
|
|
||||||
DiskCharacteristicsTO dskCh = null;
|
DiskCharacteristics dskCh = null;
|
||||||
if (volume.getVolumeType() == VolumeType.ROOT && Storage.ImageFormat.ISO != template.getFormat()) {
|
if (volume.getVolumeType() == VolumeType.ROOT && Storage.ImageFormat.ISO != template.getFormat()) {
|
||||||
dskCh = createDiskCharacteristics(volume, template, dc, offering);
|
dskCh = createDiskCharacteristics(volume, template, dc, offering);
|
||||||
} else {
|
} else {
|
||||||
@ -1439,7 +1466,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
public VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId) throws InternalErrorException {
|
public VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId) throws InternalErrorException {
|
||||||
// Find a destination storage pool with the specified criteria
|
// Find a destination storage pool with the specified criteria
|
||||||
DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId());
|
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);
|
DataCenterVO destPoolDataCenter = _dcDao.findById(destPoolDcId);
|
||||||
HostPodVO destPoolPod = _podDao.findById(destPoolPodId);
|
HostPodVO destPoolPod = _podDao.findById(destPoolPodId);
|
||||||
StoragePoolVO destPool = findStoragePool(dskCh, destPoolDataCenter, destPoolPod, destPoolClusterId, null, null, null, new HashSet<StoragePool>());
|
StoragePoolVO destPool = findStoragePool(dskCh, destPoolDataCenter, destPoolPod, destPoolClusterId, null, null, null, new HashSet<StoragePool>());
|
||||||
@ -1523,7 +1550,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||||||
volume.setDomainId(account.getDomainId().longValue());
|
volume.setDomainId(account.getDomainId().longValue());
|
||||||
volume.setMirrorState(MirrorState.NOT_MIRRORED);
|
volume.setMirrorState(MirrorState.NOT_MIRRORED);
|
||||||
volume.setDiskOfferingId(diskOffering.getId());
|
volume.setDiskOfferingId(diskOffering.getId());
|
||||||
volume.setStorageResourceType(StorageResourceType.STORAGE_POOL);
|
volume.setStorageResourceType(Storage.StorageResourceType.STORAGE_POOL);
|
||||||
volume.setInstanceId(null);
|
volume.setInstanceId(null);
|
||||||
volume.setUpdated(new Date());
|
volume.setUpdated(new Date());
|
||||||
volume.setStatus(AsyncInstanceCreateStatus.Creating);
|
volume.setStatus(AsyncInstanceCreateStatus.Creating);
|
||||||
|
|||||||
@ -27,7 +27,6 @@ import javax.naming.ConfigurationException;
|
|||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.configuration.dao.ConfigurationDao;
|
import com.cloud.configuration.dao.ConfigurationDao;
|
||||||
import com.cloud.host.Host;
|
import com.cloud.host.Host;
|
||||||
import com.cloud.host.HostVO;
|
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.AdapterBase;
|
||||||
import com.cloud.utils.component.ComponentLocator;
|
import com.cloud.utils.component.ComponentLocator;
|
||||||
import com.cloud.utils.component.Inject;
|
import com.cloud.utils.component.Inject;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
import com.cloud.vm.VirtualMachine;
|
import com.cloud.vm.VirtualMachine;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement
|
|||||||
return true;
|
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) {
|
protected boolean templateAvailable(long templateId, long poolId) {
|
||||||
VMTemplateStorageResourceAssoc thvo = _templatePoolDao.findByPoolTemplate(poolId, templateId);
|
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) {
|
if (vm == null) {
|
||||||
// We are finding a pool for a volume, so we need a shared storage allocator
|
// We are finding a pool for a volume, so we need a shared storage allocator
|
||||||
return false;
|
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);
|
boolean localStorageAllocationNeeded = localStorageAllocationNeeded(dskCh, vm, offering);
|
||||||
return ((!localStorageAllocationNeeded && pool.getPoolType().isShared()) || (localStorageAllocationNeeded && !pool.getPoolType().isShared()));
|
return ((!localStorageAllocationNeeded && pool.getPoolType().isShared()) || (localStorageAllocationNeeded && !pool.getPoolType().isShared()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean checkPool(Set<? extends StoragePool> avoid, StoragePoolVO pool, DiskCharacteristicsTO dskCh, VMTemplateVO template, List<VMTemplateStoragePoolVO> templatesInPool, ServiceOffering offering,
|
protected boolean checkPool(Set<? extends StoragePool> avoid, StoragePoolVO pool, DiskCharacteristics dskCh, VMTemplateVO template, List<VMTemplateStoragePoolVO> templatesInPool, ServiceOffering offering,
|
||||||
VMInstanceVO vm, StatsCollector sc) {
|
VMInstanceVO vm, StatsCollector sc) {
|
||||||
if (avoid.contains(pool)) {
|
if (avoid.contains(pool)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -25,7 +25,6 @@ import javax.ejb.Local;
|
|||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.HostPodVO;
|
import com.cloud.dc.HostPodVO;
|
||||||
import com.cloud.offering.ServiceOffering;
|
import com.cloud.offering.ServiceOffering;
|
||||||
@ -33,6 +32,7 @@ import com.cloud.server.StatsCollector;
|
|||||||
import com.cloud.storage.StoragePool;
|
import com.cloud.storage.StoragePool;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
|
|
||||||
@Local(value=StoragePoolAllocator.class)
|
@Local(value=StoragePoolAllocator.class)
|
||||||
@ -40,12 +40,12 @@ public class FirstFitStoragePoolAllocator extends AbstractStoragePoolAllocator {
|
|||||||
private static final Logger s_logger = Logger.getLogger(FirstFitStoragePoolAllocator.class);
|
private static final Logger s_logger = Logger.getLogger(FirstFitStoragePoolAllocator.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
||||||
return !localStorageAllocationNeeded(dskCh, vm, offering);
|
return !localStorageAllocationNeeded(dskCh, vm, offering);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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<? extends StoragePool> avoid) {
|
VMInstanceVO vm, VMTemplateVO template, Set<? extends StoragePool> avoid) {
|
||||||
// Check that the allocator type is correct
|
// Check that the allocator type is correct
|
||||||
if (!allocatorIsCorrectType(dskCh, vm, offering)) {
|
if (!allocatorIsCorrectType(dskCh, vm, offering)) {
|
||||||
|
|||||||
@ -26,7 +26,6 @@ import javax.naming.ConfigurationException;
|
|||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.configuration.dao.ConfigurationDao;
|
import com.cloud.configuration.dao.ConfigurationDao;
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.HostPodVO;
|
import com.cloud.dc.HostPodVO;
|
||||||
@ -35,6 +34,7 @@ import com.cloud.storage.StorageManager;
|
|||||||
import com.cloud.storage.StoragePool;
|
import com.cloud.storage.StoragePool;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.utils.component.ComponentLocator;
|
import com.cloud.utils.component.ComponentLocator;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
|
|
||||||
@Local(value=StoragePoolAllocator.class)
|
@Local(value=StoragePoolAllocator.class)
|
||||||
@ -48,7 +48,7 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl
|
|||||||
boolean _storagePoolCleanupEnabled;
|
boolean _storagePoolCleanupEnabled;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoragePool allocateToPool(DiskCharacteristicsTO dskCh,
|
public StoragePool allocateToPool(DiskCharacteristics dskCh,
|
||||||
ServiceOffering offering,
|
ServiceOffering offering,
|
||||||
DataCenterVO dc,
|
DataCenterVO dc,
|
||||||
HostPodVO pod,
|
HostPodVO pod,
|
||||||
|
|||||||
@ -27,7 +27,6 @@ import javax.naming.ConfigurationException;
|
|||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.capacity.CapacityVO;
|
import com.cloud.capacity.CapacityVO;
|
||||||
import com.cloud.capacity.dao.CapacityDao;
|
import com.cloud.capacity.dao.CapacityDao;
|
||||||
import com.cloud.configuration.dao.ConfigurationDao;
|
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.SearchBuilder;
|
||||||
import com.cloud.utils.db.SearchCriteria;
|
import com.cloud.utils.db.SearchCriteria;
|
||||||
import com.cloud.utils.db.SearchCriteria.Func;
|
import com.cloud.utils.db.SearchCriteria.Func;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.State;
|
import com.cloud.vm.State;
|
||||||
import com.cloud.vm.UserVmVO;
|
import com.cloud.vm.UserVmVO;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
@ -83,12 +83,12 @@ public class LocalStoragePoolAllocator extends FirstFitStoragePoolAllocator {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
||||||
return localStorageAllocationNeeded(dskCh, vm, offering);
|
return localStorageAllocationNeeded(dskCh, vm, offering);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoragePool allocateToPool(DiskCharacteristicsTO dskCh,
|
public StoragePool allocateToPool(DiskCharacteristics dskCh,
|
||||||
ServiceOffering offering,
|
ServiceOffering offering,
|
||||||
DataCenterVO dc,
|
DataCenterVO dc,
|
||||||
HostPodVO pod,
|
HostPodVO pod,
|
||||||
|
|||||||
@ -25,7 +25,6 @@ import javax.ejb.Local;
|
|||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.HostPodVO;
|
import com.cloud.dc.HostPodVO;
|
||||||
import com.cloud.offering.ServiceOffering;
|
import com.cloud.offering.ServiceOffering;
|
||||||
@ -33,6 +32,7 @@ import com.cloud.server.StatsCollector;
|
|||||||
import com.cloud.storage.StoragePool;
|
import com.cloud.storage.StoragePool;
|
||||||
import com.cloud.storage.StoragePoolVO;
|
import com.cloud.storage.StoragePoolVO;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
|
|
||||||
@Local(value=StoragePoolAllocator.class)
|
@Local(value=StoragePoolAllocator.class)
|
||||||
@ -40,12 +40,12 @@ public class RandomStoragePoolAllocator extends AbstractStoragePoolAllocator {
|
|||||||
private static final Logger s_logger = Logger.getLogger(RandomStoragePoolAllocator.class);
|
private static final Logger s_logger = Logger.getLogger(RandomStoragePoolAllocator.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean allocatorIsCorrectType(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
public boolean allocatorIsCorrectType(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering,
|
public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering,
|
||||||
DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm,
|
DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm,
|
||||||
VMTemplateVO template, Set<? extends StoragePool> avoid) {
|
VMTemplateVO template, Set<? extends StoragePool> avoid) {
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,6 @@ package com.cloud.storage.allocator;
|
|||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.HostPodVO;
|
import com.cloud.dc.HostPodVO;
|
||||||
import com.cloud.host.Host;
|
import com.cloud.host.Host;
|
||||||
@ -27,6 +26,7 @@ import com.cloud.offering.ServiceOffering;
|
|||||||
import com.cloud.storage.StoragePool;
|
import com.cloud.storage.StoragePool;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.utils.component.Adapter;
|
import com.cloud.utils.component.Adapter;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
import com.cloud.vm.VirtualMachine;
|
import com.cloud.vm.VirtualMachine;
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ import com.cloud.vm.VirtualMachine;
|
|||||||
*/
|
*/
|
||||||
public interface StoragePoolAllocator extends Adapter {
|
public interface StoragePoolAllocator extends Adapter {
|
||||||
|
|
||||||
StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long cluster, VMInstanceVO vm, VMTemplateVO template, Set<? extends StoragePool> avoids);
|
StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long cluster, VMInstanceVO vm, VMTemplateVO template, Set<? extends StoragePool> avoids);
|
||||||
|
|
||||||
String chooseStorageIp(VirtualMachine vm, Host host, Host storage);
|
String chooseStorageIp(VirtualMachine vm, Host host, Host storage);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,6 @@ import java.util.Set;
|
|||||||
import javax.ejb.Local;
|
import javax.ejb.Local;
|
||||||
import javax.naming.ConfigurationException;
|
import javax.naming.ConfigurationException;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.DiskCharacteristicsTO;
|
|
||||||
import com.cloud.configuration.Config;
|
import com.cloud.configuration.Config;
|
||||||
import com.cloud.configuration.dao.ConfigurationDao;
|
import com.cloud.configuration.dao.ConfigurationDao;
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
@ -34,6 +33,7 @@ import com.cloud.storage.StoragePool;
|
|||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.storage.Volume.VolumeType;
|
import com.cloud.storage.Volume.VolumeType;
|
||||||
import com.cloud.utils.component.ComponentLocator;
|
import com.cloud.utils.component.ComponentLocator;
|
||||||
|
import com.cloud.vm.DiskCharacteristics;
|
||||||
import com.cloud.vm.VMInstanceVO;
|
import com.cloud.vm.VMInstanceVO;
|
||||||
import com.cloud.vm.VirtualMachine;
|
import com.cloud.vm.VirtualMachine;
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implemen
|
|||||||
boolean _useLocalStorage;
|
boolean _useLocalStorage;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoragePool allocateToPool(DiskCharacteristicsTO dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set<? extends StoragePool> avoids) {
|
public StoragePool allocateToPool(DiskCharacteristics dskCh, ServiceOffering offering, DataCenterVO dc, HostPodVO pod, Long clusterId, VMInstanceVO vm, VMTemplateVO template, Set<? extends StoragePool> avoids) {
|
||||||
if (!_useLocalStorage) {
|
if (!_useLocalStorage) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implemen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean localStorageAllocationNeeded(DiskCharacteristicsTO dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
protected boolean localStorageAllocationNeeded(DiskCharacteristics dskCh, VMInstanceVO vm, ServiceOffering offering) {
|
||||||
if (dskCh.getType() == VolumeType.ROOT) {
|
if (dskCh.getType() == VolumeType.ROOT) {
|
||||||
return true;
|
return true;
|
||||||
} else if (dskCh.getType() == VolumeType.DATADISK) {
|
} else if (dskCh.getType() == VolumeType.DATADISK) {
|
||||||
|
|||||||
@ -40,9 +40,9 @@ import com.cloud.agent.api.storage.DownloadProgressCommand.RequestType;
|
|||||||
import com.cloud.event.EventTypes;
|
import com.cloud.event.EventTypes;
|
||||||
import com.cloud.event.EventVO;
|
import com.cloud.event.EventVO;
|
||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.VMTemplateHostVO;
|
import com.cloud.storage.VMTemplateHostVO;
|
||||||
import com.cloud.storage.VMTemplateVO;
|
import com.cloud.storage.VMTemplateVO;
|
||||||
import com.cloud.storage.Volume;
|
|
||||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||||
import com.cloud.storage.dao.VMTemplateHostDao;
|
import com.cloud.storage.dao.VMTemplateHostDao;
|
||||||
import com.cloud.storage.download.DownloadState.DownloadEvent;
|
import com.cloud.storage.download.DownloadState.DownloadEvent;
|
||||||
@ -286,8 +286,8 @@ public class DownloadListener implements Listener {
|
|||||||
long agentId = agent.getId();
|
long agentId = agent.getId();
|
||||||
|
|
||||||
StartupStorageCommand storage = (StartupStorageCommand)cmd;
|
StartupStorageCommand storage = (StartupStorageCommand)cmd;
|
||||||
if (storage.getResourceType() == Volume.StorageResourceType.STORAGE_HOST ||
|
if (storage.getResourceType() == Storage.StorageResourceType.STORAGE_HOST ||
|
||||||
storage.getResourceType() == Volume.StorageResourceType.SECONDARY_STORAGE )
|
storage.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE )
|
||||||
{
|
{
|
||||||
downloadMonitor.handleTemplateSync(agentId, storage.getTemplateInfo());
|
downloadMonitor.handleTemplateSync(agentId, storage.getTemplateInfo());
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -40,8 +40,8 @@ import com.cloud.host.Host;
|
|||||||
import com.cloud.host.Host.Type;
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.resource.ServerResourceBase;
|
import com.cloud.resource.ServerResourceBase;
|
||||||
|
import com.cloud.storage.Storage;
|
||||||
import com.cloud.storage.StorageLayer;
|
import com.cloud.storage.StorageLayer;
|
||||||
import com.cloud.storage.Volume;
|
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
import com.cloud.storage.template.DownloadManager;
|
import com.cloud.storage.template.DownloadManager;
|
||||||
import com.cloud.storage.template.DownloadManagerImpl;
|
import com.cloud.storage.template.DownloadManagerImpl;
|
||||||
@ -160,7 +160,7 @@ public class LocalSecondaryStorageResource extends ServerResourceBase implements
|
|||||||
public StartupCommand[] initialize() {
|
public StartupCommand[] initialize() {
|
||||||
|
|
||||||
final StartupStorageCommand cmd = new StartupStorageCommand(_parent, StoragePoolType.Filesystem, 1024l*1024l*1024l*1024l, _dlMgr.gatherTemplateInfo());
|
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);
|
cmd.setIqn(null);
|
||||||
fillNetworkInformation(cmd);
|
fillNetworkInformation(cmd);
|
||||||
cmd.setDataCenter(_dc);
|
cmd.setDataCenter(_dc);
|
||||||
|
|||||||
@ -28,7 +28,8 @@ import com.cloud.agent.api.StartupCommand;
|
|||||||
import com.cloud.agent.api.StartupStorageCommand;
|
import com.cloud.agent.api.StartupStorageCommand;
|
||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
import com.cloud.host.Status;
|
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 {
|
public class SecondaryStorageListener implements Listener {
|
||||||
private final static Logger s_logger = Logger.getLogger(SecondaryStorageListener.class);
|
private final static Logger s_logger = Logger.getLogger(SecondaryStorageListener.class);
|
||||||
@ -82,7 +83,7 @@ public class SecondaryStorageListener implements Listener {
|
|||||||
if (cmd instanceof StartupStorageCommand) {
|
if (cmd instanceof StartupStorageCommand) {
|
||||||
|
|
||||||
StartupStorageCommand ss = (StartupStorageCommand)cmd;
|
StartupStorageCommand ss = (StartupStorageCommand)cmd;
|
||||||
if (ss.getResourceType() == StorageResourceType.SECONDARY_STORAGE) {
|
if (ss.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE) {
|
||||||
_ssVmMgr.onAgentConnect(agent.getDataCenterId(), cmd);
|
_ssVmMgr.onAgentConnect(agent.getDataCenterId(), cmd);
|
||||||
_ssVmMgr.generateFirewallConfiguration(agent.getId());
|
_ssVmMgr.generateFirewallConfiguration(agent.getId());
|
||||||
_ssVmMgr.generateSetupCommand(agent.getDataCenterId());
|
_ssVmMgr.generateSetupCommand(agent.getDataCenterId());
|
||||||
|
|||||||
@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.cloud.vm;
|
package com.cloud.vm;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.cloud.offerings.NetworkOfferingVO;
|
import com.cloud.offerings.NetworkOfferingVO;
|
||||||
import com.cloud.service.ServiceOfferingVO;
|
import com.cloud.service.ServiceOfferingVO;
|
||||||
import com.cloud.storage.DiskOfferingVO;
|
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) {
|
public VMInstanceVO allocate(VMInstanceVO vm, ServiceOfferingVO serviceOffering, NetworkOfferingVO[] networkOfferings, DiskOfferingVO[] diskOffering) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see com.cloud.vm.VmManager#create(com.cloud.vm.VMInstanceVO)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void create(VMInstanceVO vm) {
|
public void create(VmCharacteristics vm, List<DiskCharacteristics> disks, List<NetworkCharacteristics> networks) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see com.cloud.vm.VmManager#destroy()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see com.cloud.vm.VmManager#start()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see com.cloud.vm.VmManager#stop()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void stop() {
|
public void stop() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
2
server/src/com/cloud/vm/UserVmManagerImpl.java
Executable file → Normal file
2
server/src/com/cloud/vm/UserVmManagerImpl.java
Executable file → Normal file
@ -1767,9 +1767,7 @@ public class UserVmManagerImpl implements UserVmManager {
|
|||||||
if(volume.getTemplateId() !=null){
|
if(volume.getTemplateId() !=null){
|
||||||
templateId = volume.getTemplateId();
|
templateId = volume.getTemplateId();
|
||||||
}
|
}
|
||||||
if(volume.getDiskOfferingId() !=null){
|
|
||||||
diskOfferingId = volume.getDiskOfferingId();
|
diskOfferingId = volume.getDiskOfferingId();
|
||||||
}
|
|
||||||
long sizeMB = volume.getSize()/(1024*1024);
|
long sizeMB = volume.getSize()/(1024*1024);
|
||||||
String eventParams = "id=" + volume.getId() +"\ndoId="+diskOfferingId+"\ntId="+templateId+"\ndcId="+volume.getDataCenterId()+"\nsize="+sizeMB;
|
String eventParams = "id=" + volume.getId() +"\ndoId="+diskOfferingId+"\ntId="+templateId+"\ndcId="+volume.getDataCenterId()+"\nsize="+sizeMB;
|
||||||
EventVO volEvent = new EventVO();
|
EventVO volEvent = new EventVO();
|
||||||
|
|||||||
@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.cloud.vm;
|
package com.cloud.vm;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.cloud.offerings.NetworkOfferingVO;
|
import com.cloud.offerings.NetworkOfferingVO;
|
||||||
import com.cloud.service.ServiceOfferingVO;
|
import com.cloud.service.ServiceOfferingVO;
|
||||||
import com.cloud.storage.DiskOfferingVO;
|
import com.cloud.storage.DiskOfferingVO;
|
||||||
@ -31,7 +33,7 @@ public interface VmManager {
|
|||||||
NetworkOfferingVO[] networkOfferings,
|
NetworkOfferingVO[] networkOfferings,
|
||||||
DiskOfferingVO[] diskOffering);
|
DiskOfferingVO[] diskOffering);
|
||||||
|
|
||||||
void create(VMInstanceVO vm);
|
void create(VmCharacteristics vm, List<DiskCharacteristics> disks, List<NetworkCharacteristics> networks);
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
|
|
||||||
|
|||||||
@ -222,7 +222,7 @@ CREATE TABLE `cloud`.`volumes` (
|
|||||||
`data_center_id` bigint unsigned NOT NULL COMMENT 'data center this volume belongs to',
|
`data_center_id` bigint unsigned NOT NULL COMMENT 'data center this volume belongs to',
|
||||||
`iscsi_name` varchar(255) COMMENT 'iscsi target name',
|
`iscsi_name` varchar(255) COMMENT 'iscsi target name',
|
||||||
`host_ip` varchar(15) COMMENT 'host ip address for convenience',
|
`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',
|
`resource_type` varchar(64) COMMENT 'pool-based or host-based',
|
||||||
`pool_type` varchar(64) COMMENT 'type of the pool',
|
`pool_type` varchar(64) COMMENT 'type of the pool',
|
||||||
`mirror_state` varchar(64) COMMENT 'not_mirrored, active or defunct',
|
`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',
|
`updated` datetime COMMENT 'Date updated for attach/detach',
|
||||||
`removed` datetime COMMENT 'Date removed. not null if removed',
|
`removed` datetime COMMENT 'Date removed. not null if removed',
|
||||||
`status` varchar(32) COMMENT 'Async API volume creation status',
|
`status` varchar(32) COMMENT 'Async API volume creation status',
|
||||||
|
`state` varchar(32) COMMENT 'State machine',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|||||||
583
setup/db/override/server-setup.xml
Normal file
583
setup/db/override/server-setup.xml
Normal file
@ -0,0 +1,583 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<data>
|
||||||
|
<version>2.0</version>
|
||||||
|
<zones>
|
||||||
|
<zone>
|
||||||
|
<id>1</id>
|
||||||
|
<name>AH</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>100-199</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>2</id>
|
||||||
|
<name>KM</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>200-299</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>3</id>
|
||||||
|
<name>KY</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>300-399</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>4</id>
|
||||||
|
<name>WC</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>400-499</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>5</id>
|
||||||
|
<name>CV</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>500-599</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>6</id>
|
||||||
|
<name>KS</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>600-699</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>7</id>
|
||||||
|
<name>ES</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>700-799</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>8</id>
|
||||||
|
<name>RC</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>800-899</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>9</id>
|
||||||
|
<name>AX</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>900-999</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>10</id>
|
||||||
|
<name>JW</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>900-999</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
<zone>
|
||||||
|
<id>11</id>
|
||||||
|
<name>AJ</name>
|
||||||
|
<dns1>72.52.126.11</dns1>
|
||||||
|
<dns2>72.52.126.12</dns2>
|
||||||
|
<internalDns1>192.168.10.253</internalDns1>
|
||||||
|
<internalDns2>192.168.10.254</internalDns2>
|
||||||
|
<vnet>1000-1099</vnet>
|
||||||
|
<guestNetworkCidr>10.1.1.0/24</guestNetworkCidr>
|
||||||
|
</zone>
|
||||||
|
</zones>
|
||||||
|
<!--
|
||||||
|
<storagePools>
|
||||||
|
<storagePool>
|
||||||
|
<zoneId>5</zoneId>
|
||||||
|
<name>sol10-2</name>
|
||||||
|
<hostAddress>sol10-2</hostAddress>
|
||||||
|
<hostPath>/tank/vmops-nfs/</hostPath>
|
||||||
|
</storagePool>
|
||||||
|
</storagePools>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<vlans>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<vlanId>31</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.31.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.31.150-192.168.31.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>2</zoneId>
|
||||||
|
<vlanId>32</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.32.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.32.150-192.168.32.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>3</zoneId>
|
||||||
|
<vlanId>33</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.33.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.33.150-192.168.33.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>4</zoneId>
|
||||||
|
<vlanId>34</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.34.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.34.150-192.168.34.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>5</zoneId>
|
||||||
|
<vlanId>35</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.35.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.35.150-192.168.35.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>6</zoneId>
|
||||||
|
<vlanId>36</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.36.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.36.150-192.168.36.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>7</zoneId>
|
||||||
|
<vlanId>37</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.37.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.37.150-192.168.37.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>8</zoneId>
|
||||||
|
<vlanId>38</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.38.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.38.150-192.168.38.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>9</zoneId>
|
||||||
|
<vlanId>39</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.39.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.39.150-192.168.39.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>10</zoneId>
|
||||||
|
<vlanId>40</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.40.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.40.150-192.168.40.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
<vlan>
|
||||||
|
<zoneId>11</zoneId>
|
||||||
|
<vlanId>41</vlanId>
|
||||||
|
<vlanType>VirtualNetwork</vlanType>
|
||||||
|
<gateway>192.168.41.1</gateway>
|
||||||
|
<netmask>255.255.255.0</netmask>
|
||||||
|
<ipAddressRange>192.168.41.150-192.168.41.159</ipAddressRange>
|
||||||
|
</vlan>
|
||||||
|
</vlans>
|
||||||
|
|
||||||
|
<pods>
|
||||||
|
<pod>
|
||||||
|
<id>1</id>
|
||||||
|
<name>AH</name>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<ipAddressRange>192.168.140.20-192.168.140.24</ipAddressRange>
|
||||||
|
<cidr>192.168.140.0/24</cidr>
|
||||||
|
<gateway>192.168.140.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>2</id>
|
||||||
|
<name>KM</name>
|
||||||
|
<zoneId>2</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.25-192.168.10.29</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>3</id>
|
||||||
|
<name>KY</name>
|
||||||
|
<zoneId>3</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.30-192.168.10.34</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>4</id>
|
||||||
|
<name>WC</name>
|
||||||
|
<zoneId>4</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.35-192.168.10.39</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>5</id>
|
||||||
|
<name>CV</name>
|
||||||
|
<zoneId>5</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.40-192.168.10.44</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>6</id>
|
||||||
|
<name>KS</name>
|
||||||
|
<zoneId>6</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.45-192.168.10.49</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>7</id>
|
||||||
|
<name>ES</name>
|
||||||
|
<zoneId>7</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.50-192.168.10.54</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>8</id>
|
||||||
|
<name>RC</name>
|
||||||
|
<zoneId>8</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.55-192.168.10.59</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>9</id>
|
||||||
|
<name>AX</name>
|
||||||
|
<zoneId>9</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.62-192.168.10.64</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>10</id>
|
||||||
|
<name>JW</name>
|
||||||
|
<zoneId>10</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.65-192.168.10.69</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
<pod>
|
||||||
|
<id>11</id>
|
||||||
|
<name>AJ</name>
|
||||||
|
<zoneId>11</zoneId>
|
||||||
|
<ipAddressRange>192.168.10.70-192.168.10.74</ipAddressRange>
|
||||||
|
<cidr>192.168.10.0/24</cidr>
|
||||||
|
<gateway>192.168.10.1</gateway>
|
||||||
|
</pod>
|
||||||
|
</pods>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* cpu is the number of CPUs for the offering
|
||||||
|
* ramSize is total memory in MB
|
||||||
|
* speed is the CPU speed for each core in MHZ
|
||||||
|
* diskSpace is the storage space in MB
|
||||||
|
* price is the price of the offering per hour
|
||||||
|
-->
|
||||||
|
<serviceOfferings>
|
||||||
|
<serviceOffering>
|
||||||
|
<id>1</id>
|
||||||
|
<name>Small Instance</name>
|
||||||
|
<displayText>Small Instance [500MHZ CPU, 512MB MEM, 16GB Disk] - $0.10 per hour</displayText>
|
||||||
|
<cpu>1</cpu>
|
||||||
|
<ramSize>512</ramSize>
|
||||||
|
<speed>500</speed>
|
||||||
|
<mirrored>false</mirrored>
|
||||||
|
</serviceOffering>
|
||||||
|
<serviceOffering>
|
||||||
|
<id>2</id>
|
||||||
|
<name>Medium Instance</name>
|
||||||
|
<displayText>Medium Instance [500MHZ CPU, 1GB MEM, 32GB Disk] - $0.20 per hour</displayText>
|
||||||
|
<cpu>1</cpu>
|
||||||
|
<ramSize>1024</ramSize>
|
||||||
|
<speed>512</speed>
|
||||||
|
</serviceOffering>
|
||||||
|
<serviceOffering>
|
||||||
|
<id>3</id>
|
||||||
|
<name>Large Instance</name>
|
||||||
|
<displayText>Large Instance [2GHZ CPU, 4GB MEM, 64GB Disk] - $0.30 per hour</displayText>
|
||||||
|
<cpu>2</cpu>
|
||||||
|
<ramSize>4096</ramSize>
|
||||||
|
<speed>2000</speed>
|
||||||
|
</serviceOffering>
|
||||||
|
</serviceOfferings>
|
||||||
|
|
||||||
|
<diskOfferings>
|
||||||
|
<diskOffering>
|
||||||
|
<id>1</id>
|
||||||
|
<domainId>1</domainId>
|
||||||
|
<name>Small Disk</name>
|
||||||
|
<displayText>Small Disk [16GB Disk]</displayText>
|
||||||
|
<diskSpace>16000</diskSpace>
|
||||||
|
</diskOffering>
|
||||||
|
<diskOffering>
|
||||||
|
<id>2</id>
|
||||||
|
<domainId>1</domainId>
|
||||||
|
<name>Medium Disk</name>
|
||||||
|
<displayText>Medium Disk [32GB Disk]</displayText>
|
||||||
|
<diskSpace>32000</diskSpace>
|
||||||
|
<tags>mid_disk,mid_performance</tags>
|
||||||
|
</diskOffering>
|
||||||
|
<diskOffering>
|
||||||
|
<id>3</id>
|
||||||
|
<domainId>1</domainId>
|
||||||
|
<name>Large Disk</name>
|
||||||
|
<displayText>Large Disk [64GB Disk]</displayText>
|
||||||
|
<diskSpace>64000</diskSpace>
|
||||||
|
<tags>high_performance</tags>
|
||||||
|
</diskOffering>
|
||||||
|
</diskOfferings>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* firstname/lastname are optional parameters
|
||||||
|
* id, username, password are required parameters
|
||||||
|
-->
|
||||||
|
<users>
|
||||||
|
<user>
|
||||||
|
<id>2</id>
|
||||||
|
<username>admin</username>
|
||||||
|
<password>password</password>
|
||||||
|
<firstname>Admin</firstname>
|
||||||
|
<lastname>User</lastname>
|
||||||
|
<email>admin@mailprovider.com</email>
|
||||||
|
</user>
|
||||||
|
</users>
|
||||||
|
|
||||||
|
<configurationEntries>
|
||||||
|
<configuration>
|
||||||
|
<name>ssh.privatekey</name>
|
||||||
|
<value>-----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-----
|
||||||
|
</value>
|
||||||
|
<category>Hidden</category>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>ssh.publickey</name>
|
||||||
|
<value>ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnNUMVgQS87EzAQN9ufGgH3T1kOpqcvTmUrp8RVZyeA5qwptSrZxONRbhLK709pZFBJLmeFqiqciWoA/srVIFk+rPmBlVsMw8BK53hTGoax7iSe8sLFCAATm6vp0HnZzYqNfrzR2by36ET5aQD/VAyA55u+uUgAlxQuhKff2xjyahEHs+UiRlReiAgItygm9g3co3+8fJDOuRse+s0TOip1D0jPdo2AJFscyxrG9hWqQH86R/ZlLJ7DqsiaAcUmn52u6Nsmd3BkRmGVx/D35Mq6upJqrk/QDfug9LF66yiIP/BEIn08N/wQ6m/O37WUtqqyl3rRKqs5TJ9ZnhsqeO9Q== root@test2.lab.vmops.com
|
||||||
|
</value>
|
||||||
|
<category>Hidden</category>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>default.zone</name>
|
||||||
|
<value>AH</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>domain.suffix</name>
|
||||||
|
<value>vmops-test.vmops.com</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>instance.name</name>
|
||||||
|
<value>AH</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>consoleproxy.ram.size</name>
|
||||||
|
<value>256</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>host.stats.interval</name>
|
||||||
|
<value>3600000</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>storage.stats.interval</name>
|
||||||
|
<value>120000</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>volume.stats.interval</name>
|
||||||
|
<value>-1</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>ping.interval</name>
|
||||||
|
<value>60</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.wait</name>
|
||||||
|
<value>1800</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>expunge.interval</name>
|
||||||
|
<value>86400</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>usage.aggregation.timezone</name>
|
||||||
|
<value>GMT</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>init</name>
|
||||||
|
<value>true</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>use.local.storage</name>
|
||||||
|
<value>true</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>system.vm.use.local.storage</name>
|
||||||
|
<value>true</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>secondary.storage.vm</name>
|
||||||
|
<value>false</value>
|
||||||
|
</configuration>
|
||||||
|
<!-- the following are for configuring alerts and need to be changed to proper configuration values -->
|
||||||
|
<!--
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.host</name>
|
||||||
|
<value>smtp.host.com</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.port</name>
|
||||||
|
<value>25</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.useAuth</name>
|
||||||
|
<value>false</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.username</name>
|
||||||
|
<value>some.user@example.com</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.password</name>
|
||||||
|
<value>password</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.email.sender</name>
|
||||||
|
<value>some.user@example.com</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.email.addresses</name>
|
||||||
|
<value>some.admin@example.com</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>alert.smtp.debug</name>
|
||||||
|
<value>false</value>
|
||||||
|
</configuration>
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
<name>memory.capacity.threshold</name>
|
||||||
|
<value>0.85</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>cpu.capacity.threshold</name>
|
||||||
|
<value>0.85</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>storage.capacity.threshold</name>
|
||||||
|
<value>0.85</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>storage.allocated.capacity.threshold</name>
|
||||||
|
<value>0.85</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>capacity.check.period</name>
|
||||||
|
<value>3600000</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>wait</name>
|
||||||
|
<value>240</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>network.throttling.rate</name>
|
||||||
|
<value>200</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>multicast.throttling.rate</name>
|
||||||
|
<value>10</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>management.network.cidr</name>
|
||||||
|
<value>192.168.1.0/24</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>usage.aggregation.timezone</name>
|
||||||
|
<value>GMT</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>usage.stats.job.exec.time</name>
|
||||||
|
<value>00:15</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>system.vm.local.storage.required</name>
|
||||||
|
<value>false</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>hypervisor.type</name>
|
||||||
|
<value>xenserver</value>
|
||||||
|
</configuration>
|
||||||
|
<configuration>
|
||||||
|
<name>secondary.storage.vm</name>
|
||||||
|
<value>false</value>
|
||||||
|
</configuration>
|
||||||
|
</configurationEntries>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
It is possible to specify a single IP address. For example, to add 192.168.1.1
|
||||||
|
as the only address, specify as follows.
|
||||||
|
<publicIpAddresses>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<ipAddressRange>192.168.1.1</ipAddressRange>
|
||||||
|
</publicIpAddresses>
|
||||||
|
|
||||||
|
For each ip address range, create a new object. For example, to add the range 192.168.2.1 to 192.168.2.255
|
||||||
|
copy the following object tag into the privateIpRange
|
||||||
|
<privateIpAddresses>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<podId>1</podId>
|
||||||
|
<ipAddressRange>192.168.2.1-192.168.2.255</ipAddressRange>
|
||||||
|
</privateIpAddresses>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
It is possible to specify a single IP address. For example, to add 65.37.141.29
|
||||||
|
as the only address, specify as follows.
|
||||||
|
<publicIpAddresses>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<ipAddressRange>65.37.141.29</ipAddressRange>
|
||||||
|
</publicIpAddresses>
|
||||||
|
|
||||||
|
For each ip address range, create a new object. For example, to add the range 65.37.141.29 to 65.37.141.39
|
||||||
|
copy the following object tag into the publicIpRange
|
||||||
|
<publicIpAddresses>
|
||||||
|
<zoneId>1</zoneId>
|
||||||
|
<ipAddressRange>65.37.141.29-65.37.141.39</ipAddressRange>
|
||||||
|
</publicIpAddresses>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
Loading…
x
Reference in New Issue
Block a user