Squashed commits
Signed-off-by: Tim Mackey <tmackey@gmail.com>
Signed-off-by: Sebastien Goasguen <runseb@gmail.com>
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index a3faca7..9a2489f 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -375,7 +375,7 @@
public static final String SECURITY_GROUP_EANBLED = "securitygroupenabled";
public static final String LOCAL_STORAGE_ENABLED = "localstorageenabled";
public static final String GUEST_IP_TYPE = "guestiptype";
- public static final String XEN_NETWORK_LABEL = "xennetworklabel";
+ public static final String XENSERVER_NETWORK_LABEL = "xenservernetworklabel";
public static final String KVM_NETWORK_LABEL = "kvmnetworklabel";
public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel";
public static final String HYPERV_NETWORK_LABEL = "hypervnetworklabel";
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
index a71d5bb..5f1188e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
@@ -55,7 +55,7 @@
@Parameter(name = ApiConstants.TRAFFIC_TYPE, type = CommandType.STRING, required = true, description = "the trafficType to be added to the physical network")
private String trafficType;
- @Parameter(name = ApiConstants.XEN_NETWORK_LABEL,
+ @Parameter(name = ApiConstants.XENSERVER_NETWORK_LABEL,
type = CommandType.STRING,
description = "The network name label of the physical device dedicated to this traffic on a XenServer host")
private String xenLabel;
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
index 3de8905..68a9431 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
@@ -45,7 +45,7 @@
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = TrafficTypeResponse.class, required = true, description = "traffic type id")
private Long id;
- @Parameter(name = ApiConstants.XEN_NETWORK_LABEL,
+ @Parameter(name = ApiConstants.XENSERVER_NETWORK_LABEL,
type = CommandType.STRING,
description = "The network name label of the physical device dedicated to this traffic on a XenServer host")
private String xenLabel;
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
index 69dd062..84ed2e6 100644
--- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
@@ -40,7 +40,7 @@
@Param(description = "the physical network this belongs to")
private String physicalNetworkId;
- @SerializedName(ApiConstants.XEN_NETWORK_LABEL)
+ @SerializedName(ApiConstants.XENSERVER_NETWORK_LABEL)
@Param(description = "The network name label of the physical device dedicated to this traffic on a XenServer host")
private String xenNetworkLabel;
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
index cd20214..efca95c 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
@@ -2007,9 +2007,9 @@
ec2Image.setState(temp.getIsReady() ? "available" : "pending");
ec2Image.setDomainId(temp.getDomainId());
if (temp.getHyperVisor().equalsIgnoreCase("xenserver"))
- ec2Image.setHypervisor("xen");
+ ec2Image.setHypervisor("xenserver");
else if (temp.getHyperVisor().equalsIgnoreCase("ovm"))
- ec2Image.setHypervisor("ovm"); // valid values for hypervisor is 'ovm' and 'xen'
+ ec2Image.setHypervisor("ovm"); // valid values for hypervisor is 'ovm' and 'xenserver'
else
ec2Image.setHypervisor("");
if (temp.getDisplayText() == null)
@@ -2614,7 +2614,7 @@
*/
private String mapToAmazonHypervisorType(String hypervisor) {
if (hypervisor.equalsIgnoreCase("Xenserver"))
- return ("xen");
+ return ("xenserver");
else if (hypervisor.equalsIgnoreCase("Ovm"))
return ("ovm");
else
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index f40ac60..37a5547 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -1256,7 +1256,7 @@
label.welcome.cloud.console=Welcome to Management Console
label.welcome=Welcome
label.what.is.cloudstack=What is CloudStack&\#8482?
-label.xen.traffic.label=XenServer traffic label
+label.xenserver.traffic.label=XenServer traffic label
label.yes=Yes
label.zone.details=Zone details
label.zone.id=Zone ID
diff --git a/client/WEB-INF/classes/resources/messages_fr_FR.properties b/client/WEB-INF/classes/resources/messages_fr_FR.properties
index 42335bc..4be3947 100644
--- a/client/WEB-INF/classes/resources/messages_fr_FR.properties
+++ b/client/WEB-INF/classes/resources/messages_fr_FR.properties
@@ -1178,7 +1178,7 @@
label.welcome=Bienvenue
label.welcome.cloud.console=Bienvenue dans la Console d\\'Administration
label.what.is.cloudstack=Qu\\'est-ce-que CloudStack&\#8482; ?
-label.xen.traffic.label=Libell\u00e9 pour le trafic XenServer
+label.xenserver.traffic.label=Libell\u00e9 pour le trafic XenServer
label.yes=Oui
label.zone.details=D\u00e9tails de la zone
label.zone.id=ID de la zone
diff --git a/client/WEB-INF/classes/resources/messages_it_IT.properties b/client/WEB-INF/classes/resources/messages_it_IT.properties
index eab29b9..6046784 100644
--- a/client/WEB-INF/classes/resources/messages_it_IT.properties
+++ b/client/WEB-INF/classes/resources/messages_it_IT.properties
@@ -618,7 +618,7 @@
label.vsmpktvlanid=VLAN ID del Pacchetto
label.vsmstoragevlanid=VLAN ID di Storage
label.what.is.cloudstack=Che cosa \u00e8 CloudStack&\#8482?
-label.xen.traffic.label=Etichetta del traffico via XenServer
+label.xenserver.traffic.label=Etichetta del traffico via XenServer
label.yes=S\u00ec
label.zone.details=Dettagli della Zona
label.zone.name=Nome Zona
diff --git a/client/WEB-INF/classes/resources/messages_ja_JP.properties b/client/WEB-INF/classes/resources/messages_ja_JP.properties
index d3d50f0..ee7e8ac 100644
--- a/client/WEB-INF/classes/resources/messages_ja_JP.properties
+++ b/client/WEB-INF/classes/resources/messages_ja_JP.properties
@@ -1250,7 +1250,7 @@
label.welcome.cloud.console=\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3078\u3088\u3046\u3053\u305d
label.welcome=\u3088\u3046\u3053\u305d
label.what.is.cloudstack=CloudStack&\#8482; \u306b\u3064\u3044\u3066
-label.xen.traffic.label=XenServer \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb
+label.xenserver.traffic.label=XenServer \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb
label.yes=\u306f\u3044
label.zone.details=\u30be\u30fc\u30f3\u306e\u8a73\u7d30
label.zone.id=\u30be\u30fc\u30f3 ID
diff --git a/client/WEB-INF/classes/resources/messages_ko_KR.properties b/client/WEB-INF/classes/resources/messages_ko_KR.properties
index b755072..ed8ffc7 100644
--- a/client/WEB-INF/classes/resources/messages_ko_KR.properties
+++ b/client/WEB-INF/classes/resources/messages_ko_KR.properties
@@ -1100,7 +1100,7 @@
label.welcome.cloud.console=\uad00\ub9ac \ucf58\uc194\uc5d0 \uc624\uc2e0\uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4\!
label.welcome=\uc5b4\uc11c \uc624\uc2ed\uc2dc\uc624
label.what.is.cloudstack=CloudStack\u2122 \uc815\ubcf4
-label.xen.traffic.label=XenServer \ud2b8\ub798\ud53d \ub77c\ubca8
+label.xenserver.traffic.label=XenServer \ud2b8\ub798\ud53d \ub77c\ubca8
label.yes=\uc608
label.zone.details=Zone \uc0c1\uc138
label.zone.id=Zone ID
diff --git a/client/WEB-INF/classes/resources/messages_nb_NO.properties b/client/WEB-INF/classes/resources/messages_nb_NO.properties
index be41244..fadeaf6 100644
--- a/client/WEB-INF/classes/resources/messages_nb_NO.properties
+++ b/client/WEB-INF/classes/resources/messages_nb_NO.properties
@@ -248,7 +248,7 @@
label.vmware.traffic.label=VMware trafikketikett
label.volgroup=Volumgruppe
label.what.is.cloudstack=Hva er CloudStack&\#8482?
-label.xen.traffic.label=XenServer trafikketikett
+label.xenserver.traffic.label=XenServer trafikketikett
label.zone.details=Sonedetaljer
label.zone.name=Sonenavn
label.zone.type=Sonetype
diff --git a/client/WEB-INF/classes/resources/messages_nl_NL.properties b/client/WEB-INF/classes/resources/messages_nl_NL.properties
index 5d666a4..89b66d3 100644
--- a/client/WEB-INF/classes/resources/messages_nl_NL.properties
+++ b/client/WEB-INF/classes/resources/messages_nl_NL.properties
@@ -1143,7 +1143,7 @@
label.welcome.cloud.console=Welkom op de Management Console
label.welcome=Welkom
label.what.is.cloudstack=Wat is CloudStack&\#8482?
-label.xen.traffic.label=XenServer verkeerslabel
+label.xenserver.traffic.label=XenServer verkeerslabel
label.yes=Ja
label.zone.details=Zone details
label.zone.id=Zone ID
diff --git a/client/WEB-INF/classes/resources/messages_pt_BR.properties b/client/WEB-INF/classes/resources/messages_pt_BR.properties
index 1bcdc9c..2caff69 100644
--- a/client/WEB-INF/classes/resources/messages_pt_BR.properties
+++ b/client/WEB-INF/classes/resources/messages_pt_BR.properties
@@ -1125,7 +1125,7 @@
label.welcome=Bem-Vindo
label.welcome.cloud.console=Painel de Controle
label.what.is.cloudstack=O que \u00e9 o CloudStack&\#8482?
-label.xen.traffic.label=Etiqueta de tr\u00e1fego XenServer
+label.xenserver.traffic.label=Etiqueta de tr\u00e1fego XenServer
label.yes=Sim
label.zone.details=Detalhes de zona
label.zone.id=ID da Zona
diff --git a/client/WEB-INF/classes/resources/messages_ru_RU.properties b/client/WEB-INF/classes/resources/messages_ru_RU.properties
index 62c791f..30efb0f 100644
--- a/client/WEB-INF/classes/resources/messages_ru_RU.properties
+++ b/client/WEB-INF/classes/resources/messages_ru_RU.properties
@@ -1038,7 +1038,7 @@
label.welcome.cloud.console=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f
label.welcome=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c
label.what.is.cloudstack=\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CloudStack?
-label.xen.traffic.label=\u041c\u0435\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 XenServer
+label.xenserver.traffic.label=\u041c\u0435\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 XenServer
label.yes=\u0414\u0430
label.zone.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u043e\u043d\u044b
label.zone.id=ID \u0437\u043e\u043d\u044b
diff --git a/client/WEB-INF/classes/resources/messages_zh_CN.properties b/client/WEB-INF/classes/resources/messages_zh_CN.properties
index ea7bfd4..ecd2000 100644
--- a/client/WEB-INF/classes/resources/messages_zh_CN.properties
+++ b/client/WEB-INF/classes/resources/messages_zh_CN.properties
@@ -1250,7 +1250,7 @@
label.welcome.cloud.console=\u6b22\u8fce\u4f7f\u7528\u7ba1\u7406\u63a7\u5236\u53f0
label.welcome=\u6b22\u8fce
label.what.is.cloudstack=\u4ec0\u4e48\u662f CloudStack&\#8482?
-label.xen.traffic.label=XenServer \u6d41\u91cf\u6807\u7b7e
+label.xenserver.traffic.label=XenServer \u6d41\u91cf\u6807\u7b7e
label.yes=\u662f
label.zone.details=\u8d44\u6e90\u57df\u8be6\u7ec6\u4fe1\u606f
label.zone.id=\u8d44\u6e90\u57df ID
diff --git a/client/pom.xml b/client/pom.xml
index d8dbde7..54d38e8 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -147,7 +147,7 @@
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-plugin-hypervisor-xen</artifactId>
+ <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index da242b3..37cb3dd 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -528,7 +528,7 @@
<!--
Discovers
-->
- <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+ <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xenserver.discoverer.XcpServerDiscoverer">
<property name="name" value="XCP Agent"/>
</bean>
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
index 395a4e3..3fe9881 100644
--- a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
+++ b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
@@ -48,7 +48,7 @@
@Enumerated(value = EnumType.STRING)
TrafficType trafficType;
- @Column(name = "xen_network_label")
+ @Column(name = "xenserver_network_label")
private String xenNetworkLabel;
@Column(name = "kvm_network_label")
diff --git a/engine/storage/integration-test/pom.xml b/engine/storage/integration-test/pom.xml
index 892a7c9..912bafe 100644
--- a/engine/storage/integration-test/pom.xml
+++ b/engine/storage/integration-test/pom.xml
@@ -58,7 +58,7 @@
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-plugin-hypervisor-xen</artifactId>
+ <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
index 5151629..b34b697 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
@@ -52,7 +52,7 @@
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
import com.cloud.hypervisor.vmware.VmwareServerDiscoverer;
-import com.cloud.hypervisor.xen.resource.XcpOssResource;
+import com.cloud.hypervisor.xenserver.resource.XcpOssResource;
import com.cloud.resource.ServerResource;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.exception.CloudRuntimeException;
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java
index 71c7c8d..196132b 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java
@@ -85,17 +85,17 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), getHostGateway(), getHostCidr(), 8, "test");
pod = podDao.persist(pod);
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(HypervisorType.XenServer.toString());
cluster.setClusterType(ClusterType.CloudManaged);
cluster.setManagedState(ManagedState.Managed);
cluster = clusterDao.persist(cluster);
clusterId = cluster.getId();
- // create xen host
+ // create xenserver host
host = new HostVO(getHostGuid());
- host.setName("devcloud xen host");
+ host.setName("devcloud xenserver host");
host.setType(Host.Type.Routing);
host.setHypervisorType(HypervisorType.XenServer);
host.setPrivateIpAddress(getHostIp());
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
index b841bf2..f81b8fe 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
@@ -158,7 +158,7 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), "10.223.0.1", "10.233.2.2/25", 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(Hypervisor.HypervisorType.XenServer.toString());
cluster.setClusterType(Cluster.ClusterType.CloudManaged);
@@ -230,7 +230,7 @@
public HostVO createHost(Hypervisor.HypervisorType hypervisorType) {
String uuid = UUID.randomUUID().toString();
HostVO host = new HostVO(uuid);
- host.setName("devcloud xen host");
+ host.setName("devcloud xenserver host");
host.setType(Host.Type.Routing);
host.setPrivateIpAddress(uuid);
host.setDataCenterId(dcId);
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
index cac6ea2..1b5746d 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
@@ -191,17 +191,17 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), this.getHostGateway(), this.getHostCidr(), 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(this.getHypervisor().toString());
cluster.setClusterType(ClusterType.CloudManaged);
cluster.setManagedState(ManagedState.Managed);
cluster = clusterDao.persist(cluster);
clusterId = cluster.getId();
- // create xen host
+ // create xenserver host
host = new HostVO(this.getHostGuid());
- host.setName("devcloud xen host");
+ host.setName("devcloud xenserver host");
host.setType(Host.Type.Routing);
host.setPrivateIpAddress(this.getHostIp());
host.setDataCenterId(dc.getId());
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
index fcac783..8c7b06d 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
@@ -157,7 +157,7 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), "10.223.0.1", "10.233.2.2/25", 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(Hypervisor.HypervisorType.XenServer.toString());
cluster.setClusterType(Cluster.ClusterType.CloudManaged);
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java
index 5fe1d39..0fc6f59 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java
@@ -148,17 +148,17 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), this.getHostGateway(), this.getHostCidr(), 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(HypervisorType.XenServer.toString());
cluster.setClusterType(ClusterType.CloudManaged);
cluster.setManagedState(ManagedState.Managed);
cluster = clusterDao.persist(cluster);
clusterId = cluster.getId();
- // create xen host
+ // create xenserver host
host = new HostVO(this.getHostGuid());
- host.setName("devcloud xen host");
+ host.setName("devcloud xenserver host");
host.setType(Host.Type.Routing);
host.setPrivateIpAddress(this.getHostIp());
host.setDataCenterId(dc.getId());
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
index 4a6151d..c274d76 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
@@ -167,17 +167,17 @@
HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), this.getHostGateway(), this.getHostCidr(), 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
- // create xen cluster
+ // create xenserver cluster
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
cluster.setHypervisorType(this.getHypervisor().toString());
cluster.setClusterType(ClusterType.CloudManaged);
cluster.setManagedState(ManagedState.Managed);
cluster = clusterDao.persist(cluster);
clusterId = cluster.getId();
- // create xen host
+ // create xenserver host
host = new HostVO(this.getHostGuid());
- host.setName("devcloud xen host");
+ host.setName("devcloud xenserver host");
host.setType(Host.Type.Routing);
host.setPrivateIpAddress(this.getHostIp());
host.setDataCenterId(dc.getId());
diff --git a/engine/storage/integration-test/test/resources/component.xml b/engine/storage/integration-test/test/resources/component.xml
index d7fe903..0981841 100644
--- a/engine/storage/integration-test/test/resources/component.xml
+++ b/engine/storage/integration-test/test/resources/component.xml
@@ -109,7 +109,7 @@
</bean>
- <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+ <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xenserver.discoverer.XcpServerDiscoverer">
<property name="name" value="XCP Agent"/>
</bean>
diff --git a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
index 304f959..f06b43e 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
@@ -150,7 +150,7 @@
}
protected EndPoint findEndPointForImageMove(DataStore srcStore, DataStore destStore) {
- // find any xen/kvm host in the scope
+ // find any xenserver/kvm host in the scope
Scope srcScope = srcStore.getScope();
Scope destScope = destStore.getScope();
Scope selectedScope = null;
diff --git a/engine/storage/storage.ucls b/engine/storage/storage.ucls
index 4de955d..197432e 100644
--- a/engine/storage/storage.ucls
+++ b/engine/storage/storage.ucls
@@ -70,9 +70,9 @@
</display>
</interface>
<class id="6" corner="BOTTOM_RIGHT" language="java"
- name="org.apache.cloudstack.storage.datastore.configurator.xen.XenNfsConfigurator"
+ name="org.apache.cloudstack.storage.datastore.configurator.xenserver.XenNfsConfigurator"
project="cloud-engine-storage-volume"
- file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java"
+ file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenNfsConfigurator.java"
binary="false">
<position height="-1" width="-1" x="1482" y="448"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">
@@ -81,9 +81,9 @@
</display>
</class>
<class id="7" corner="BOTTOM_RIGHT" language="java"
- name="org.apache.cloudstack.storage.datastore.configurator.xen.AbstractXenConfigurator"
+ name="org.apache.cloudstack.storage.datastore.configurator.xenserver.AbstractXenConfigurator"
project="cloud-engine-storage-volume"
- file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/AbstractXenConfigurator.java"
+ file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/AbstractXenConfigurator.java"
binary="false">
<position height="-1" width="-1" x="1536" y="278"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">
@@ -134,9 +134,9 @@
</display>
</class>
<class id="12" corner="BOTTOM_RIGHT" language="java"
- name="org.apache.cloudstack.storage.datastore.lifecycle.DefaultXenPrimaryDataStoreLifeCycle"
+ name="org.apache.cloudstack.storage.datastore.lifecycle.DefaultXenServerPrimaryDataStoreLifeCycle"
project="cloud-engine-storage-volume"
- file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java"
+ file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenServerPrimaryDataStoreLifeCycle.java"
binary="false">
<position height="-1" width="-1" x="724" y="1502"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">
@@ -156,9 +156,9 @@
</display>
</class>
<class id="14" corner="BOTTOM_RIGHT" language="java"
- name="org.apache.cloudstack.storage.datastore.configurator.xen.XenIscsiConfigurator"
+ name="org.apache.cloudstack.storage.datastore.configurator.xenserver.XenServerIscsiConfigurator"
project="cloud-engine-storage-volume"
- file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java"
+ file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenServerIscsiConfigurator.java"
binary="false">
<position height="-1" width="-1" x="1817" y="450"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">
diff --git a/plugins/hypervisors/xen/findbugsExcludeFilter.xml b/plugins/hypervisors/xen/findbugsExcludeFilter.xml
deleted file mode 100644
index b341889..0000000
--- a/plugins/hypervisors/xen/findbugsExcludeFilter.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<FindBugsFilter>
-
- <!-- Match all XYZ violations. -->
- <Match>
- <Class name="CitrixResourceBase" />
- <Method name="getStatsRawXML" />
- <Bug pattern="DM_DEFAULT_ENCODING" />
- </Match>
-
-</FindBugsFilter>
diff --git a/plugins/hypervisors/xen/pom.xml b/plugins/hypervisors/xen/pom.xml
deleted file mode 100644
index 0204157..0000000
--- a/plugins/hypervisors/xen/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
- license agreements. See the NOTICE file distributed with this work for additional
- information regarding copyright ownership. The ASF licenses this file to
- you under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of
- the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
- by applicable law or agreed to in writing, software distributed under the
- License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- OF ANY KIND, either express or implied. See the License for the specific
- language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <artifactId>cloud-plugin-hypervisor-xen</artifactId>
- <name>Apache CloudStack Plugin - Hypervisor Xen</name>
- <parent>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloudstack-plugins</artifactId>
- <version>4.5.0-SNAPSHOT</version>
- <relativePath>../../pom.xml</relativePath>
- </parent>
- <dependencies>
- <dependency>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-engine-storage</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-plugin-network-ovs</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>net.java.dev.vcc.thirdparty</groupId>
- <artifactId>xen-api</artifactId>
- <version>${cs.xapi.version}</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/module.properties b/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/module.properties
deleted file mode 100644
index c6c91f6..0000000
--- a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/module.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-name=xenserver-compute
-parent=compute
\ No newline at end of file
diff --git a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml b/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml
deleted file mode 100644
index e024ad8..0000000
--- a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
- license agreements. See the NOTICE file distributed with this work for additional
- information regarding copyright ownership. The ASF licenses this file to
- you under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of
- the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
- by applicable law or agreed to in writing, software distributed under the
- License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- OF ANY KIND, either express or implied. See the License for the specific
- language governing permissions and limitations under the License. -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
-
- <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
- <property name="name" value="XenServerFenceBuilder" />
- </bean>
-
- <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
- <property name="name" value="XenServerGuru" />
- </bean>
-
-</beans>
diff --git a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/module.properties b/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/module.properties
deleted file mode 100644
index 10d0ecd..0000000
--- a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/module.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-name=xenserver-discoverer
-parent=discoverer
\ No newline at end of file
diff --git a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml b/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml
deleted file mode 100644
index c301007..0000000
--- a/plugins/hypervisors/xen/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
- license agreements. See the NOTICE file distributed with this work for additional
- information regarding copyright ownership. The ASF licenses this file to
- you under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of
- the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
- by applicable law or agreed to in writing, software distributed under the
- License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- OF ANY KIND, either express or implied. See the License for the specific
- language governing permissions and limitations under the License. -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
-
- <bean id="XcpServerDiscoverer"
- class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
- <property name="name" value="XCP Agent" />
- </bean>
-
-</beans>
diff --git a/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java b/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
deleted file mode 100755
index 28cba2b..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/ha/XenServerFencer.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.ha;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.FenceAnswer;
-import com.cloud.agent.api.FenceCommand;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.Status;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.resource.ResourceManager;
-import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.VirtualMachine;
-
-@Local(value = FenceBuilder.class)
-public class XenServerFencer extends AdapterBase implements FenceBuilder {
- private static final Logger s_logger = Logger.getLogger(XenServerFencer.class);
-
- @Inject
- HostDao _hostDao;
- @Inject
- AgentManager _agentMgr;
- @Inject
- ResourceManager _resourceMgr;
-
- @Override
- public Boolean fenceOff(VirtualMachine vm, Host host) {
- if (host.getHypervisorType() != HypervisorType.XenServer) {
- s_logger.debug("Don't know how to fence non XenServer hosts " + host.getHypervisorType());
- return null;
- }
-
- List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId());
- FenceCommand fence = new FenceCommand(vm, host);
-
- for (HostVO h : hosts) {
- if (h.getHypervisorType() == HypervisorType.XenServer) {
- if (h.getStatus() != Status.Up) {
- continue;
- }
- if (h.getId() == host.getId()) {
- continue;
- }
- FenceAnswer answer;
- try {
- Answer ans = _agentMgr.send(h.getId(), fence);
- if (!(ans instanceof FenceAnswer)) {
- s_logger.debug("Answer is not fenceanswer. Result = " + ans.getResult() + "; Details = " + ans.getDetails());
- continue;
- }
- answer = (FenceAnswer)ans;
- } catch (AgentUnavailableException e) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
- }
- continue;
- } catch (OperationTimedoutException e) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
- }
- continue;
- }
- if (answer != null && answer.getResult()) {
- return true;
- }
- }
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Unable to fence off " + vm.toString() + " on " + host.toString());
- }
-
- return false;
- }
-
- public XenServerFencer() {
- super();
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- _name = name;
- return true;
- }
-
- @Override
- public String getName() {
- return _name;
- }
-
- @Override
- public boolean start() {
- return true;
- }
-
- @Override
- public boolean stop() {
- return true;
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
deleted file mode 100644
index 89e4ab5..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.DiskTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.GuestOSVO;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.dao.GuestOSDao;
-import com.cloud.storage.dao.VolumeDao;
-import com.cloud.template.VirtualMachineTemplate.BootloaderType;
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineProfile;
-
-import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.DettachCommand;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-
-@Local(value = HypervisorGuru.class)
-public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru {
- @Inject
- GuestOSDao _guestOsDao;
- @Inject
- EndPointSelector endPointSelector;
- @Inject
- HostDao hostDao;
- @Inject
- VolumeDao _volumeDao;
- @Inject
- PrimaryDataStoreDao _storagePoolDao;
- @Inject
- VolumeDataFactory _volFactory;
-
- protected XenServerGuru() {
- super();
- }
-
- @Override
- public HypervisorType getHypervisorType() {
- return HypervisorType.XenServer;
- }
-
- @Override
- public VirtualMachineTO implement(VirtualMachineProfile vm) {
- BootloaderType bt = BootloaderType.PyGrub;
- if (vm.getBootLoaderType() == BootloaderType.CD) {
- bt = vm.getBootLoaderType();
- }
- VirtualMachineTO to = toVirtualMachineTO(vm);
- to.setBootloader(bt);
-
- // Determine the VM's OS description
- GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
- to.setOs(guestOS.getDisplayName());
-
- return to;
- }
-
- @Override
- public boolean trackVmHostChange() {
- return true;
- }
-
- @Override
- public List<Command> finalizeExpungeVolumes(VirtualMachine vm) {
- List<Command> commands = new ArrayList<Command>();
-
- List<VolumeVO> volumes = _volumeDao.findByInstance(vm.getId());
-
- // it's OK in this case to send a detach command to the host for a root volume as this
- // will simply lead to the SR that supports the root volume being removed
- if (volumes != null) {
- for (VolumeVO volume : volumes) {
- StoragePoolVO storagePool = _storagePoolDao.findById(volume.getPoolId());
-
- // storagePool should be null if we are expunging a volume that was never
- // attached to a VM that was started (the "trick" for storagePool to be null
- // is that none of the VMs this volume may have been attached to were ever started,
- // so the volume was never assigned to a storage pool)
- if (storagePool != null && storagePool.isManaged()) {
- DataTO volTO = _volFactory.getVolume(volume.getId()).getTO();
- DiskTO disk = new DiskTO(volTO, volume.getDeviceId(), volume.getPath(), volume.getVolumeType());
-
- DettachCommand cmd = new DettachCommand(disk, vm.getInstanceName());
-
- cmd.setManaged(true);
-
- cmd.setStorageHost(storagePool.getHostAddress());
- cmd.setStoragePort(storagePool.getPort());
-
- cmd.set_iScsiName(volume.get_iScsiName());
-
- commands.add(cmd);
- }
- }
- }
-
- return commands;
- }
-
- @Override
- public Pair<Boolean, Long> getCommandHostDelegation(long hostId, Command cmd) {
- if (cmd instanceof CopyCommand) {
- CopyCommand cpyCommand = (CopyCommand)cmd;
- DataTO srcData = cpyCommand.getSrcTO();
- DataTO destData = cpyCommand.getDestTO();
-
- if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.TEMPLATE) {
- DataStoreTO srcStore = srcData.getDataStore();
- DataStoreTO destStore = destData.getDataStore();
- if (srcStore instanceof NfsTO && destStore instanceof NfsTO) {
- HostVO host = hostDao.findById(hostId);
- EndPoint ep = endPointSelector.selectHypervisorHost(new ZoneScope(host.getDataCenterId()));
- host = hostDao.findById(ep.getId());
- hostDao.loadDetails(host);
- String snapshotHotFixVersion = host.getDetail(XenserverConfigs.XS620HotFix);
- if (snapshotHotFixVersion != null && snapshotHotFixVersion.equalsIgnoreCase(XenserverConfigs.XSHotFix62ESP1004)) {
- return new Pair<Boolean, Long>(Boolean.TRUE, new Long(ep.getId()));
- }
- }
- }
- }
- return new Pair<Boolean, Long>(Boolean.FALSE, new Long(hostId));
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
deleted file mode 100755
index 2cb6f77..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
+++ /dev/null
@@ -1,726 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.discoverer;
-
-import java.net.InetAddress;
-import java.net.URI;
-import java.net.UnknownHostException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-import javax.persistence.EntityExistsException;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.Listener;
-import com.cloud.agent.api.AgentControlAnswer;
-import com.cloud.agent.api.AgentControlCommand;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.SetupAnswer;
-import com.cloud.agent.api.SetupCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.alert.AlertManager;
-import com.cloud.configuration.Config;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.ConnectionException;
-import com.cloud.exception.DiscoveredWithErrorException;
-import com.cloud.exception.DiscoveryException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.HostEnvironment;
-import com.cloud.host.HostInfo;
-import com.cloud.host.HostVO;
-import com.cloud.host.Status;
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.xen.resource.CitrixResourceBase;
-import com.cloud.hypervisor.xen.resource.XcpOssResource;
-import com.cloud.hypervisor.xen.resource.XcpServer16Resource;
-import com.cloud.hypervisor.xen.resource.XcpServerResource;
-import com.cloud.hypervisor.xen.resource.XenServer56FP1Resource;
-import com.cloud.hypervisor.xen.resource.XenServer56Resource;
-import com.cloud.hypervisor.xen.resource.XenServer56SP2Resource;
-import com.cloud.hypervisor.xen.resource.XenServer600Resource;
-import com.cloud.hypervisor.xen.resource.XenServer602Resource;
-import com.cloud.hypervisor.xen.resource.XenServer610Resource;
-import com.cloud.hypervisor.xen.resource.XenServer620Resource;
-import com.cloud.hypervisor.xen.resource.XenServer620SP1Resource;
-import com.cloud.hypervisor.xen.resource.XenServerConnectionPool;
-import com.cloud.hypervisor.xen.resource.Xenserver625Resource;
-import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import com.cloud.resource.Discoverer;
-import com.cloud.resource.DiscovererBase;
-import com.cloud.resource.ResourceStateAdapter;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.UnableDeleteHostException;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Storage.TemplateType;
-import com.cloud.storage.VMTemplateVO;
-import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.user.Account;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.db.QueryBuilder;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.exception.HypervisorVersionChangedException;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.Session;
-import com.xensource.xenapi.PoolPatch;
-import com.xensource.xenapi.HostPatch;
-import com.xensource.xenapi.Types.SessionAuthenticationFailed;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.Types.UuidInvalid;
-
-
-@Local(value = Discoverer.class)
-public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
- private static final Logger s_logger = Logger.getLogger(XcpServerDiscoverer.class);
- protected String _publicNic;
- protected String _privateNic;
- protected String _storageNic1;
- protected String _storageNic2;
- protected int _wait;
- protected XenServerConnectionPool _connPool;
- protected boolean _checkHvm;
- protected String _guestNic;
- protected boolean _setupMultipath;
- protected String _instance;
- private String xs620snapshothotfix = "Xenserver-Vdi-Copy-HotFix";
-
- @Inject
- protected AlertManager _alertMgr;
- @Inject
- protected AgentManager _agentMgr;
- @Inject
- VMTemplateDao _tmpltDao;
- @Inject
- HostPodDao _podDao;
-
- protected XcpServerDiscoverer() {
- }
-
- void setClusterGuid(ClusterVO cluster, String guid) {
- cluster.setGuid(guid);
- try {
- _clusterDao.update(cluster.getId(), cluster);
- } catch (EntityExistsException e) {
- QueryBuilder<ClusterVO> sc = QueryBuilder.create(ClusterVO.class);
- sc.and(sc.entity().getGuid(), Op.EQ, guid);
- List<ClusterVO> clusters = sc.list();
- ClusterVO clu = clusters.get(0);
- List<HostVO> clusterHosts = _resourceMgr.listAllHostsInCluster(clu.getId());
- if (clusterHosts == null || clusterHosts.size() == 0) {
- clu.setGuid(null);
- _clusterDao.update(clu.getId(), clu);
- _clusterDao.update(cluster.getId(), cluster);
- return;
- }
- throw e;
- }
- }
-
- protected boolean poolHasHotFix(Connection conn, String hostIp, String hotFixUuid) {
- try {
- Map<Host, Host.Record> hosts = Host.getAllRecords(conn);
- for (Map.Entry<Host, Host.Record> entry : hosts.entrySet()) {
-
- Host.Record re = entry.getValue();
- if (!re.address.equalsIgnoreCase(hostIp)){
- continue;
- }
- Set<HostPatch> patches = re.patches;
- PoolPatch poolPatch = PoolPatch.getByUuid(conn, hotFixUuid);
- for(HostPatch patch : patches) {
- PoolPatch pp = patch.getPoolPatch(conn);
- if (pp.equals(poolPatch) && patch.getApplied(conn)) {
- s_logger.debug("host " + hostIp + " does have " + hotFixUuid +" Hotfix.");
- return true;
- }
- }
- }
- return false;
- } catch (UuidInvalid e) {
- s_logger.debug("host " + hostIp + " doesn't have " + hotFixUuid + " Hotfix");
- } catch (Exception e) {
- s_logger.debug("can't get patches information, consider it doesn't have " + hotFixUuid + " Hotfix");
- }
- return false;
- }
-
-
-
- @Override
- public Map<? extends ServerResource, Map<String, String>>
- find(long dcId, Long podId, Long clusterId, URI url, String username, String password, List<String> hostTags) throws DiscoveryException {
- Map<CitrixResourceBase, Map<String, String>> resources = new HashMap<CitrixResourceBase, Map<String, String>>();
- Connection conn = null;
- if (!url.getScheme().equals("http")) {
- String msg = "urlString is not http so we're not taking care of the discovery for this: " + url;
- s_logger.debug(msg);
- return null;
- }
- if (clusterId == null) {
- String msg = "must specify cluster Id when add host";
- s_logger.debug(msg);
- throw new RuntimeException(msg);
- }
-
- if (podId == null) {
- String msg = "must specify pod Id when add host";
- s_logger.debug(msg);
- throw new RuntimeException(msg);
- }
-
- ClusterVO cluster = _clusterDao.findById(clusterId);
- if (cluster == null || cluster.getHypervisorType() != HypervisorType.XenServer) {
- if (s_logger.isInfoEnabled())
- s_logger.info("invalid cluster id or cluster is not for XenServer hypervisors");
- return null;
- }
-
- try {
- String hostname = url.getHost();
- InetAddress ia = InetAddress.getByName(hostname);
- String hostIp = ia.getHostAddress();
- Queue<String> pass = new LinkedList<String>();
- pass.add(password);
- conn = _connPool.getConnect(hostIp, username, pass);
- if (conn == null) {
- String msg = "Unable to get a connection to " + url;
- s_logger.debug(msg);
- throw new DiscoveryException(msg);
- }
-
- Set<Pool> pools = Pool.getAll(conn);
- Pool pool = pools.iterator().next();
- Pool.Record pr = pool.getRecord(conn);
- String poolUuid = pr.uuid;
- Map<Host, Host.Record> hosts = Host.getAllRecords(conn);
- String latestHotFix = "";
- if (poolHasHotFix(conn, hostIp, XenserverConfigs.XSHotFix62ESP1004)) {
- latestHotFix = XenserverConfigs.XSHotFix62ESP1004;
- } else if (poolHasHotFix(conn, hostIp, XenserverConfigs.XSHotFix62ESP1)) {
- latestHotFix = XenserverConfigs.XSHotFix62ESP1;
- }
-
- /*set cluster hypervisor type to xenserver*/
- ClusterVO clu = _clusterDao.findById(clusterId);
- if (clu.getGuid() == null) {
- setClusterGuid(clu, poolUuid);
- } else {
- List<HostVO> clusterHosts = _resourceMgr.listAllHostsInCluster(clusterId);
- if (clusterHosts != null && clusterHosts.size() > 0) {
- if (!clu.getGuid().equals(poolUuid)) {
- String msg = "Please join the host " + hostIp + " to XS pool "
- + clu.getGuid() + " through XC/XS before adding it through CS UI";
- s_logger.warn(msg);
- throw new DiscoveryException(msg);
- }
- } else {
- setClusterGuid(clu, poolUuid);
- }
- }
- // can not use this conn after this point, because this host may join a pool, this conn is retired
- if (conn != null) {
- try {
- Session.logout(conn);
- } catch (Exception e) {
- }
- conn.dispose();
- conn = null;
- }
-
- poolUuid = clu.getGuid();
- _clusterDao.update(clusterId, clu);
-
- if (_checkHvm) {
- for (Map.Entry<Host, Host.Record> entry : hosts.entrySet()) {
- Host.Record record = entry.getValue();
-
- boolean support_hvm = false;
- for (String capability : record.capabilities) {
- if (capability.contains("hvm")) {
- support_hvm = true;
- break;
- }
- }
- if (!support_hvm) {
- String msg = "Unable to add host " + record.address + " because it doesn't support hvm";
- _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, msg, msg);
- s_logger.debug(msg);
- throw new RuntimeException(msg);
- }
- }
- }
-
- for (Map.Entry<Host, Host.Record> entry : hosts.entrySet()) {
- Host.Record record = entry.getValue();
- String hostAddr = record.address;
-
- String prodVersion = record.softwareVersion.get("product_version");
- if (prodVersion == null) {
- prodVersion = record.softwareVersion.get("platform_version");
- }
- String xenVersion = record.softwareVersion.get("xen");
- String hostOS = record.softwareVersion.get("product_brand");
- if (hostOS == null) {
- hostOS = record.softwareVersion.get("platform_name");
- }
-
- String hostOSVer = prodVersion;
- String hostKernelVer = record.softwareVersion.get("linux");
-
- if (_resourceMgr.findHostByGuid(record.uuid) != null) {
- s_logger.debug("Skipping " + record.address + " because " + record.uuid + " is already in the database.");
- continue;
- }
-
- CitrixResourceBase resource = createServerResource(dcId, podId, record, latestHotFix);
- s_logger.info("Found host " + record.hostname + " ip=" + record.address + " product version=" + prodVersion);
-
- Map<String, String> details = new HashMap<String, String>();
- Map<String, Object> params = new HashMap<String, Object>();
- details.put("url", hostAddr);
- details.put("username", username);
- params.put("username", username);
- details.put("password", password);
- params.put("password", password);
- params.put("zone", Long.toString(dcId));
- params.put("guid", record.uuid);
- params.put("pod", podId.toString());
- params.put("cluster", clusterId.toString());
- params.put("pool", poolUuid);
- params.put("ipaddress", record.address);
-
- details.put(HostInfo.HOST_OS, hostOS);
- details.put(HostInfo.HOST_OS_VERSION, hostOSVer);
- details.put(HostInfo.HOST_OS_KERNEL_VERSION, hostKernelVer);
- details.put(HostInfo.HYPERVISOR_VERSION, xenVersion);
-
- String privateNetworkLabel = _networkMgr.getDefaultManagementTrafficLabel(dcId, HypervisorType.XenServer);
- String storageNetworkLabel = _networkMgr.getDefaultStorageTrafficLabel(dcId, HypervisorType.XenServer);
-
- if (!params.containsKey("private.network.device") && privateNetworkLabel != null) {
- params.put("private.network.device", privateNetworkLabel);
- details.put("private.network.device", privateNetworkLabel);
- }
-
- if (!params.containsKey("storage.network.device1") && storageNetworkLabel != null) {
- params.put("storage.network.device1", storageNetworkLabel);
- details.put("storage.network.device1", storageNetworkLabel);
- }
-
- DataCenterVO zone = _dcDao.findById(dcId);
- boolean securityGroupEnabled = zone.isSecurityGroupEnabled();
- params.put("securitygroupenabled", Boolean.toString(securityGroupEnabled));
-
- params.put("wait", Integer.toString(_wait));
- details.put("wait", Integer.toString(_wait));
- params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
- params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString()));
- params.put(Config.XenHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenHeartBeatInterval.toString()));
- params.put(Config.InstanceName.toString().toLowerCase(), _instance);
- details.put(Config.InstanceName.toString().toLowerCase(), _instance);
- try {
- resource.configure("Xen Server", params);
- } catch (ConfigurationException e) {
- _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, "Unable to add " + record.address, "Error is " + e.getMessage());
- s_logger.warn("Unable to instantiate " + record.address, e);
- continue;
- }
- resource.start();
- resources.put(resource, details);
- }
- } catch (SessionAuthenticationFailed e) {
- throw new DiscoveredWithErrorException("Authentication error");
- } catch (XenAPIException e) {
- s_logger.warn("XenAPI exception", e);
- return null;
- } catch (XmlRpcException e) {
- s_logger.warn("Xml Rpc Exception", e);
- return null;
- } catch (UnknownHostException e) {
- s_logger.warn("Unable to resolve the host name", e);
- return null;
- } catch (Exception e) {
- s_logger.debug("other exceptions: " + e.toString(), e);
- return null;
- }
- return resources;
- }
-
- String getPoolUuid(Connection conn) throws XenAPIException, XmlRpcException {
- Map<Pool, Pool.Record> pools = Pool.getAllRecords(conn);
- assert pools.size() == 1 : "Pools size is " + pools.size();
- return pools.values().iterator().next().uuid;
- }
-
- protected void addSamePool(Connection conn, Map<CitrixResourceBase, Map<String, String>> resources) throws XenAPIException, XmlRpcException {
- Map<Pool, Pool.Record> hps = Pool.getAllRecords(conn);
- assert (hps.size() == 1) : "How can it be more than one but it's actually " + hps.size();
-
- // This is the pool.
- String poolUuid = hps.values().iterator().next().uuid;
-
- for (Map<String, String> details : resources.values()) {
- details.put("pool", poolUuid);
- }
- }
-
-
- protected CitrixResourceBase createServerResource(long dcId, Long podId, Host.Record record, String hotfix) {
- String prodBrand = record.softwareVersion.get("product_brand");
- if (prodBrand == null) {
- prodBrand = record.softwareVersion.get("platform_name").trim();
- } else {
- prodBrand = prodBrand.trim();
- }
-
- String prodVersion = record.softwareVersion.get("product_version");
- if (prodVersion == null) {
- prodVersion = record.softwareVersion.get("platform_version").trim();
- } else {
- prodVersion = prodVersion.trim();
- }
-
- // Xen Cloud Platform group of hypervisors
- if (prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4"))) {
- return new XcpServerResource();
- } else if (prodBrand.equals("XCP") && prodVersion.startsWith("1.6")) {
- return new XcpServer16Resource();
- } // Citrix Xenserver group of hypervisors
- else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.0"))
- return new XenServer56Resource();
- else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.0"))
- return new XenServer600Resource();
- else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.2"))
- return new XenServer602Resource();
- else if (prodBrand.equals("XenServer") && prodVersion.equals("6.1.0"))
- return new XenServer610Resource();
- else if (prodBrand.equals("XenServer") && prodVersion.equals("6.2.0")) {
- if (hotfix.equals(XenserverConfigs.XSHotFix62ESP1004)) {
- return new Xenserver625Resource();
- } else if (hotfix.equals(XenserverConfigs.XSHotFix62ESP1)) {
- return new XenServer620SP1Resource();
- } else {
- return new XenServer620Resource();
- }
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.100")) {
- String prodVersionTextShort = record.softwareVersion.get("product_version_text_short").trim();
- if ("5.6 SP2".equals(prodVersionTextShort)) {
- return new XenServer56SP2Resource();
- } else if ("5.6 FP1".equals(prodVersionTextShort)) {
- return new XenServer56FP1Resource();
- }
- } else if (prodBrand.equals("XCP_Kronos")) {
- return new XcpOssResource();
- }
-
- String msg =
- "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, XenServer 5.6 FP1, XenServer 5.6 SP2, Xenserver 6.0, 6.0.2, 6.1.0, 6.2.0 but this one is " +
- prodBrand + " " + prodVersion;
- _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, msg, msg);
- s_logger.debug(msg);
- throw new RuntimeException(msg);
- }
-
- protected void serverConfig() {
- String value = _params.get(Config.XenSetupMultipath.key());
- _setupMultipath = Boolean.parseBoolean(value);
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- super.configure(name, params);
- serverConfig();
-
- _publicNic = _params.get(Config.XenPublicNetwork.key());
- _privateNic = _params.get(Config.XenPrivateNetwork.key());
-
- _storageNic1 = _params.get(Config.XenStorageNetwork1.key());
- _storageNic2 = _params.get(Config.XenStorageNetwork2.key());
-
- _guestNic = _params.get(Config.XenGuestNetwork.key());
-
- String value = _params.get(Config.XapiWait.toString());
- _wait = NumbersUtil.parseInt(value, Integer.parseInt(Config.XapiWait.getDefaultValue()));
-
- _instance = _params.get(Config.InstanceName.key());
-
- value = _params.get(Config.XenSetupMultipath.key());
- Boolean.parseBoolean(value);
-
- value = _params.get("xen.check.hvm");
- _checkHvm = false;
- _connPool = XenServerConnectionPool.getInstance();
-
- _agentMgr.registerForHostEvents(this, true, false, true);
-
- createXsToolsISO();
- _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
- return true;
- }
-
- @Override
- public boolean matchHypervisor(String hypervisor) {
- if (hypervisor == null)
- return true;
- return Hypervisor.HypervisorType.XenServer.toString().equalsIgnoreCase(hypervisor);
- }
-
- @Override
- public Hypervisor.HypervisorType getHypervisorType() {
- return Hypervisor.HypervisorType.XenServer;
- }
-
- @Override
- public void postDiscovery(List<HostVO> hosts, long msId) throws DiscoveryException {
- //do nothing
- }
-
- @Override
- public int getTimeout() {
- return 0;
- }
-
- @Override
- public boolean isRecurring() {
- return false;
- }
-
- @Override
- public boolean processAnswers(long agentId, long seq, Answer[] answers) {
- return false;
- }
-
- @Override
- public boolean processCommands(long agentId, long seq, Command[] commands) {
- return false;
- }
-
- private void createXsToolsISO() {
- String isoName = "xs-tools.iso";
- VMTemplateVO tmplt = _tmpltDao.findByTemplateName(isoName);
- Long id;
- if (tmplt == null) {
- id = _tmpltDao.getNextInSequence(Long.class, "id");
- VMTemplateVO template =
- VMTemplateVO.createPreHostIso(id, isoName, isoName, ImageFormat.ISO, true, true, TemplateType.PERHOST, null, null, true, 64, Account.ACCOUNT_ID_SYSTEM,
- null, "xen-pv-drv-iso", false, 1, false, HypervisorType.XenServer);
- _tmpltDao.persist(template);
- } else {
- id = tmplt.getId();
- tmplt.setTemplateType(TemplateType.PERHOST);
- tmplt.setUrl(null);
- _tmpltDao.update(id, tmplt);
- }
- }
-
- @Override
- public void processConnect(com.cloud.host.Host agent, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
- if (!(cmd instanceof StartupRoutingCommand)) {
- return;
- }
- long agentId = agent.getId();
-
- StartupRoutingCommand startup = (StartupRoutingCommand)cmd;
- if (startup.getHypervisorType() != HypervisorType.XenServer) {
- s_logger.debug("Not XenServer so moving on.");
- return;
- }
-
- HostVO host = _hostDao.findById(agentId);
-
- ClusterVO cluster = _clusterDao.findById(host.getClusterId());
- if (cluster.getGuid() == null) {
- cluster.setGuid(startup.getPool());
- _clusterDao.update(cluster.getId(), cluster);
- } else if (!cluster.getGuid().equals(startup.getPool())) {
- String msg = "pool uuid for cluster " + cluster.getId() + " changed from " + cluster.getGuid() + " to " + startup.getPool();
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- String resource = null;
- Map<String, String> details = startup.getHostDetails();
- String prodBrand = details.get("product_brand").trim();
- String prodVersion = details.get("product_version").trim();
-
- if (prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4"))) {
- resource = XcpServerResource.class.getName();
- } else if (prodBrand.equals("XCP") && prodVersion.startsWith("1.6")) {
- resource = XcpServer16Resource.class.getName();
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) {
- resource = XenServer56Resource.class.getName();
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.0")) {
- resource = XenServer600Resource.class.getName();
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.2")) {
- resource = XenServer602Resource.class.getName();
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.1.0")) {
- resource = XenServer610Resource.class.getName();
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.2.0")) {
- String hotfix = details.get(XenserverConfigs.XS620HotFix);
- if (hotfix != null && hotfix.equalsIgnoreCase(XenserverConfigs.XSHotFix62ESP1004)) {
- resource = Xenserver625Resource.class.getName();
- } else if (hotfix != null && hotfix.equalsIgnoreCase(XenserverConfigs.XSHotFix62ESP1)){
- resource = XenServer620SP1Resource.class.getName();
- } else {
- resource = XenServer620Resource.class.getName();
- }
- } else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.100")) {
- String prodVersionTextShort = details.get("product_version_text_short").trim();
- if ("5.6 SP2".equals(prodVersionTextShort)) {
- resource = XenServer56SP2Resource.class.getName();
- } else if ("5.6 FP1".equals(prodVersionTextShort)) {
- resource = XenServer56FP1Resource.class.getName();
- }
- } else if (prodBrand.equals("XCP_Kronos")) {
- resource = XcpOssResource.class.getName();
- }
-
- if (resource == null) {
- String msg =
- "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, 5.6 FP1, 5.6 SP2 and Xenserver 6.0 , 6.0.2, 6.1.0, 6.2.0 but this one is " +
- prodBrand + " " + prodVersion;
- s_logger.debug(msg);
- throw new RuntimeException(msg);
- }
- if (!resource.equals(host.getResource())) {
- String msg = "host " + host.getPrivateIpAddress() + " changed from " + host.getResource() + " to " + resource;
- s_logger.debug(msg);
- host.setResource(resource);
- host.setSetup(false);
- _hostDao.update(agentId, host);
- throw new HypervisorVersionChangedException(msg);
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Setting up host " + agentId);
- }
- HostEnvironment env = new HostEnvironment();
-
- SetupCommand setup = new SetupCommand(env);
- if (_setupMultipath) {
- setup.setMultipathOn();
- }
- if (!host.isSetup()) {
- setup.setNeedSetup(true);
- }
-
- try {
- Answer answer = _agentMgr.send(agentId, setup);
- if (answer != null && answer.getResult() && answer instanceof SetupAnswer) {
- host.setSetup(true);
- host.setLastPinged((System.currentTimeMillis() >> 10) - 5 * 60);
- _hostDao.update(host.getId(), host);
- if (((SetupAnswer)answer).needReconnect()) {
- throw new ConnectionException(false, "Reinitialize agent after setup.");
- }
- return;
- } else {
- s_logger.warn("Unable to setup agent " + agentId + " due to " + ((answer != null) ? answer.getDetails() : "return null"));
- }
- } catch (AgentUnavailableException e) {
- s_logger.warn("Unable to setup agent " + agentId + " because it became unavailable.", e);
- } catch (OperationTimedoutException e) {
- s_logger.warn("Unable to setup agent " + agentId + " because it timed out", e);
- }
- throw new ConnectionException(true, "Reinitialize agent after setup.");
- }
-
- @Override
- public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
- return null;
- }
-
- @Override
- public boolean processDisconnect(long agentId, Status state) {
- return false;
- }
-
- @Override
- public boolean processTimeout(long agentId, long seq) {
- return false;
- }
-
- @Override
- public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public HostVO createHostVOForDirectConnectAgent(HostVO host, StartupCommand[] startup, ServerResource resource, Map<String, String> details, List<String> hostTags) {
- StartupCommand firstCmd = startup[0];
- if (!(firstCmd instanceof StartupRoutingCommand)) {
- return null;
- }
-
- StartupRoutingCommand ssCmd = ((StartupRoutingCommand)firstCmd);
- if (ssCmd.getHypervisorType() != HypervisorType.XenServer) {
- return null;
- }
-
- HostPodVO pod = _podDao.findById(host.getPodId());
- DataCenterVO dc = _dcDao.findById(host.getDataCenterId());
- s_logger.info("Host: " + host.getName() + " connected with hypervisor type: " + HypervisorType.XenServer + ". Checking CIDR...");
- _resourceMgr.checkCIDR(pod, dc, ssCmd.getPrivateIpAddress(), ssCmd.getPrivateNetmask());
- return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.XenServer, details, hostTags);
- }
-
- @Override
- public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
- if (host.getType() != com.cloud.host.Host.Type.Routing || host.getHypervisorType() != HypervisorType.XenServer) {
- return null;
- }
-
- _resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage);
- return new DeleteHostAnswer(true);
- }
-
- @Override
- protected HashMap<String, Object> buildConfigParams(HostVO host) {
- HashMap<String, Object> params = super.buildConfigParams(host);
- DataCenterVO zone = _dcDao.findById(host.getDataCenterId());
- if (zone != null) {
- boolean securityGroupEnabled = zone.isSecurityGroupEnabled();
- params.put("securitygroupenabled", Boolean.toString(securityGroupEnabled));
- }
- return params;
- }
-
- @Override
- public boolean stop() {
- _resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
- return super.stop();
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixHelper.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixHelper.java
deleted file mode 100644
index dd5d360..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixHelper.java
+++ /dev/null
@@ -1,2404 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.apache.log4j.Logger;
-
-/**
- * Reduce bloat inside CitrixResourceBase
- *
- */
-public class CitrixHelper {
- private static final Logger s_logger = Logger.getLogger(CitrixHelper.class);
-
- private static final HashMap<String, String> Xcp100GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> Xcp160GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServerGuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer56FP1GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer56FP2GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer600GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer602GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer610GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer620GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, String> XenServer620SP1GuestOsMap = new HashMap<String, String>(70);
- private static final HashMap<String, MemoryValues> XenServer620GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer620SP1GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer610GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer602GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer600GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer56SP2GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final HashMap<String, MemoryValues> XenServer56FP1GuestOsMemoryMap = new HashMap<String, MemoryValues>(70);
- private static final ArrayList<String> GuestOsList = new ArrayList<String>(70);
-
- static {
- Xcp100GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- Xcp100GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- Xcp100GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- Xcp100GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- Xcp100GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- Xcp100GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- Xcp100GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 x64");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 x64");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "Other install media");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 x64");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- Xcp100GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- Xcp100GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- Xcp100GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp100GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- Xcp100GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- Xcp100GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- Xcp100GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- Xcp100GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- Xcp100GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit) (experimental)");
- Xcp100GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit) (experimental)");
- Xcp100GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- Xcp100GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- Xcp100GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- Xcp100GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- Xcp160GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 5.7 (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 5.7 (64-bit)", "CentOS 5 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 6.1 (32-bit)", "CentOS 6 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 6.1 (64-bit)", "CentOS 6 (64-bit)");
- Xcp160GuestOsMap.put("CentOS 6.2 (32-bit)", "CentOS 6 (32-bit)");
- Xcp160GuestOsMap.put("CentOS 6.2 (64-bit)", "CentOS 6 (64-bit)");
- Xcp160GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- Xcp160GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- Xcp160GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- Xcp160GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- Xcp160GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.7 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 5.7 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.1 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.1 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.2 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Oracle Enterprise Linux 6.2 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- Xcp160GuestOsMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 x64");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 x64");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "Other install media");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 x64");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- Xcp160GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- Xcp160GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- Xcp160GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- Xcp160GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- Xcp160GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- Xcp160GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- Xcp160GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- Xcp160GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- Xcp160GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- Xcp160GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- Xcp160GuestOsMap.put("Ubuntu 12.04 (32-bit)", "Ubuntu Precise Pangolin 12.04 (32-bit)");
- Xcp160GuestOsMap.put("Ubuntu 12.04 (64-bit)", "Ubuntu Precise Pangolin 12.04 (64-bit)");
- Xcp160GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- Xcp160GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- Xcp160GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- Xcp160GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServerGuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServerGuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServerGuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServerGuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5.0 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5.0 (64-bit)");
- XenServerGuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5.1 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5.1 (64-bit)");
- XenServerGuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5.2 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5.2 (64-bit)");
- XenServerGuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5.3 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5.3 (64-bit)");
- XenServerGuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5.4 (32-bit)");
- XenServerGuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5.4 (64-bit)");
- XenServerGuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- XenServerGuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Lenny 5.0 (32-bit)"); // This is to support Debian 6.0 in XS 5.6
- XenServerGuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Lenny 5.0 (32-bit)"); // This is to support Debian 7.0 in XS 5.6
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5.0 (32-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5.0 (64-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5.1 (32-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5.1 (64-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5.2 (32-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5.2 (64-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5.3 (32-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5.3 (64-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5.4 (32-bit)");
- XenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5.4 (64-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5.0 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5.0 (64-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5.1 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5.1 (64-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5.2 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5.2 (64-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5.3 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5.3 (64-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5.4 (32-bit)");
- XenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5.4 (64-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServerGuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServerGuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServerGuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServerGuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServerGuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServerGuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServerGuestOsMap.put("Windows 2000 SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
- XenServerGuestOsMap.put("Windows 2000 Server SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
- XenServerGuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServerGuestOsMap.put("Windows XP SP2 (32-bit)", "Windows XP SP2 (32-bit)");
- XenServerGuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServerGuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServerGuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServerGuestOsMap.put("Other PV (32-bit)", "CentOS 5.4 (32-bit)");
- XenServerGuestOsMap.put("Other PV (64-bit)", "CentOS 5.4 (64-bit)");
- }
-
- static {
- XenServer56FP1GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- XenServer56FP1GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer56FP1GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)"); // This is to support Debian 7.0 in XS 5.6FP1
- XenServer56FP1GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer56FP1GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer56FP1GuestOsMap.put("Windows 2000 SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows 2000 Server SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServer56FP1GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer56FP1GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit) (experimental)");
- XenServer56FP1GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer56FP1GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer56FP1GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP1GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer56FP1GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- // XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", new MemoryValues(512l, 16*1024l));// ??
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128*1024l)); //?
- //_xenServer56FP1GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56FP1GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56FP1GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56FP1GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 (32-bit)", new MemoryValues(256l, 64*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 (64-bit)", new MemoryValues(256l, 128*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 PAE (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2008 (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Windows Server 2008 (64-bit)", new MemoryValues(512l, 16*1024l));
- XenServer56FP1GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Windows Server 8 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Windows Vista (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer56FP1GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- // XenServer56FP1GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer56FP1GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer56FP1GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56FP1GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- // XenServer56FP1GuestOsMemoryMap.put("Other Linux (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56FP1GuestOsMemoryMap.put("Other Linux (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other CentOS (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other CentOS (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other Ubuntu (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other Ubuntu (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other SUSE Linux(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other SUSE Linux(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other PV (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56FP1GuestOsMemoryMap.put("Other PV (64-bit)", new MemoryValues(512l, 16*1024l));
- }
-
- static {
- XenServer56FP2GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- XenServer56FP2GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer56FP2GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- XenServer56FP2GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)"); // This is to support Debian 7.0 in XS 5.6FP2
- XenServer56FP2GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit) (experimental)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer56FP2GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer56FP2GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer56FP2GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer56FP2GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer56FP2GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer56FP2GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer56FP2GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServer56FP2GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer56FP2GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer56FP2GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServer56FP2GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer56FP2GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit) (experimental)");
- XenServer56FP2GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit) (experimental)");
- XenServer56FP2GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer56FP2GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer56FP2GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer56FP2GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer56SP2GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", new MemoryValues(512l, 16*1024l));// ??
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128*1024l)); //?
- //_xenServer56SP2GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56SP2GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56SP2GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer56SP2GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- // XenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 (32-bit)", new MemoryValues(256l, 64*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 (64-bit)", new MemoryValues(256l, 128*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 PAE (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2008 (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Windows Server 2008 (64-bit)", new MemoryValues(512l, 16*1024l));
- XenServer56SP2GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Windows Server 8 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Windows Vista (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer56SP2GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer56SP2GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer56SP2GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer56SP2GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer56SP2GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other Linux (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other Linux (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other CentOS (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other CentOS (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other Ubuntu (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other Ubuntu (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other SUSE Linux(32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other SUSE Linux(64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other PV (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer56SP2GuestOsMemoryMap.put("Other PV (64-bit)", new MemoryValues(512l, 16*1024l));
- }
-
- static {
- XenServer600GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- XenServer600GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6.0 (32-bit) (experimental)");
- XenServer600GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6.0 (64-bit) (experimental)");
- XenServer600GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- XenServer600GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer600GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer600GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)"); // This is to support Debian 7.0 in XS 6.0
- XenServer600GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6.0 (32-bit)");
- XenServer600GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6.0 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6.0 (32-bit)");
- XenServer600GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6.0 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- XenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- XenServer600GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer600GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer600GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServer600GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer600GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer600GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServer600GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer600GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- XenServer600GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- XenServer600GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
- XenServer600GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
- XenServer600GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other (32-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other (64-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other CentOS (32-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other CentOS (64-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other Ubuntu (32-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other Ubuntu (64-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other SUSE Linux(32-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other SUSE Linux(64-bit)", "Other install media");
- XenServer600GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer600GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer600GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- //_xenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", new MemoryValues(512l, 16*1024l));// ??
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- //_xenServer600GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128*1024l)); //?
- //_xenServer600GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer600GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer600GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer600GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- // XenServer600GuestOsMemoryMap.put("Windows Server 2003 (32-bit)", new MemoryValues(256l, 64*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 (64-bit)", new MemoryValues(256l, 128*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 PAE (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2008 (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Windows Server 2008 (64-bit)", new MemoryValues(512l, 16*1024l));
- XenServer600GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Windows Server 8 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Windows Vista (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer600GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer600GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer600GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer600GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer600GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer600GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- //_xenServer600GuestOsMemoryMap.put("Other Linux (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other Linux (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other CentOS (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other CentOS (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other Ubuntu (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other Ubuntu (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other SUSE Linux(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other SUSE Linux(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other PV (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer600GuestOsMemoryMap.put("Other PV (64-bit)", new MemoryValues(512l, 16*1024l));
- }
-
- static {
- XenServer602GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 5.7 (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 5.7 (64-bit)", "CentOS 5 (64-bit)");
- XenServer602GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6.0 (32-bit)");
- XenServer602GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6.0 (64-bit)");
- XenServer602GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
- XenServer602GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer602GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer602GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)"); // This is to support Debian 7.0 in XS 6.0.2
- XenServer602GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.7 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 5.7 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6.0 (32-bit)");
- XenServer602GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6.0 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6.0 (32-bit)");
- XenServer602GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6.0 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- XenServer602GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- XenServer602GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer602GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer602GuestOsMap.put("Windows 8 (32-bit)", "Windows 8 (32-bit) (experimental)");
- XenServer602GuestOsMap.put("Windows 8 (64-bit)", "Windows 8 (64-bit) (experimental)");
- XenServer602GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 PAE (32-bit)", "Windows Server 2003 PAE (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServer602GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer602GuestOsMap.put("Windows Server 8 (64-bit)", "Windows Server 8 (64-bit) (experimental)");
- XenServer602GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServer602GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer602GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- XenServer602GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- XenServer602GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
- XenServer602GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
- XenServer602GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other (32-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other (64-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other CentOS (32-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other CentOS (64-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other Ubuntu (32-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other Ubuntu (64-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other SUSE Linux(32-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other SUSE Linux(64-bit)", "Other install media");
- XenServer602GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer602GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer602GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Debian GNU/Linux 5.0 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- // XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", new MemoryValues(512l, 16*1024l));// ??
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- //_xenServer602GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128*1024l)); //?
- //_xenServer602GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer602GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer602GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer602GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 (32-bit)", new MemoryValues(256l, 64*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 (64-bit)", new MemoryValues(256l, 128*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 PAE (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2008 (32-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer602GuestOsMemoryMap.put("Windows Server 2008 (64-bit)", new MemoryValues(512l, 16*1024l));
- XenServer602GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Windows Server 8 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Windows Vista (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer602GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer602GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer602GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer602GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer602GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer602GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- // XenServer602GuestOsMemoryMap.put("Other Linux (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other Linux (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other CentOS (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other CentOS (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other Ubuntu (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other Ubuntu (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other SUSE Linux(32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other SUSE Linux(64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other PV (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer602GuestOsMemoryMap.put("Other PV (64-bit)", new MemoryValues(512l, 16*1024l));
- }
-
- static {
- XenServer610GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 5.7 (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 5.7 (64-bit)", "CentOS 5 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 6.1 (32-bit)", "CentOS 6 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 6.1 (64-bit)", "CentOS 6 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 6.2 (32-bit)", "CentOS 6 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 6.2 (64-bit)", "CentOS 6 (64-bit)");
- XenServer610GuestOsMap.put("CentOS 6.3 (32-bit)", "CentOS 6 (32-bit)");
- XenServer610GuestOsMap.put("CentOS 6.3 (64-bit)", "CentOS 6 (64-bit)");
- XenServer610GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer610GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer610GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Squeeze 6.0 (32-bit)"); // This is to support Debian 7.0 in XS 6.1
- XenServer610GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.7 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 5.7 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.1 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.1 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.2 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Oracle Enterprise Linux 6.2 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer610GuestOsMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- XenServer610GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- XenServer610GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer610GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer610GuestOsMap.put("Windows 8 (32-bit)", "Windows 8 (32-bit) (experimental)");
- XenServer610GuestOsMap.put("Windows 8 (64-bit)", "Windows 8 (64-bit) (experimental)");
- XenServer610GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 PAE (32-bit)", "Windows Server 2003 PAE (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
- XenServer610GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer610GuestOsMap.put("Windows Server 2012 (64-bit)", "Windows Server 2012 (64-bit) (experimental)");
- XenServer610GuestOsMap.put("Windows Server 8 (64-bit)", "Windows Server 2012 (64-bit) (experimental)");
- XenServer610GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
- XenServer610GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer610GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- XenServer610GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- XenServer610GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
- XenServer610GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
- XenServer610GuestOsMap.put("Ubuntu 12.04 (32-bit)", "Ubuntu Precise Pangolin 12.04 (32-bit)");
- XenServer610GuestOsMap.put("Ubuntu 12.04 (64-bit)", "Ubuntu Precise Pangolin 12.04 (64-bit)");
- XenServer610GuestOsMap.put("Ubuntu 11.04 (32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Ubuntu 11.04 (64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other (32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other (64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other CentOS (32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other CentOS (64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other Ubuntu (32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other Ubuntu (64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other SUSE Linux(32-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other SUSE Linux(64-bit)", "Other install media");
- XenServer610GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer610GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer620GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.7 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.7 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.8 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.8 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 5.9 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 5.9 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 6.1 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 6.1 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 6.2 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 6.2 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 6.3 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 6.3 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620GuestOsMap.put("CentOS 6.4 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620GuestOsMap.put("CentOS 6.4 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer620GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer620GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Wheezy 7.0 (32-bit)");
- XenServer620GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Wheezy 7.0 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.7 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.7 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.8 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.8 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.9 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 5.9 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.1 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.1 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.2 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.2 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.3 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.3 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.4 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Oracle Enterprise Linux 6.4 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.8 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.8 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.9 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 5.9 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.3 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.3 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.4 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620GuestOsMap.put("Red Hat Enterprise Linux 6.4 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 SP2 (32-bit)", "SUSE Linux Enterprise Server 11 SP2 (32-bit)");
- XenServer620GuestOsMap.put("SUSE Linux Enterprise Server 11 SP2 (64-bit)", "SUSE Linux Enterprise Server 11 SP2 (64-bit)");
- XenServer620GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer620GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer620GuestOsMap.put("Windows 7 SP1 (32-bit)", "Windows 7 SP1 (32-bit)");
- XenServer620GuestOsMap.put("Windows 7 SP1 (64-bit)", "Windows 7 SP1 (64-bit)");
- XenServer620GuestOsMap.put("Windows 8 (32-bit)", "Windows 8 (32-bit)");
- XenServer620GuestOsMap.put("Windows 8 (64-bit)", "Windows 8 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 SP2 (32-bit)", "Windows Server 2003 SP2 (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 SP2 (64-bit)", "Windows Server 2003 SP2 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 PAE (32-bit)", "Windows Server 2003 PAE (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2008 SP2 (32-bit)", "Windows Server 2008 SP2 (32-bit)");
- XenServer620GuestOsMap.put("Windows Server 2008 SP2 (64-bit)", "Windows Server 2008 SP2 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2008 R2 SP1 (64-bit)", "Windows Server 2008 R2 SP1 (64-bit)");
- XenServer620GuestOsMap.put("Windows Server 2012 (64-bit)", "Windows Server 2012 (64-bit)");
- XenServer620GuestOsMap.put("Windows Vista SP2 (32-bit)", "Windows Vista (32-bit)");
- XenServer620GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer620GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- XenServer620GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- XenServer620GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
- XenServer620GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
- XenServer620GuestOsMap.put("Ubuntu 12.04 (32-bit)", "Ubuntu Precise Pangolin 12.04 (32-bit)");
- XenServer620GuestOsMap.put("Ubuntu 12.04 (64-bit)", "Ubuntu Precise Pangolin 12.04 (64-bit)");
- XenServer620GuestOsMap.put("Ubuntu 11.04 (32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Ubuntu 11.04 (64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other (32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other (64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other CentOS (32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other CentOS (64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other Ubuntu (32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other Ubuntu (64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other SUSE Linux(32-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other SUSE Linux(64-bit)", "Other install media");
- XenServer620GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer620GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- static {
- XenServer620SP1GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.7 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.7 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.8 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.8 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.9 (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 5.9 (64-bit)", "CentOS 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.1 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.1 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.2 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.2 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.3 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.3 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.4 (32-bit)", "CentOS 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("CentOS 6.4 (64-bit)", "CentOS 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
- XenServer620SP1GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
- XenServer620SP1GuestOsMap.put("Debian GNU/Linux 7(32-bit)", "Debian Wheezy 7.0 (32-bit)");
- XenServer620SP1GuestOsMap.put("Debian GNU/Linux 7(64-bit)", "Debian Wheezy 7.0 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.7 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.7 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.8 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.8 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.9 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 5.9 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.1 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.1 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.2 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.2 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.3 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.3 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.4 (32-bit)", "Oracle Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Oracle Enterprise Linux 6.4 (64-bit)", "Oracle Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.8 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.8 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.9 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 5.9 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.3 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.3 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.4 (32-bit)", "Red Hat Enterprise Linux 6 (32-bit)");
- XenServer620SP1GuestOsMap.put("Red Hat Enterprise Linux 6.4 (64-bit)", "Red Hat Enterprise Linux 6 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 SP2 (32-bit)", "SUSE Linux Enterprise Server 11 SP2 (32-bit)");
- XenServer620SP1GuestOsMap.put("SUSE Linux Enterprise Server 11 SP2 (64-bit)", "SUSE Linux Enterprise Server 11 SP2 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows 7 SP1 (32-bit)", "Windows 7 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows 7 SP1 (64-bit)", "Windows 7 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows 8 (32-bit)", "Windows 8 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows 8 (64-bit)", "Windows 8 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 SP2 (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 SP2 (64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 PAE (32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2008 SP2 (32-bit)", "Windows Server 2008 (34-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2008 SP2 (64-bit)", "Windows Server 2008 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2008 R2 SP1 (64-bit)", "Windows Server 2008 R2 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2012 (64-bit)", "Windows Server 2012 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Server 2012 R2 (64-bit)", "Windows Server 2012 (64-bit)");
- XenServer620SP1GuestOsMap.put("Windows Vista SP2 (32-bit)", "Windows Vista (32-bit)");
- XenServer620SP1GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
- XenServer620SP1GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
- XenServer620SP1GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
- XenServer620SP1GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
- XenServer620SP1GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
- XenServer620SP1GuestOsMap.put("Ubuntu 12.04 (32-bit)", "Ubuntu Precise Pangolin 12.04 (32-bit)");
- XenServer620SP1GuestOsMap.put("Ubuntu 12.04 (64-bit)", "Ubuntu Precise Pangolin 12.04 (64-bit)");
- XenServer620SP1GuestOsMap.put("Ubuntu 11.04 (32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Ubuntu 11.04 (64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other Linux (32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other Linux (64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other (32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other (64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other CentOS (32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other CentOS (64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other Ubuntu (32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other Ubuntu (64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other SUSE Linux(32-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other SUSE Linux(64-bit)", "Other install media");
- XenServer620SP1GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
- XenServer620SP1GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
- }
-
- public static class MemoryValues {
- long max;
- long min;
-
- public MemoryValues(long min, long max) {
- this.min = min * 1024 * 1024;
- this.max = max * 1024 * 1024;
- }
-
- public long getMax() {
- return max;
- }
-
- public long getMin() {
- return min;
- }
- }
-
- static {
- XenServer610GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer610GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer610GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- //_xenServer610GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 (32-bit)", new MemoryValues(256l, 64*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 (64-bit)", new MemoryValues(256l, 128*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 PAE (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 Enterprise Edition(64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 DataCenter Edition(64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2003 Standard Edition(64-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2008 (32-bit)", new MemoryValues(512l, 16*1024l)); //?
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2008 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer610GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- //_xenServer610GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer610GuestOsMemoryMap.put("Windows Server 8 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer610GuestOsMemoryMap.put("Windows Vista (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer610GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(256l, 4 * 1024l));
- XenServer610GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer610GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer610GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer610GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer610GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer610GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- // XenServer610GuestOsMemoryMap.put("Other Linux (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other Linux (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer610GuestOsMemoryMap.put("Other (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other CentOS (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other CentOS (64-bit)", new MemoryValues(512l, 16*1024l));
- //_xenServer610GuestOsMemoryMap.put("Other Ubuntu (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other Ubuntu (64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other SUSE Linux(32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other SUSE Linux(64-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other PV (32-bit)", new MemoryValues(512l, 16*1024l));
- // XenServer610GuestOsMemoryMap.put("Other PV (64-bit)", new MemoryValues(512l, 16*1024l));
- }
-
- static {
- XenServer620GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("CentOS 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Oracle Enterprise Linux 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
-
- XenServer620GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows 7 SP1 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows 7 SP1 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2003 SP2 (32-bit)", new MemoryValues(256l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2003 SP2 (64-bit)", new MemoryValues(256l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2008 SP2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2008 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2008 R2 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows Vista SP2 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(256l, 4 * 1024l));
- XenServer620GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer620GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer620GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer620GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer620GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- }
-
-
- static {
- XenServer620SP1GuestOsMemoryMap.put("CentOS 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("CentOS 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Debian GNU/Linux 6(32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Debian GNU/Linux 6(64-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Debian GNU/Linux 7(32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Debian GNU/Linux 7(64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Oracle Enterprise Linux 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", new MemoryValues(256l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.7 (64-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.8 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.8 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.9 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 5.9 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.0 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (32-bit)", new MemoryValues(512l, 8 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.1 (64-bit)", new MemoryValues(512l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Red Hat Enterprise Linux 6.4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP2 (32-bit)", new MemoryValues(512l, 16 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("SUSE Linux Enterprise Server 11 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
-
- XenServer620SP1GuestOsMemoryMap.put("Windows 7 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows 7 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows 7 SP1 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows 7 SP1 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows 8 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows 8 (64-bit)", new MemoryValues(2 * 1024l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2003 SP2 (32-bit)", new MemoryValues(256l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2003 SP2 (64-bit)", new MemoryValues(256l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2008 SP2 (32-bit)", new MemoryValues(512l, 64 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2008 SP2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2008 R2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2008 R2 SP1 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2012 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Server 2012 R2 (64-bit)", new MemoryValues(512l, 128 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows Vista SP2 (32-bit)", new MemoryValues(1024l, 4 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Windows XP SP3 (32-bit)", new MemoryValues(256l, 4 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Ubuntu 10.04 (32-bit)", new MemoryValues(128l, 512l));
- XenServer620SP1GuestOsMemoryMap.put("Ubuntu 10.04 (64-bit)", new MemoryValues(128l, 32 * 1024l));
- //_xenServer620GuestOsMemoryMap.put("Ubuntu 10.10 (32-bit)", new MemoryValues(512l, 16*1024l));//?
- //_xenServer620GuestOsMemoryMap.put("Ubuntu 10.10 (64-bit)", new MemoryValues(512l, 16*1024l)); //?
- XenServer620SP1GuestOsMemoryMap.put("Ubuntu 12.04 (32-bit)", new MemoryValues(128l, 32 * 1024l));
- XenServer620SP1GuestOsMemoryMap.put("Ubuntu 12.04 (64-bit)", new MemoryValues(128l, 128 * 1024l));
- }
-
-
- public static String getXcpGuestOsType(String stdType) {
- String guestOS = Xcp100GuestOsMap.get(stdType);
- if (guestOS == null) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- }
- return guestOS;
- }
-
- public static String getXcp160GuestOsType(String stdType) {
- String guestOS = Xcp160GuestOsMap.get(stdType);
- if (guestOS == null) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- }
- return guestOS;
- }
-
- public static String getXenServerGuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServerGuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 5.6 doesn't support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static String getXenServer56FP1GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer56FP1GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 FP1 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 5.6 FP1 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static long getXenServer56FP1StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer56FP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer56FP1StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer56FP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static String getXenServer56SP2GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer56FP2GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 SP2 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 5.6 SP2 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static long getXenServer56SP2StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer56SP2GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer56SP2StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer56SP2GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static String getXenServer600GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer600GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.0.2 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.0.2 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
-
- }
- return guestOS;
- }
-
- public static long getXenServer600StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer600GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer600StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer600GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static String getXenServer602GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer602GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.0.2 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.0.2 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
-
- }
- return guestOS;
- }
-
- public static long getXenServer602StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer602GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer602StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer602GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static String getXenServer610GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer610GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.1.0 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.1.0 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static long getXenServer610StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer610GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer610StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer610GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static String getXenServer620GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer620GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.0 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.2.0 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static String getXenServer620SP1GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer620SP1GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.0 SP1 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.2.0 SP1 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static String getXenServer625GuestOsType(String stdType, boolean bootFromCD) {
- String guestOS = XenServer620SP1GuestOsMap.get(stdType);
- if (guestOS == null) {
- if (!bootFromCD) {
- s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.5 guestOS type, start it as HVM guest");
- guestOS = "Other install media";
- } else {
- String msg = "XenServer 6.2.5 DOES NOT support Guest OS type " + stdType;
- s_logger.warn(msg);
- }
- }
- return guestOS;
- }
-
- public static long getXenServer620StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer620StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static long getXenServer620SP1StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620SP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer620SP1StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620SP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-
- public static long getXenServer625StaticMax(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620SP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMax();
- }
-
- public static long getXenServer625StaticMin(String stdType, boolean bootFromCD) {
- MemoryValues recommendedMaxMinMemory = XenServer620SP1GuestOsMemoryMap.get(stdType);
- if (recommendedMaxMinMemory == null) {
- return 0l;
- }
- return recommendedMaxMinMemory.getMin();
- }
-}
\ No newline at end of file
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
deleted file mode 100644
index 626a219..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ /dev/null
@@ -1,7579 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import com.cloud.agent.IAgentControl;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.AttachIsoCommand;
-import com.cloud.agent.api.AttachVolumeAnswer;
-import com.cloud.agent.api.AttachVolumeCommand;
-import com.cloud.agent.api.CheckHealthAnswer;
-import com.cloud.agent.api.CheckHealthCommand;
-import com.cloud.agent.api.CheckNetworkAnswer;
-import com.cloud.agent.api.CheckNetworkCommand;
-import com.cloud.agent.api.CheckOnHostAnswer;
-import com.cloud.agent.api.CheckOnHostCommand;
-import com.cloud.agent.api.CheckVirtualMachineAnswer;
-import com.cloud.agent.api.CheckVirtualMachineCommand;
-import com.cloud.agent.api.CleanupNetworkRulesCmd;
-import com.cloud.agent.api.ClusterSyncAnswer;
-import com.cloud.agent.api.ClusterSyncCommand;
-import com.cloud.agent.api.ClusterVMMetaDataSyncAnswer;
-import com.cloud.agent.api.ClusterVMMetaDataSyncCommand;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.CreateStoragePoolCommand;
-import com.cloud.agent.api.CreateVMSnapshotAnswer;
-import com.cloud.agent.api.CreateVMSnapshotCommand;
-import com.cloud.agent.api.DeleteStoragePoolCommand;
-import com.cloud.agent.api.DeleteVMSnapshotAnswer;
-import com.cloud.agent.api.DeleteVMSnapshotCommand;
-import com.cloud.agent.api.GetHostStatsAnswer;
-import com.cloud.agent.api.GetHostStatsCommand;
-import com.cloud.agent.api.GetStorageStatsAnswer;
-import com.cloud.agent.api.GetStorageStatsCommand;
-import com.cloud.agent.api.GetVmDiskStatsAnswer;
-import com.cloud.agent.api.GetVmDiskStatsCommand;
-import com.cloud.agent.api.GetVmStatsAnswer;
-import com.cloud.agent.api.GetVmStatsCommand;
-import com.cloud.agent.api.GetVncPortAnswer;
-import com.cloud.agent.api.GetVncPortCommand;
-import com.cloud.agent.api.HostStatsEntry;
-import com.cloud.agent.api.HostVmStateReportEntry;
-import com.cloud.agent.api.MaintainAnswer;
-import com.cloud.agent.api.MaintainCommand;
-import com.cloud.agent.api.MigrateAnswer;
-import com.cloud.agent.api.MigrateCommand;
-import com.cloud.agent.api.ModifySshKeysCommand;
-import com.cloud.agent.api.ModifyStoragePoolAnswer;
-import com.cloud.agent.api.ModifyStoragePoolCommand;
-import com.cloud.agent.api.NetworkRulesSystemVmCommand;
-import com.cloud.agent.api.NetworkRulesVmSecondaryIpCommand;
-import com.cloud.agent.api.OvsCreateGreTunnelAnswer;
-import com.cloud.agent.api.OvsCreateGreTunnelCommand;
-import com.cloud.agent.api.OvsCreateTunnelAnswer;
-import com.cloud.agent.api.OvsCreateTunnelCommand;
-import com.cloud.agent.api.OvsDeleteFlowCommand;
-import com.cloud.agent.api.OvsDestroyBridgeCommand;
-import com.cloud.agent.api.OvsDestroyTunnelCommand;
-import com.cloud.agent.api.OvsFetchInterfaceAnswer;
-import com.cloud.agent.api.OvsFetchInterfaceCommand;
-import com.cloud.agent.api.OvsSetTagAndFlowAnswer;
-import com.cloud.agent.api.OvsSetTagAndFlowCommand;
-import com.cloud.agent.api.OvsSetupBridgeCommand;
-import com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand;
-import com.cloud.agent.api.OvsVpcRoutingPolicyConfigCommand;
-import com.cloud.agent.api.PerformanceMonitorAnswer;
-import com.cloud.agent.api.PerformanceMonitorCommand;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.PingRoutingCommand;
-import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
-import com.cloud.agent.api.PingRoutingWithOvsCommand;
-import com.cloud.agent.api.PingTestCommand;
-import com.cloud.agent.api.PlugNicAnswer;
-import com.cloud.agent.api.PlugNicCommand;
-import com.cloud.agent.api.PrepareForMigrationAnswer;
-import com.cloud.agent.api.PrepareForMigrationCommand;
-import com.cloud.agent.api.PvlanSetupCommand;
-import com.cloud.agent.api.ReadyAnswer;
-import com.cloud.agent.api.ReadyCommand;
-import com.cloud.agent.api.RebootAnswer;
-import com.cloud.agent.api.RebootCommand;
-import com.cloud.agent.api.RebootRouterCommand;
-import com.cloud.agent.api.RevertToVMSnapshotAnswer;
-import com.cloud.agent.api.RevertToVMSnapshotCommand;
-import com.cloud.agent.api.ScaleVmAnswer;
-import com.cloud.agent.api.ScaleVmCommand;
-import com.cloud.agent.api.SecurityGroupRuleAnswer;
-import com.cloud.agent.api.SecurityGroupRulesCmd;
-import com.cloud.agent.api.SetupAnswer;
-import com.cloud.agent.api.SetupCommand;
-import com.cloud.agent.api.SetupGuestNetworkCommand;
-import com.cloud.agent.api.StartAnswer;
-import com.cloud.agent.api.StartCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupStorageCommand;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.StopCommand;
-import com.cloud.agent.api.StoragePoolInfo;
-import com.cloud.agent.api.UnPlugNicAnswer;
-import com.cloud.agent.api.UnPlugNicCommand;
-import com.cloud.agent.api.UpdateHostPasswordCommand;
-import com.cloud.agent.api.UpgradeSnapshotCommand;
-import com.cloud.agent.api.VgpuTypesInfo;
-import com.cloud.agent.api.VmStatsEntry;
-import com.cloud.agent.api.check.CheckSshAnswer;
-import com.cloud.agent.api.check.CheckSshCommand;
-import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand;
-import com.cloud.agent.api.proxy.ConsoleProxyLoadAnswer;
-import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
-import com.cloud.agent.api.routing.IpAssocCommand;
-import com.cloud.agent.api.routing.IpAssocVpcCommand;
-import com.cloud.agent.api.routing.NetworkElementCommand;
-import com.cloud.agent.api.routing.SetNetworkACLCommand;
-import com.cloud.agent.api.routing.SetSourceNatCommand;
-import com.cloud.agent.api.storage.CreateAnswer;
-import com.cloud.agent.api.storage.CreateCommand;
-import com.cloud.agent.api.storage.DestroyCommand;
-import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
-import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
-import com.cloud.agent.api.storage.ResizeVolumeAnswer;
-import com.cloud.agent.api.storage.ResizeVolumeCommand;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.DiskTO;
-import com.cloud.agent.api.to.GPUDeviceTO;
-import com.cloud.agent.api.to.IpAddressTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.NicTO;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.agent.resource.virtualnetwork.VirtualRouterDeployer;
-import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource;
-import com.cloud.exception.InternalErrorException;
-import com.cloud.host.Host.Type;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.Networks;
-import com.cloud.network.Networks.BroadcastDomainType;
-import com.cloud.network.Networks.IsolationType;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.network.PhysicalNetworkSetupInfo;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.hypervisor.HypervisorResource;
-import com.cloud.storage.Storage;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.resource.StorageSubsystemCommandHandler;
-import com.cloud.storage.resource.StorageSubsystemCommandHandlerBase;
-import com.cloud.storage.template.TemplateProp;
-import com.cloud.template.VirtualMachineTemplate.BootloaderType;
-import com.cloud.utils.ExecutionResult;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.Pair;
-import com.cloud.utils.StringUtils;
-import com.cloud.utils.Ternary;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.net.NetUtils;
-import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.utils.ssh.SshHelper;
-import com.cloud.vm.DiskProfile;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.snapshot.VMSnapshot;
-import com.trilead.ssh2.SCPClient;
-import com.xensource.xenapi.Bond;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Console;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.HostCpu;
-import com.xensource.xenapi.HostMetrics;
-import com.xensource.xenapi.Network;
-import com.xensource.xenapi.PBD;
-import com.xensource.xenapi.PIF;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Session;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.BadServerResponse;
-import com.xensource.xenapi.Types.VmPowerState;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VBDMetrics;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VGPU;
-import com.xensource.xenapi.VIF;
-import com.xensource.xenapi.VLAN;
-import com.xensource.xenapi.VM;
-import com.xensource.xenapi.VMGuestMetrics;
-import com.xensource.xenapi.XenAPIObject;
-import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.Random;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * CitrixResourceBase encapsulates the calls to the XenServer Xapi process
- * to perform the required functionalities for CloudStack.
- *
- * ==============> READ THIS <==============
- * Because the XenServer objects can expire when the session expires, we cannot
- * keep any of the actual XenServer objects in this class. The only
- * thing that is constant is the UUID of the XenServer objects but not the
- * objects themselves! This is very important before you do any changes in
- * this code here.
- *
- */
-@Local(value = ServerResource.class)
-public abstract class CitrixResourceBase implements ServerResource, HypervisorResource, VirtualRouterDeployer {
- private static final Logger s_logger = Logger.getLogger(CitrixResourceBase.class);
- protected static final XenServerConnectionPool ConnPool = XenServerConnectionPool.getInstance();
- protected String _name;
- protected String _username;
- protected Queue<String> _password = new LinkedList<String>();
- protected final int _retry = 100;
- protected final int _sleep = 10000;
- protected long _dcId;
- protected String _pod;
- protected String _cluster;
- protected static final XenServerPoolVms s_vms = new XenServerPoolVms();
- protected String _privateNetworkName;
- protected String _linkLocalPrivateNetworkName;
- protected String _publicNetworkName;
- protected String _storageNetworkName1;
- protected String _storageNetworkName2;
- protected String _guestNetworkName;
- protected int _wait;
- protected int _migratewait;
- protected String _instance; //instance name (default is usually "VM")
- static final Random Rand = new Random(System.currentTimeMillis());
- protected boolean _securityGroupEnabled;
-
- protected IAgentControl _agentControl;
-
- final int _maxWeight = 256;
- protected int _heartbeatInterval = 60;
- protected final XsHost _host = new XsHost();
-
- // Guest and Host Performance Statistics
- protected String _consolidationFunction = "AVERAGE";
- protected int _pollingIntervalInSeconds = 60;
-
- //Hypervisor specific params with generic value, may need to be overridden for specific versions
- long _xsMemoryUsed = 128 * 1024 * 1024L; // xen hypervisor used 128 M
- double _xsVirtualizationFactor = 63.0 / 64.0; // 1 - virtualization overhead
-
- //static min values for guests on xen
- private static final long mem_128m = 134217728L;
-
- protected boolean _canBridgeFirewall = false;
- protected boolean _isOvs = false;
- protected List<VIF> _tmpDom0Vif = new ArrayList<VIF>();
- protected StorageSubsystemCommandHandler storageHandler;
- protected int _maxNics = 7;
-
- protected VirtualRoutingResource _vrResource;
-
- public enum SRType {
- NFS, LVM, ISCSI, ISO, LVMOISCSI, LVMOHBA, EXT, FILE;
-
- String _str;
-
- private SRType() {
- _str = super.toString().toLowerCase();
- }
-
- @Override
- public String toString() {
- return _str;
- }
-
- public boolean equals(String type) {
- return _str.equalsIgnoreCase(type);
- }
- }
-
- protected static final HashMap<Types.VmPowerState, PowerState> s_powerStatesTable;
- static {
- s_powerStatesTable = new HashMap<Types.VmPowerState, PowerState>();
- s_powerStatesTable.put(Types.VmPowerState.HALTED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.PAUSED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.RUNNING, PowerState.PowerOn);
- s_powerStatesTable.put(Types.VmPowerState.SUSPENDED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.UNRECOGNIZED, PowerState.PowerUnknown);
- }
-
- // TODO vmsync {
- protected static final HashMap<Types.VmPowerState, State> s_statesTable;
- static {
- s_statesTable = new HashMap<Types.VmPowerState, State>();
- s_statesTable.put(Types.VmPowerState.HALTED, State.Stopped);
- s_statesTable.put(Types.VmPowerState.PAUSED, State.Running);
- s_statesTable.put(Types.VmPowerState.RUNNING, State.Running);
- s_statesTable.put(Types.VmPowerState.SUSPENDED, State.Running);
- s_statesTable.put(Types.VmPowerState.UNRECOGNIZED, State.Unknown);
- }
-
- // TODO vmsync }
-
- public XsHost getHost() {
- return _host;
- }
-
- private static boolean isAlienVm(VM vm, Connection conn) throws XenAPIException, XmlRpcException {
- // TODO : we need a better way to tell whether or not the VM belongs to CloudStack
- String vmName = vm.getNameLabel(conn);
- if (vmName.matches("^[ivs]-\\d+-.+"))
- return false;
-
- return true;
- }
-
- protected boolean cleanupHaltedVms(Connection conn) throws XenAPIException, XmlRpcException {
- Host host = Host.getByUuid(conn, _host.uuid);
- Map<VM, VM.Record> vms = VM.getAllRecords(conn);
- boolean success = true;
- for (Map.Entry<VM, VM.Record> entry : vms.entrySet()) {
- VM vm = entry.getKey();
- VM.Record vmRec = entry.getValue();
- if (vmRec.isATemplate || vmRec.isControlDomain) {
- continue;
- }
-
- if (VmPowerState.HALTED.equals(vmRec.powerState) && vmRec.affinity.equals(host) && !isAlienVm(vm, conn)) {
- try {
- vm.destroy(conn);
- } catch (Exception e) {
- s_logger.warn("Catch Exception " + e.getClass().getName() + ": unable to destroy VM " + vmRec.nameLabel + " due to ", e);
- success = false;
- }
- }
- }
- return success;
- }
-
- protected boolean isRefNull(XenAPIObject object) {
- return (object == null || object.toWireString().equals("OpaqueRef:NULL") || object.toWireString().equals("<not in database>"));
- }
-
- @Override
- public void disconnected() {
- }
-
- protected boolean pingdomr(Connection conn, String host, String port) {
- String status;
- status = callHostPlugin(conn, "vmops", "pingdomr", "host", host, "port", port);
-
- if (status == null || status.isEmpty()) {
- return false;
- }
-
- return true;
-
- }
-
- protected boolean pingXAPI() {
- Connection conn = getConnection();
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- if( !host.getEnabled(conn) ) {
- s_logger.debug("Host " + _host.ip + " is not enabled!");
- return false;
- }
- } catch (Exception e) {
- s_logger.debug("cannot get host enabled status, host " + _host.ip + " due to " + e.toString(), e);
- return false;
- }
- try {
- callHostPlugin(conn, "echo", "main");
- } catch (Exception e) {
- s_logger.debug("cannot ping host " + _host.ip + " due to " + e.toString(), e);
- return false;
- }
- return true;
- }
-
-
- protected String logX(XenAPIObject obj, String msg) {
- return new StringBuilder("Host ").append(_host.ip).append(" ").append(obj.toWireString()).append(": ").append(msg).toString();
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- Class<? extends Command> clazz = cmd.getClass();
- if (clazz == CreateCommand.class) {
- return execute((CreateCommand)cmd);
- } else if (cmd instanceof NetworkElementCommand) {
- return _vrResource.executeRequest((NetworkElementCommand)cmd);
- } else if (clazz == CheckConsoleProxyLoadCommand.class) {
- return execute((CheckConsoleProxyLoadCommand)cmd);
- } else if (clazz == WatchConsoleProxyLoadCommand.class) {
- return execute((WatchConsoleProxyLoadCommand)cmd);
- } else if (clazz == ReadyCommand.class) {
- return execute((ReadyCommand)cmd);
- } else if (clazz == GetHostStatsCommand.class) {
- return execute((GetHostStatsCommand)cmd);
- } else if (clazz == GetVmStatsCommand.class) {
- return execute((GetVmStatsCommand)cmd);
- } else if (clazz == GetVmDiskStatsCommand.class) {
- return execute((GetVmDiskStatsCommand)cmd);
- } else if (clazz == CheckHealthCommand.class) {
- return execute((CheckHealthCommand)cmd);
- } else if (clazz == StopCommand.class) {
- return execute((StopCommand)cmd);
- } else if (clazz == RebootRouterCommand.class) {
- return execute((RebootRouterCommand)cmd);
- } else if (clazz == RebootCommand.class) {
- return execute((RebootCommand)cmd);
- } else if (clazz == CheckVirtualMachineCommand.class) {
- return execute((CheckVirtualMachineCommand)cmd);
- } else if (clazz == PrepareForMigrationCommand.class) {
- return execute((PrepareForMigrationCommand)cmd);
- } else if (clazz == MigrateCommand.class) {
- return execute((MigrateCommand)cmd);
- } else if (clazz == DestroyCommand.class) {
- return execute((DestroyCommand)cmd);
- } else if (clazz == CreateStoragePoolCommand.class) {
- return execute((CreateStoragePoolCommand)cmd);
- } else if (clazz == ModifyStoragePoolCommand.class) {
- return execute((ModifyStoragePoolCommand)cmd);
- } else if (clazz == DeleteStoragePoolCommand.class) {
- return execute((DeleteStoragePoolCommand) cmd);
- }else if (clazz == ResizeVolumeCommand.class) {
- return execute((ResizeVolumeCommand) cmd);
- } else if (clazz == AttachVolumeCommand.class) {
- return execute((AttachVolumeCommand)cmd);
- } else if (clazz == AttachIsoCommand.class) {
- return execute((AttachIsoCommand) cmd);
- } else if (clazz == UpgradeSnapshotCommand.class) {
- return execute((UpgradeSnapshotCommand)cmd);
- } else if (clazz == GetStorageStatsCommand.class) {
- return execute((GetStorageStatsCommand)cmd);
- } else if (clazz == PrimaryStorageDownloadCommand.class) {
- return execute((PrimaryStorageDownloadCommand)cmd);
- } else if (clazz == GetVncPortCommand.class) {
- return execute((GetVncPortCommand)cmd);
- } else if (clazz == SetupCommand.class) {
- return execute((SetupCommand)cmd);
- } else if (clazz == MaintainCommand.class) {
- return execute((MaintainCommand)cmd);
- } else if (clazz == PingTestCommand.class) {
- return execute((PingTestCommand)cmd);
- } else if (clazz == CheckOnHostCommand.class) {
- return execute((CheckOnHostCommand)cmd);
- } else if (clazz == ModifySshKeysCommand.class) {
- return execute((ModifySshKeysCommand)cmd);
- } else if (clazz == StartCommand.class) {
- return execute((StartCommand)cmd);
- } else if (clazz == CheckSshCommand.class) {
- return execute((CheckSshCommand)cmd);
- } else if (clazz == SecurityGroupRulesCmd.class) {
- return execute((SecurityGroupRulesCmd)cmd);
- } else if (clazz == OvsFetchInterfaceCommand.class) {
- return execute((OvsFetchInterfaceCommand)cmd);
- } else if (clazz == OvsCreateGreTunnelCommand.class) {
- return execute((OvsCreateGreTunnelCommand)cmd);
- } else if (clazz == OvsSetTagAndFlowCommand.class) {
- return execute((OvsSetTagAndFlowCommand)cmd);
- } else if (clazz == OvsDeleteFlowCommand.class) {
- return execute((OvsDeleteFlowCommand)cmd);
- } else if (clazz == OvsVpcPhysicalTopologyConfigCommand.class) {
- return execute((OvsVpcPhysicalTopologyConfigCommand) cmd);
- } else if (clazz == OvsVpcRoutingPolicyConfigCommand.class) {
- return execute((OvsVpcRoutingPolicyConfigCommand) cmd);
- } else if (clazz == CleanupNetworkRulesCmd.class) {
- return execute((CleanupNetworkRulesCmd)cmd);
- } else if (clazz == NetworkRulesSystemVmCommand.class) {
- return execute((NetworkRulesSystemVmCommand)cmd);
- } else if (clazz == OvsCreateTunnelCommand.class) {
- return execute((OvsCreateTunnelCommand)cmd);
- } else if (clazz == OvsSetupBridgeCommand.class) {
- return execute((OvsSetupBridgeCommand)cmd);
- } else if (clazz == OvsDestroyBridgeCommand.class) {
- return execute((OvsDestroyBridgeCommand)cmd);
- } else if (clazz == OvsDestroyTunnelCommand.class) {
- return execute((OvsDestroyTunnelCommand)cmd);
- } else if (clazz == UpdateHostPasswordCommand.class) {
- return execute((UpdateHostPasswordCommand)cmd);
- } else if (cmd instanceof ClusterSyncCommand) {
- return execute((ClusterSyncCommand)cmd);
- } else if (cmd instanceof ClusterVMMetaDataSyncCommand) {
- return execute((ClusterVMMetaDataSyncCommand)cmd);
- } else if (clazz == CheckNetworkCommand.class) {
- return execute((CheckNetworkCommand)cmd);
- } else if (clazz == PlugNicCommand.class) {
- return execute((PlugNicCommand)cmd);
- } else if (clazz == UnPlugNicCommand.class) {
- return execute((UnPlugNicCommand) cmd);
- } else if (cmd instanceof StorageSubSystemCommand) {
- return storageHandler.handleStorageCommands((StorageSubSystemCommand) cmd);
- } else if (clazz == CreateVMSnapshotCommand.class) {
- return execute((CreateVMSnapshotCommand) cmd);
- } else if (clazz == DeleteVMSnapshotCommand.class) {
- return execute((DeleteVMSnapshotCommand) cmd);
- } else if (clazz == RevertToVMSnapshotCommand.class) {
- return execute((RevertToVMSnapshotCommand) cmd);
- } else if (clazz == NetworkRulesVmSecondaryIpCommand.class) {
- return execute((NetworkRulesVmSecondaryIpCommand) cmd);
- } else if (clazz == ScaleVmCommand.class) {
- return execute((ScaleVmCommand)cmd);
- } else if (clazz == PvlanSetupCommand.class) {
- return execute((PvlanSetupCommand)cmd);
- } else if (clazz == PerformanceMonitorCommand.class) {
- return execute((PerformanceMonitorCommand)cmd);
- } else {
- return Answer.createUnsupportedCommandAnswer(cmd);
- }
- }
-
- @Override
- public ExecutionResult executeInVR(String routerIP, String script, String args, int timeout) {
- Pair<Boolean, String> result;
- try {
- result = SshHelper.sshExecute(_host.ip, 22, _username, null, _password.peek(), "/opt/cloud/bin/router_proxy.sh " + script + " " + routerIP + " " + args,
- 60000, 60000, timeout * 1000);
- } catch (Exception e) {
- return new ExecutionResult(false, e.getMessage());
- }
- return new ExecutionResult(result.first(), result.second());
- }
-
- @Override
- public ExecutionResult executeInVR(String routerIP, String script, String args) {
- // Timeout is 120 seconds by default
- return executeInVR(routerIP, script, args, 120);
- }
-
- @Override
- public ExecutionResult createFileInVR(String routerIp, String path, String filename, String content) {
- Connection conn = getConnection();
- String rc = callHostPlugin(conn, "vmops", "createFileInDomr", "domrip", routerIp, "filepath", path + filename, "filecontents", content);
- // Fail case would be start with "fail#"
- return new ExecutionResult(rc.startsWith("succ#"), rc.substring(5));
- }
-
- @Override
- public ExecutionResult prepareCommand(NetworkElementCommand cmd) {
- //Update IP used to access router
- cmd.setRouterAccessIp(cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP));
- assert cmd.getRouterAccessIp() != null;
-
- if (cmd instanceof IpAssocVpcCommand) {
- return prepareNetworkElementCommand((IpAssocVpcCommand)cmd);
- } else if (cmd instanceof IpAssocCommand) {
- return prepareNetworkElementCommand((IpAssocCommand)cmd);
- } else if (cmd instanceof SetupGuestNetworkCommand) {
- return prepareNetworkElementCommand((SetupGuestNetworkCommand)cmd);
- } else if (cmd instanceof SetSourceNatCommand) {
- return prepareNetworkElementCommand((SetSourceNatCommand)cmd);
- } else if (cmd instanceof SetNetworkACLCommand) {
- return prepareNetworkElementCommand((SetNetworkACLCommand)cmd);
- }
- return new ExecutionResult(true, null);
- }
-
- @Override
- public ExecutionResult cleanupCommand(NetworkElementCommand cmd) {
- if (cmd instanceof IpAssocCommand && !(cmd instanceof IpAssocVpcCommand)) {
- return cleanupNetworkElementCommand((IpAssocCommand)cmd);
- }
- return new ExecutionResult(true, null);
- }
-
- private Answer execute(PerformanceMonitorCommand cmd) {
- Connection conn = getConnection();
- String perfMon = getPerfMon(conn, cmd.getParams(), cmd.getWait());
- if (perfMon == null) {
- return new PerformanceMonitorAnswer(cmd, false, perfMon);
- } else
- return new PerformanceMonitorAnswer(cmd, true, perfMon);
- }
-
- private String getPerfMon(Connection conn, Map<String, String> params,
- int wait) {
- String result = null;
- try {
- result = callHostPluginAsync(conn, "vmopspremium", "asmonitor", 60,
- params);
- if (result != null)
- return result;
- } catch (Exception e) {
- s_logger.error("Can not get performance monitor for AS due to ", e);
- }
- return null;
- }
-
- protected String callHostPluginAsync(Connection conn, String plugin,
- String cmd, int wait, Map<String, String> params) {
- int timeout = wait * 1000;
- Map<String, String> args = new HashMap<String, String>();
- Task task = null;
- try {
- for (String key : params.keySet()) {
- args.put(key, params.get(key));
- }
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin executing for command " + cmd
- + " with " + getArgsString(args));
- }
- Host host = Host.getByUuid(conn, _host.uuid);
- task = host.callPluginAsync(conn, plugin, cmd, args);
- // poll every 1 seconds
- waitForTask(conn, task, 1000, timeout);
- checkForSuccess(conn, task);
- String result = task.getResult(conn);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin Result: " + result);
- }
- return result.replace("<value>", "").replace("</value>", "")
- .replace("\n", "");
- } catch (Types.HandleInvalid e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd
- + " with args " + getArgsString(args)
- + " due to HandleInvalid clazz:" + e.clazz + ", handle:"
- + e.handle);
- } catch (XenAPIException e) {
- s_logger.warn(
- "callHostPlugin failed for cmd: " + cmd + " with args "
- + getArgsString(args) + " due to " + e.toString(),
- e);
- } catch (XmlRpcException e) {
- s_logger.warn(
- "callHostPlugin failed for cmd: " + cmd + " with args "
- + getArgsString(args) + " due to " + e.getMessage(),
- e);
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.warn("unable to destroy task(" + task.toString()
- + ") on host(" + _host.uuid + ") due to ", e1);
- }
- }
- }
- return null;
- }
-
- protected void scaleVM(Connection conn, VM vm, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
-
- Long staticMemoryMax = vm.getMemoryStaticMax(conn);
- Long staticMemoryMin = vm.getMemoryStaticMin(conn);
- Long newDynamicMemoryMin = vmSpec.getMinRam();
- Long newDynamicMemoryMax = vmSpec.getMaxRam();
- if (staticMemoryMin > newDynamicMemoryMin || newDynamicMemoryMax > staticMemoryMax) {
- throw new CloudRuntimeException("Cannot scale up the vm because of memory constraint violation: " + "0 <= memory-static-min(" + staticMemoryMin +
- ") <= memory-dynamic-min(" + newDynamicMemoryMin + ") <= memory-dynamic-max(" + newDynamicMemoryMax + ") <= memory-static-max(" + staticMemoryMax + ")");
- }
-
- vm.setMemoryDynamicRange(conn, newDynamicMemoryMin, newDynamicMemoryMax);
- vm.setVCPUsNumberLive(conn, (long)vmSpec.getCpus());
-
- Integer speed = vmSpec.getMinSpeed();
- if (speed != null) {
-
- int cpuWeight = _maxWeight; //cpu_weight
-
- // weight based allocation
-
- cpuWeight = (int)((speed * 0.99) / _host.speed * _maxWeight);
- if (cpuWeight > _maxWeight) {
- cpuWeight = _maxWeight;
- }
-
- if (vmSpec.getLimitCpuUse()) {
- long utilization = 0; // max CPU cap, default is unlimited
- utilization = (int)((vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus()) / _host.speed * 100);
- //vm.addToVCPUsParamsLive(conn, "cap", Long.toString(utilization)); currently xenserver doesnot support Xapi to add VCPUs params live.
- callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "cap", "value", Long.toString(utilization), "vmname", vmSpec.getName());
- }
- //vm.addToVCPUsParamsLive(conn, "weight", Integer.toString(cpuWeight));
- callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", Integer.toString(cpuWeight), "vmname", vmSpec.getName());
- }
- }
-
- public ScaleVmAnswer execute(ScaleVmCommand cmd) {
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- String vmName = vmSpec.getName();
- try {
- Connection conn = getConnection();
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- Host host = Host.getByUuid(conn, _host.uuid);
-
- // If DMC is not enable then don't execute this command.
- if (!isDmcEnabled(conn, host)) {
- throw new CloudRuntimeException("Unable to scale the vm: " + vmName + " as DMC - Dynamic memory control is not enabled for the XenServer:" + _host.uuid +
- " ,check your license and hypervisor version.");
- }
-
- // stop vm which is running on this host or is in halted state
- Iterator<VM> iter = vms.iterator();
- while (iter.hasNext()) {
- VM vm = iter.next();
- VM.Record vmr = vm.getRecord(conn);
-
- if ((vmr.powerState == VmPowerState.HALTED) ||
- (vmr.powerState == VmPowerState.RUNNING && !isRefNull(vmr.residentOn) && !vmr.residentOn.getUuid(conn).equals(_host.uuid))) {
- iter.remove();
- }
- }
-
- if (vms.size() == 0) {
- s_logger.info("No running VM " + vmName + " exists on XenServer" + _host.uuid);
- return new ScaleVmAnswer(cmd, false, "VM does not exist");
- }
-
- for (VM vm : vms) {
- vm.getRecord(conn);
- try {
- scaleVM(conn, vm, vmSpec, host);
- } catch (Exception e) {
- String msg = "Catch exception " + e.getClass().getName() + " when scaling VM:" + vmName + " due to " + e.toString();
- s_logger.debug(msg);
- return new ScaleVmAnswer(cmd, false, msg);
- }
-
- }
- String msg = "scaling VM " + vmName + " is successful on host " + host;
- s_logger.debug(msg);
- return new ScaleVmAnswer(cmd, true, msg);
-
- } catch (XenAPIException e) {
- String msg = "Upgrade Vm " + vmName + " fail due to " + e.toString();
- s_logger.warn(msg, e);
- return new ScaleVmAnswer(cmd, false, msg);
- } catch (XmlRpcException e) {
- String msg = "Upgrade Vm " + vmName + " fail due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new ScaleVmAnswer(cmd, false, msg);
- } catch (Exception e) {
- String msg = "Unable to upgrade " + vmName + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new ScaleVmAnswer(cmd, false, msg);
- }
- }
-
- private Answer execute(RevertToVMSnapshotCommand cmd) {
- String vmName = cmd.getVmName();
- List<VolumeObjectTO> listVolumeTo = cmd.getVolumeTOs();
- VMSnapshot.Type vmSnapshotType = cmd.getTarget().getType();
- Boolean snapshotMemory = vmSnapshotType == VMSnapshot.Type.DiskAndMemory;
- Connection conn = getConnection();
- VirtualMachine.State vmState = null;
- VM vm = null;
- try {
-
- // remove vm from s_vms, for delta sync
- s_vms.remove(_cluster, _name, vmName);
-
- Set<VM> vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName());
- if (vmSnapshots.size() == 0)
- return new RevertToVMSnapshotAnswer(cmd, false, "Cannot find vmSnapshot with name: " + cmd.getTarget().getSnapshotName());
-
- VM vmSnapshot = vmSnapshots.iterator().next();
-
- // find target VM or creating a work VM
- try {
- vm = getVM(conn, vmName);
- } catch (Exception e) {
- vm = createWorkingVM(conn, vmName, cmd.getGuestOSType(), listVolumeTo);
- }
-
- if (vm == null) {
- return new RevertToVMSnapshotAnswer(cmd, false, "Revert to VM Snapshot Failed due to can not find vm: " + vmName);
- }
-
- // call plugin to execute revert
- revertToSnapshot(conn, vmSnapshot, vmName, vm.getUuid(conn), snapshotMemory, _host.uuid);
- vm = getVM(conn, vmName);
- Set<VBD> vbds = vm.getVBDs(conn);
- Map<String, VDI> vdiMap = new HashMap<String, VDI>();
- // get vdi:vbdr to a map
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
- if (vbdr.type == Types.VbdType.DISK) {
- VDI vdi = vbdr.VDI;
- vdiMap.put(vbdr.userdevice, vdi);
- }
- }
-
- if (!snapshotMemory) {
- vm.destroy(conn);
- vmState = VirtualMachine.State.Stopped;
- } else {
- s_vms.put(_cluster, _name, vmName, State.Running);
- vmState = VirtualMachine.State.Running;
- }
-
- // after revert, VM's volumes path have been changed, need to report to manager
- for (VolumeObjectTO volumeTo : listVolumeTo) {
- Long deviceId = volumeTo.getDeviceId();
- VDI vdi = vdiMap.get(deviceId.toString());
- volumeTo.setPath(vdi.getUuid(conn));
- }
-
- return new RevertToVMSnapshotAnswer(cmd, listVolumeTo, vmState);
- } catch (Exception e) {
- s_logger.error("revert vm " + vmName + " to snapshot " + cmd.getTarget().getSnapshotName() + " failed due to " + e.getMessage());
- return new RevertToVMSnapshotAnswer(cmd, false, e.getMessage());
- }
- }
-
- protected String revertToSnapshot(Connection conn, VM vmSnapshot, String vmName, String oldVmUuid, Boolean snapshotMemory, String hostUUID) throws XenAPIException,
- XmlRpcException {
-
- String results =
- callHostPluginAsync(conn, "vmopsSnapshot", "revert_memory_snapshot", 10 * 60 * 1000, "snapshotUUID", vmSnapshot.getUuid(conn), "vmName", vmName, "oldVmUuid",
- oldVmUuid, "snapshotMemory", snapshotMemory.toString(), "hostUUID", hostUUID);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg = "revert_memory_snapshot return null";
- } else {
- if (results.equals("0")) {
- return results;
- } else {
- errMsg = "revert_memory_snapshot exception";
- }
- }
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
- protected XsLocalNetwork getNativeNetworkForTraffic(Connection conn, TrafficType type, String name) throws XenAPIException, XmlRpcException {
- if (name != null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Looking for network named " + name);
- }
- return getNetworkByName(conn, name);
- }
-
- if (type == TrafficType.Guest) {
- return new XsLocalNetwork(Network.getByUuid(conn, _host.guestNetwork), null, PIF.getByUuid(conn, _host.guestPif), null);
- } else if (type == TrafficType.Control) {
- setupLinkLocalNetwork(conn);
- return new XsLocalNetwork(Network.getByUuid(conn, _host.linkLocalNetwork));
- } else if (type == TrafficType.Management) {
- return new XsLocalNetwork(Network.getByUuid(conn, _host.privateNetwork), null, PIF.getByUuid(conn, _host.privatePif), null);
- } else if (type == TrafficType.Public) {
- return new XsLocalNetwork(Network.getByUuid(conn, _host.publicNetwork), null, PIF.getByUuid(conn, _host.publicPif), null);
- } else if (type == TrafficType.Storage) {
- /* TrafficType.Storage is for secondary storage, while storageNetwork1 is for primary storage, we need better name here */
- return new XsLocalNetwork(Network.getByUuid(conn, _host.storageNetwork1), null, PIF.getByUuid(conn, _host.storagePif1), null);
- }
-
- throw new CloudRuntimeException("Unsupported network type: " + type);
- }
-
- /**
- * This is a tricky to create network in xenserver.
- * if you create a network then create bridge by brctl or openvswitch yourself,
- * then you will get an expection that is "REQUIRED_NETWROK" when you start a
- * vm with this network. The soultion is, create a vif of dom0 and plug it in
- * network, xenserver will create the bridge on behalf of you
- * @throws XmlRpcException
- * @throws XenAPIException
- */
- private void enableXenServerNetwork(Connection conn, Network nw, String vifNameLabel, String networkDesc) throws XenAPIException, XmlRpcException {
- /* Make sure there is a physical bridge on this network */
- VIF dom0vif = null;
- Pair<VM, VM.Record> vm = getControlDomain(conn);
- VM dom0 = vm.first();
- // Create a VIF unless there's not already another VIF
- Set<VIF> dom0Vifs = dom0.getVIFs(conn);
- for (VIF vif : dom0Vifs) {
- vif.getRecord(conn);
- if (vif.getNetwork(conn).getUuid(conn).equals(nw.getUuid(conn))) {
- dom0vif = vif;
- s_logger.debug("A VIF for dom0 has already been found - No need to create one");
- }
- }
-
- if (dom0vif == null) {
- s_logger.debug("Create a vif on dom0 for " + networkDesc);
- VIF.Record vifr = new VIF.Record();
- vifr.VM = dom0;
- vifr.device = getLowestAvailableVIFDeviceNum(conn, dom0);
- if (vifr.device == null) {
- s_logger.debug("Failed to create " + networkDesc + ", no vif available");
- return;
- }
- Map<String, String> config = new HashMap<String, String>();
- config.put("nameLabel", vifNameLabel);
- vifr.otherConfig = config;
- vifr.MAC = "FE:FF:FF:FF:FF:FF";
- vifr.network = nw;
-
- vifr.lockingMode = Types.VifLockingMode.NETWORK_DEFAULT;
- dom0vif = VIF.create(conn, vifr);
- synchronized (_tmpDom0Vif) {
- _tmpDom0Vif.add(dom0vif);
- }
- }
- // At this stage we surely have a VIF
- try {
- dom0vif.plug(conn);
- } catch (Exception e) {
- // though an exception is thrown here, VIF actually gets plugged-in to dom0, so just ignore the exception
- }
- dom0vif.unplug(conn);
- }
-
- private synchronized Network setupvSwitchNetwork(Connection conn) {
- try {
- if (_host.vswitchNetwork == null) {
- Network vswitchNw = null;
- Network.Record rec = new Network.Record();
- String nwName = Networks.BroadcastScheme.VSwitch.toString();
- Set<Network> networks = Network.getByNameLabel(conn, nwName);
-
- if (networks.size() == 0) {
- rec.nameDescription = "vswitch network for " + nwName;
- rec.nameLabel = nwName;
- vswitchNw = Network.create(conn, rec);
- } else {
- vswitchNw = networks.iterator().next();
- }
- if (!is_xcp())
- enableXenServerNetwork(conn, vswitchNw, "vswitch", "vswitch network");
- _host.vswitchNetwork = vswitchNw;
- }
- return _host.vswitchNetwork;
- } catch (BadServerResponse e) {
- s_logger.error("Failed to setup vswitch network", e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to setup vswitch network", e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to setup vswitch network", e);
- }
-
- return null;
- }
-
- /**
- * This method just creates a XenServer network following the tunnel network naming convention
- */
- private synchronized Network findOrCreateTunnelNetwork(Connection conn, String nwName) {
- try {
- Network nw = null;
- Network.Record rec = new Network.Record();
- Set<Network> networks = Network.getByNameLabel(conn, nwName);
-
- if (networks.size() == 0) {
- rec.nameDescription = "tunnel network id# " + nwName;
- rec.nameLabel = nwName;
- //Initialize the ovs-host-setup to avoid error when doing get-param in plugin
- Map<String, String> otherConfig = new HashMap<String, String>();
- otherConfig.put("ovs-host-setup", "");
- rec.otherConfig = otherConfig;
- nw = Network.create(conn, rec);
- // Plug dom0 vif only when creating network
- enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + nwName);
- s_logger.debug("### Xen Server network for tunnels created:" + nwName);
- } else {
- nw = networks.iterator().next();
- enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + nwName);
- s_logger.debug("Xen Server network for tunnels found:" + nwName);
- }
- return nw;
- } catch (Exception e) {
- s_logger.warn("createTunnelNetwork failed", e);
- return null;
- }
- }
-
- /**
- * This method creates a XenServer network and configures it for being used as a L2-in-L3 tunneled network
- */
- private synchronized Network configureTunnelNetwork(Connection conn, Long networkId, long hostId, String bridgeName) {
- try {
- Network nw = findOrCreateTunnelNetwork(conn, bridgeName);
- String nwName = bridgeName;
- //Invoke plugin to setup the bridge which will be used by this network
- String bridge = nw.getBridge(conn);
- Map<String, String> nwOtherConfig = nw.getOtherConfig(conn);
- String configuredHosts = nwOtherConfig.get("ovs-host-setup");
- boolean configured = false;
- if (configuredHosts != null) {
- String hostIdsStr[] = configuredHosts.split(",");
- for (String hostIdStr : hostIdsStr) {
- if (hostIdStr.equals(((Long)hostId).toString())) {
- configured = true;
- break;
- }
- }
- }
- if (!configured) {
- // Plug dom0 vif only if not done before for network and host
- enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + bridgeName);
- String result;
- if (bridgeName.startsWith("OVS-DR-VPC-Bridge")) {
- result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge_for_distributed_routing", "bridge", bridge,
- "key", bridgeName,
- "xs_nw_uuid", nw.getUuid(conn),
- "cs_host_id", ((Long)hostId).toString());
- } else {
- result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge", "bridge", bridge,
- "key", bridgeName,
- "xs_nw_uuid", nw.getUuid(conn),
- "cs_host_id", ((Long)hostId).toString());
- }
-
- //Note down the fact that the ovs bridge has been setup
- String[] res = result.split(":");
- if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) {
- //TODO: Should make this error not fatal?
- throw new CloudRuntimeException("Unable to pre-configure OVS bridge " + bridge );
- }
- }
- return nw;
- } catch (Exception e) {
- s_logger.warn("createandConfigureTunnelNetwork failed", e);
- return null;
- }
- }
-
- private synchronized void destroyTunnelNetwork(Connection conn, String bridgeName) {
- try {
- Network nw = findOrCreateTunnelNetwork(conn, bridgeName);
- String bridge = nw.getBridge(conn);
- String result = callHostPlugin(conn, "ovstunnel", "destroy_ovs_bridge", "bridge", bridge);
- String[] res = result.split(":");
- if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) {
- //TODO: Should make this error not fatal?
- //Can Concurrent VM shutdown/migration/reboot events can cause this method
- //to be executed on a bridge which has already been removed?
- throw new CloudRuntimeException("Unable to remove OVS bridge " + bridge + ":" + res);
- }
- return;
- } catch (Exception e) {
- s_logger.warn("destroyTunnelNetwork failed:", e);
- return;
- }
- }
-
- protected Network getNetwork(Connection conn, NicTO nic) throws XenAPIException, XmlRpcException {
- String name = nic.getName();
- XsLocalNetwork network = getNativeNetworkForTraffic(conn, nic.getType(), name);
- if (network == null) {
- s_logger.error("Network is not configured on the backend for nic " + nic.toString());
- throw new CloudRuntimeException("Network for the backend is not configured correctly for network broadcast domain: " + nic.getBroadcastUri());
- }
- URI uri = nic.getBroadcastUri();
- BroadcastDomainType type = nic.getBroadcastType();
- if (uri != null && uri.toString().contains("untagged")) {
- return network.getNetwork();
- } else if (type == BroadcastDomainType.Vlan) {
- assert (BroadcastDomainType.getSchemeValue(uri) == BroadcastDomainType.Vlan);
- long vlan = Long.parseLong(BroadcastDomainType.getValue(uri));
- return enableVlanNetwork(conn, vlan, network);
- } else if (type == BroadcastDomainType.Native || type == BroadcastDomainType.LinkLocal) {
- return network.getNetwork();
- } else if (type == BroadcastDomainType.Vswitch) {
- String header = uri.toString().substring(Networks.BroadcastDomainType.Vswitch.scheme().length() + "://".length());
- if (header.startsWith("vlan")) {
- _isOvs = true;
- return setupvSwitchNetwork(conn);
- } else {
- return findOrCreateTunnelNetwork(conn, getOvsTunnelNetworkName(uri.getAuthority()));
- }
- } else if (type == BroadcastDomainType.Storage) {
- if (uri == null) {
- return network.getNetwork();
- } else {
- long vlan = Long.parseLong(BroadcastDomainType.getValue(uri));
- return enableVlanNetwork(conn, vlan, network);
- }
- } else if (type == BroadcastDomainType.Lswitch) {
- // Nicira Logical Switch
- return network.getNetwork();
- } else if (type == BroadcastDomainType.Pvlan) {
- assert BroadcastDomainType.getSchemeValue(uri) == BroadcastDomainType.Pvlan;
- // should we consider moving this NetUtils method to BroadcastDomainType?
- long vlan = Long.parseLong(NetUtils.getPrimaryPvlanFromUri(uri));
- return enableVlanNetwork(conn, vlan, network);
- }
-
- throw new CloudRuntimeException("Unable to support this type of network broadcast domain: " + nic.getBroadcastUri());
- }
-
- private String getOvsTunnelNetworkName(String broadcastUri) {
- if (broadcastUri.contains(".")) {
- String[] parts = broadcastUri.split("\\.");
- return "OVS-DR-VPC-Bridge"+parts[0];
- } else {
- try {
- return "OVSTunnel" + broadcastUri;
- } catch (Exception e) {
- return null;
- }
- }
- }
-
- protected VIF createVif(Connection conn, String vmName, VM vm, VirtualMachineTO vmSpec, NicTO nic) throws XmlRpcException, XenAPIException {
- assert (nic.getUuid() != null) : "Nic should have a uuid value";
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Creating VIF for " + vmName + " on nic " + nic);
- }
- VIF.Record vifr = new VIF.Record();
- vifr.VM = vm;
- vifr.device = Integer.toString(nic.getDeviceId());
- vifr.MAC = nic.getMac();
-
- // Nicira needs these IDs to find the NIC
- vifr.otherConfig = new HashMap<String, String>();
- vifr.otherConfig.put("nicira-iface-id", nic.getUuid());
- vifr.otherConfig.put("nicira-vm-id", vm.getUuid(conn));
- // Provide XAPI with the cloudstack vm and nic uids.
- vifr.otherConfig.put("cloudstack-nic-id", nic.getUuid());
- if (vmSpec != null) {
- vifr.otherConfig.put("cloudstack-vm-id", vmSpec.getUuid());
- }
-
- // OVS plugin looks at network UUID in the vif 'otherconfig' details to group VIF's & tunnel ports as part of tier
- // when bridge is setup for distributed routing
- vifr.otherConfig.put("cloudstack-network-id", nic.getNetworkUuid());
-
- vifr.network = getNetwork(conn, nic);
-
- if (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) {
- vifr.qosAlgorithmType = "ratelimit";
- vifr.qosAlgorithmParams = new HashMap<String, String>();
- // convert mbs to kilobyte per second
- vifr.qosAlgorithmParams.put("kbps", Integer.toString(nic.getNetworkRateMbps() * 128));
- }
-
- vifr.lockingMode = Types.VifLockingMode.NETWORK_DEFAULT;
- VIF vif = VIF.create(conn, vifr);
- if (s_logger.isDebugEnabled()) {
- vifr = vif.getRecord(conn);
- s_logger.debug("Created a vif " + vifr.uuid + " on " + nic.getDeviceId());
- }
-
- return vif;
- }
-
- protected void prepareISO(Connection conn, String vmName) throws XmlRpcException, XenAPIException {
-
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- if (vms == null || vms.size() != 1) {
- throw new CloudRuntimeException("There are " + ((vms == null) ? "0" : vms.size()) + " VMs named " + vmName);
- }
- VM vm = vms.iterator().next();
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
- if (vbdr.type == Types.VbdType.CD && vbdr.empty == false) {
- VDI vdi = vbdr.VDI;
- SR sr = vdi.getSR(conn);
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds == null) {
- throw new CloudRuntimeException("There is no pbd for sr " + sr);
- }
- for (PBD pbd : pbds) {
- PBD.Record pbdr = pbd.getRecord(conn);
- if (pbdr.host.getUuid(conn).equals(_host.uuid)) {
- return;
- }
- }
- sr.setShared(conn, true);
- Host host = Host.getByUuid(conn, _host.uuid);
- PBD.Record pbdr = pbds.iterator().next().getRecord(conn);
- pbdr.host = host;
- pbdr.uuid = "";
- PBD pbd = PBD.create(conn, pbdr);
- pbdPlug(conn, pbd, pbd.getUuid(conn));
- break;
- }
- }
- }
-
- protected VDI mount(Connection conn, String vmName, DiskTO volume) throws XmlRpcException, XenAPIException {
- DataTO data = volume.getData();
- Volume.Type type = volume.getType();
- if (type == Volume.Type.ISO) {
- TemplateObjectTO iso = (TemplateObjectTO)data;
- DataStoreTO store = iso.getDataStore();
-
- if (store == null) {
- //It's a fake iso
- return null;
- }
-
- //corer case, xenserver pv driver iso
- String templateName = iso.getName();
- if (templateName.startsWith("xs-tools")) {
- try {
- Set<VDI> vdis = VDI.getByNameLabel(conn, templateName);
- if (vdis.isEmpty()) {
- throw new CloudRuntimeException("Could not find ISO with URL: " + templateName);
- }
- return vdis.iterator().next();
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to get pv iso: " + templateName + " due to " + e.toString());
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to get pv iso: " + templateName + " due to " + e.toString());
- }
- }
-
- if (!(store instanceof NfsTO)) {
- throw new CloudRuntimeException("only support mount iso on nfs");
- }
- NfsTO nfsStore = (NfsTO)store;
- String isoPath = nfsStore.getUrl() + File.separator + iso.getPath();
- int index = isoPath.lastIndexOf("/");
-
- String mountpoint = isoPath.substring(0, index);
- URI uri;
- try {
- uri = new URI(mountpoint);
- } catch (URISyntaxException e) {
- throw new CloudRuntimeException("Incorrect uri " + mountpoint, e);
- }
- SR isoSr = createIsoSRbyURI(conn, uri, vmName, false);
-
- String isoname = isoPath.substring(index + 1);
-
- VDI isoVdi = getVDIbyLocationandSR(conn, isoname, isoSr);
-
- if (isoVdi == null) {
- throw new CloudRuntimeException("Unable to find ISO " + isoPath);
- }
- return isoVdi;
- } else {
- VolumeObjectTO vol = (VolumeObjectTO)data;
- return VDI.getByUuid(conn, vol.getPath());
- }
- }
-
- protected VBD createVbd(Connection conn, DiskTO volume, String vmName, VM vm, BootloaderType bootLoaderType, VDI vdi) throws XmlRpcException, XenAPIException {
- Volume.Type type = volume.getType();
-
- if (vdi == null) {
- vdi = mount(conn, vmName, volume);
- }
-
- if (vdi != null) {
- if ("detached".equals(vdi.getNameLabel(conn))) {
- vdi.setNameLabel(conn, vmName + "-DATA");
- }
-
- Map<String, String> smConfig = vdi.getSmConfig(conn);
- for (String key : smConfig.keySet()) {
- if (key.startsWith("host_")) {
- vdi.removeFromSmConfig(conn, key);
- break;
- }
- }
- }
- VBD.Record vbdr = new VBD.Record();
- vbdr.VM = vm;
- if (vdi != null) {
- vbdr.VDI = vdi;
- } else {
- vbdr.empty = true;
- }
- if (type == Volume.Type.ROOT && bootLoaderType == BootloaderType.PyGrub) {
- vbdr.bootable = true;
- } else if (type == Volume.Type.ISO && bootLoaderType == BootloaderType.CD) {
- vbdr.bootable = true;
- }
-
- vbdr.userdevice = Long.toString(volume.getDiskSeq());
- if (volume.getType() == Volume.Type.ISO) {
- vbdr.mode = Types.VbdMode.RO;
- vbdr.type = Types.VbdType.CD;
- } else if (volume.getType() == Volume.Type.ROOT) {
- vbdr.mode = Types.VbdMode.RW;
- vbdr.type = Types.VbdType.DISK;
- vbdr.unpluggable = false;
- } else {
- vbdr.mode = Types.VbdMode.RW;
- vbdr.type = Types.VbdType.DISK;
- vbdr.unpluggable = true;
- }
- VBD vbd = VBD.create(conn, vbdr);
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VBD " + vbd.getUuid(conn) + " created for " + volume);
- }
-
- return vbd;
- }
-
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- return dynamicMaxRam;
- }
-
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- return dynamicMinRam;
- }
-
- protected HashMap<String, HashMap<String, VgpuTypesInfo>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
- return null;
- }
-
- protected void createVGPU(Connection conn, StartCommand cmd, VM vm, GPUDeviceTO gpuDevice) throws XenAPIException, XmlRpcException {
- }
-
- protected VM createVmFromTemplate(Connection conn, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
- String guestOsTypeName = getGuestOsType(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD);
- Set<VM> templates = VM.getByNameLabel(conn, guestOsTypeName);
- assert templates.size() == 1 : "Should only have 1 template but found " + templates.size();
- VM template = templates.iterator().next();
-
- VM.Record vmr = template.getRecord(conn);
- vmr.affinity = host;
- vmr.otherConfig.remove("disks");
- vmr.otherConfig.remove("default_template");
- vmr.otherConfig.remove("mac_seed");
- vmr.isATemplate = false;
- vmr.nameLabel = vmSpec.getName();
- vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
- vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
-
- if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
- //scaling is allowed
- vmr.memoryStaticMin = getStaticMin(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
- vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam());
- vmr.memoryDynamicMin = vmSpec.getMinRam();
- vmr.memoryDynamicMax = vmSpec.getMaxRam();
- } else {
- //scaling disallowed, set static memory target
- if (vmSpec.isEnableDynamicallyScaleVm() && !isDmcEnabled(conn, host)) {
- s_logger.warn("Host " + host.getHostname(conn) + " does not support dynamic scaling, so the vm " + vmSpec.getName() + " is not dynamically scalable");
- }
- vmr.memoryStaticMin = vmSpec.getMinRam();
- vmr.memoryStaticMax = vmSpec.getMaxRam();
- vmr.memoryDynamicMin = vmSpec.getMinRam();
- vmr.memoryDynamicMax = vmSpec.getMaxRam();
- }
-
- if (guestOsTypeName.toLowerCase().contains("windows")) {
- vmr.VCPUsMax = (long)vmSpec.getCpus();
- } else {
- // XenServer has a documented limit of 16 vcpus per vm
- vmr.VCPUsMax = 2L * vmSpec.getCpus();
- if (vmr.VCPUsMax > 16)
- {
- vmr.VCPUsMax = 16L;
- }
- }
-
- vmr.VCPUsAtStartup = (long)vmSpec.getCpus();
- vmr.consoles.clear();
-
- VM vm = VM.create(conn, vmr);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Created VM " + vm.getUuid(conn) + " for " + vmSpec.getName());
- }
-
- Map<String, String> vcpuParams = new HashMap<String, String>();
-
- Integer speed = vmSpec.getMinSpeed();
- if (speed != null) {
-
- int cpuWeight = _maxWeight; // cpu_weight
- int utilization = 0; // max CPU cap, default is unlimited
-
- // weight based allocation, CPU weight is calculated per VCPU
- cpuWeight = (int)((speed * 0.99) / _host.speed * _maxWeight);
- if (cpuWeight > _maxWeight) {
- cpuWeight = _maxWeight;
- }
-
- if (vmSpec.getLimitCpuUse()) {
- // CPU cap is per VM, so need to assign cap based on the number of vcpus
- utilization = (int)((vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus()) / _host.speed * 100);
- }
-
- vcpuParams.put("weight", Integer.toString(cpuWeight));
- vcpuParams.put("cap", Integer.toString(utilization));
-
- }
-
- if (vcpuParams.size() > 0) {
- vm.setVCPUsParams(conn, vcpuParams);
- }
-
- String bootArgs = vmSpec.getBootArgs();
- if (bootArgs != null && bootArgs.length() > 0) {
- String pvargs = vm.getPVArgs(conn);
- pvargs = pvargs + vmSpec.getBootArgs().replaceAll(" ", "%");
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("PV args are " + pvargs);
- }
- vm.setPVArgs(conn, pvargs);
- }
-
- if (!(guestOsTypeName.startsWith("Windows") || guestOsTypeName.startsWith("Citrix") || guestOsTypeName.startsWith("Other"))) {
- if (vmSpec.getBootloader() == BootloaderType.CD) {
- DiskTO[] disks = vmSpec.getDisks();
- for (DiskTO disk : disks) {
- if (disk.getType() == Volume.Type.ISO) {
- TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
- String osType = iso.getGuestOsType();
- if (osType != null) {
- String isoGuestOsName = getGuestOsType(osType, vmSpec.getBootloader() == BootloaderType.CD);
- if (!isoGuestOsName.equals(guestOsTypeName)) {
- vmSpec.setBootloader(BootloaderType.PyGrub);
- }
- }
- }
- }
- }
- if (vmSpec.getBootloader() == BootloaderType.CD) {
- vm.setPVBootloader(conn, "eliloader");
- if (!vm.getOtherConfig(conn).containsKey("install-repository")) {
- vm.addToOtherConfig(conn, "install-repository", "cdrom");
- }
- } else if (vmSpec.getBootloader() == BootloaderType.PyGrub) {
- vm.setPVBootloader(conn, "pygrub");
- } else {
- vm.destroy(conn);
- throw new CloudRuntimeException("Unable to handle boot loader type: " + vmSpec.getBootloader());
- }
- }
- try {
- finalizeVmMetaData(vm, conn, vmSpec);
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to finalize VM MetaData: " + vmSpec);
- }
- return vm;
- }
-
-
- protected void finalizeVmMetaData(VM vm, Connection conn, VirtualMachineTO vmSpec) throws Exception {
-
- Map<String, String> details = vmSpec.getDetails();
- if (details != null) {
- String platformstring = details.get("platform");
- if (platformstring != null && !platformstring.isEmpty()) {
- Map<String, String> platform = StringUtils.stringToMap(platformstring);
- vm.setPlatform(conn, platform);
- } else {
- String timeoffset = details.get("timeoffset");
- if (timeoffset != null) {
- Map<String, String> platform = vm.getPlatform(conn);
- platform.put("timeoffset", timeoffset);
- vm.setPlatform(conn, platform);
- }
- String coresPerSocket = details.get("cpu.corespersocket");
- if (coresPerSocket != null) {
- Map<String, String> platform = vm.getPlatform(conn);
- platform.put("cores-per-socket", coresPerSocket);
- vm.setPlatform(conn, platform);
- }
- }
- String xentoolsversion = details.get("hypervisortoolsversion");
- if (xentoolsversion == null || !xentoolsversion.equalsIgnoreCase("xenserver61")) {
- Map<String, String> platform = vm.getPlatform(conn);
- platform.remove("device_id");
- vm.setPlatform(conn, platform);
- }
- }
- }
-
- protected String handleVmStartFailure(Connection conn, String vmName, VM vm, String message, Throwable th) {
- String msg = "Unable to start " + vmName + " due to " + message;
- s_logger.warn(msg, th);
-
- if (vm == null) {
- return msg;
- }
-
- try {
- VM.Record vmr = vm.getRecord(conn);
- List<Network> networks = new ArrayList<Network>();
- for (VIF vif : vmr.VIFs) {
- try {
- VIF.Record rec = vif.getRecord(conn);
- networks.add(rec.network);
- } catch (Exception e) {
- s_logger.warn("Unable to cleanup VIF", e);
- }
- }
- if (vmr.powerState == VmPowerState.RUNNING) {
- try {
- vm.hardShutdown(conn);
- } catch (Exception e) {
- s_logger.warn("VM hardshutdown failed due to ", e);
- }
- }
- if (vm.getPowerState(conn) == VmPowerState.HALTED) {
- try {
- vm.destroy(conn);
- } catch (Exception e) {
- s_logger.warn("VM destroy failed due to ", e);
- }
- }
- for (VBD vbd : vmr.VBDs) {
- try {
- vbd.unplug(conn);
- vbd.destroy(conn);
- } catch (Exception e) {
- s_logger.warn("Unable to clean up VBD due to ", e);
- }
- }
- for (VIF vif : vmr.VIFs) {
- try {
- vif.unplug(conn);
- vif.destroy(conn);
- } catch (Exception e) {
- s_logger.warn("Unable to cleanup VIF", e);
- }
- }
- for (Network network : networks) {
- if (network.getNameLabel(conn).startsWith("VLAN")) {
- disableVlanNetwork(conn, network);
- }
- }
- } catch (Exception e) {
- s_logger.warn("VM getRecord failed due to ", e);
- }
-
- return msg;
- }
-
- protected VBD createPatchVbd(Connection conn, String vmName, VM vm) throws XmlRpcException, XenAPIException {
-
- if (_host.systemvmisouuid == null) {
- Set<SR> srs = SR.getByNameLabel(conn, "XenServer Tools");
- if (srs.size() != 1) {
- throw new CloudRuntimeException("There are " + srs.size() + " SRs with name XenServer Tools");
- }
- SR sr = srs.iterator().next();
- sr.scan(conn);
-
- SR.Record srr = sr.getRecord(conn);
-
- if (_host.systemvmisouuid == null) {
- for (VDI vdi : srr.VDIs) {
- VDI.Record vdir = vdi.getRecord(conn);
- if (vdir.nameLabel.contains("systemvm.iso")) {
- _host.systemvmisouuid = vdir.uuid;
- break;
- }
- }
- }
- if (_host.systemvmisouuid == null) {
- throw new CloudRuntimeException("can not find systemvmiso");
- }
- }
-
- VBD.Record cdromVBDR = new VBD.Record();
- cdromVBDR.VM = vm;
- cdromVBDR.empty = true;
- cdromVBDR.bootable = false;
- cdromVBDR.userdevice = "3";
- cdromVBDR.mode = Types.VbdMode.RO;
- cdromVBDR.type = Types.VbdType.CD;
- VBD cdromVBD = VBD.create(conn, cdromVBDR);
- cdromVBD.insert(conn, VDI.getByUuid(conn, _host.systemvmisouuid));
-
- return cdromVBD;
- }
-
- protected void destroyPatchVbd(Connection conn, String vmName) throws XmlRpcException, XenAPIException {
- try {
- if (!vmName.startsWith("r-") && !vmName.startsWith("s-") && !vmName.startsWith("v-")) {
- return;
- }
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- for (VM vm : vms) {
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- if (vbd.getType(conn) == Types.VbdType.CD) {
- vbd.eject(conn);
- vbd.destroy(conn);
- break;
- }
- }
- }
- } catch (Exception e) {
- s_logger.debug("Cannot destory CD-ROM device for VM " + vmName + " due to " + e.toString(), e);
- }
- }
-
- protected CheckSshAnswer execute(CheckSshCommand cmd) {
- Connection conn = getConnection();
- String vmName = cmd.getName();
- String privateIp = cmd.getIp();
- int cmdPort = cmd.getPort();
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort);
- }
-
- try {
- String result = connect(conn, cmd.getName(), privateIp, cmdPort);
- if (result != null) {
- return new CheckSshAnswer(cmd, "Can not ping System vm " + vmName + "due to:" + result);
- }
- destroyPatchVbd(conn, vmName);
- } catch (Exception e) {
- return new CheckSshAnswer(cmd, e);
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Ping command port succeeded for vm " + vmName);
- }
-
- return new CheckSshAnswer(cmd);
- }
-
- private HashMap<String, String> parseDefaultOvsRuleComamnd(String str) {
- HashMap<String, String> cmd = new HashMap<String, String>();
- String[] sarr = str.split("/");
- for (int i = 0; i < sarr.length; i++) {
- String c = sarr[i];
- c = c.startsWith("/") ? c.substring(1) : c;
- c = c.endsWith("/") ? c.substring(0, c.length() - 1) : c;
- String[] p = c.split(";");
- if (p.length != 2) {
- continue;
- }
- if (p[0].equalsIgnoreCase("vlans")) {
- p[1] = p[1].replace("@", "[");
- p[1] = p[1].replace("#", "]");
- }
- cmd.put(p[0], p[1]);
- }
- return cmd;
- }
-
- private void cleanUpTmpDomVif(Connection conn, Network nw) {
- List<VIF> vifs;
- synchronized (_tmpDom0Vif) {
- vifs = _tmpDom0Vif;
- _tmpDom0Vif = new ArrayList<VIF>();
- }
-
- for (VIF v : vifs) {
- String vifName = "unknown";
- try {
- VIF.Record vifr = v.getRecord(conn);
- if (v.getNetwork(conn).getUuid(conn).equals(nw.getUuid(conn))) {
- Map<String, String> config = vifr.otherConfig;
- vifName = config.get("nameLabel");
- s_logger.debug("A VIF in dom0 for the network is found - so destroy the vif");
- v.destroy(conn);
- s_logger.debug("Destroy temp dom0 vif" + vifName + " success");
- }
- } catch (Exception e) {
- s_logger.warn("Destroy temp dom0 vif " + vifName + "failed", e);
- }
- }
- }
-
- private Answer execute(PvlanSetupCommand cmd) {
- Connection conn = getConnection();
-
- String primaryPvlan = cmd.getPrimary();
- String isolatedPvlan = cmd.getIsolated();
- String op = cmd.getOp();
- String dhcpName = cmd.getDhcpName();
- String dhcpMac = cmd.getDhcpMac();
- String dhcpIp = cmd.getDhcpIp();
- String vmMac = cmd.getVmMac();
- String networkTag = cmd.getNetworkTag();
-
- XsLocalNetwork nw = null;
- String nwNameLabel = null;
- try {
- nw = getNativeNetworkForTraffic(conn, TrafficType.Guest, networkTag);
- nwNameLabel = nw.getNetwork().getNameLabel(conn);
- } catch (XenAPIException e) {
- s_logger.warn("Fail to get network", e);
- return new Answer(cmd, false, e.toString());
- } catch (XmlRpcException e) {
- s_logger.warn("Fail to get network", e);
- return new Answer(cmd, false, e.toString());
- }
-
- String result = null;
- if (cmd.getType() == PvlanSetupCommand.Type.DHCP) {
- result =
- callHostPlugin(conn, "ovs-pvlan", "setup-pvlan-dhcp", "op", op, "nw-label", nwNameLabel, "primary-pvlan", primaryPvlan, "isolated-pvlan", isolatedPvlan,
- "dhcp-name", dhcpName, "dhcp-ip", dhcpIp, "dhcp-mac", dhcpMac);
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to program pvlan for dhcp server with mac " + dhcpMac);
- return new Answer(cmd, false, result);
- } else {
- s_logger.info("Programmed pvlan for dhcp server with mac " + dhcpMac);
- }
- } else if (cmd.getType() == PvlanSetupCommand.Type.VM) {
- result =
- callHostPlugin(conn, "ovs-pvlan", "setup-pvlan-vm", "op", op, "nw-label", nwNameLabel, "primary-pvlan", primaryPvlan, "isolated-pvlan", isolatedPvlan,
- "vm-mac", vmMac);
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to program pvlan for vm with mac " + vmMac);
- return new Answer(cmd, false, result);
- } else {
- s_logger.info("Programmed pvlan for vm with mac " + vmMac);
- }
- }
- return new Answer(cmd, true, result);
- }
-
- @Override
- public StartAnswer execute(StartCommand cmd) {
- Connection conn = getConnection();
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- String vmName = vmSpec.getName();
- State state = State.Stopped;
- VM vm = null;
- // if a VDI is created, record its UUID to send back to the CS MS
- Map<String, String> iqnToPath = new HashMap<String, String>();
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- if (vms != null) {
- for (VM v : vms) {
- VM.Record vRec = v.getRecord(conn);
- if (vRec.powerState == VmPowerState.HALTED) {
- v.destroy(conn);
- } else if (vRec.powerState == VmPowerState.RUNNING) {
- String host = vRec.residentOn.getUuid(conn);
- String msg = "VM " + vmName + " is runing on host " + host;
- s_logger.debug(msg);
- return new StartAnswer(cmd, msg, host);
- } else {
- String msg = "There is already a VM having the same name " + vmName + " vm record " + vRec.toString();
- s_logger.warn(msg);
- return new StartAnswer(cmd, msg);
- }
- }
- }
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Starting);
- }
- s_logger.debug("1. The VM " + vmName + " is in Starting state.");
-
- Host host = Host.getByUuid(conn, _host.uuid);
- vm = createVmFromTemplate(conn, vmSpec, host);
-
- GPUDeviceTO gpuDevice = vmSpec.getGpuDevice();
- if (gpuDevice != null) {
- s_logger.debug("Creating VGPU for of VGPU type: " + gpuDevice.getVgpuType() + " in GPU group "
- + gpuDevice.getGpuGroup() + " for VM " + vmName );
- createVGPU(conn, cmd, vm, gpuDevice);
- }
-
- for (DiskTO disk : vmSpec.getDisks()) {
- VDI newVdi = prepareManagedDisk(conn, disk, vmName);
-
- if (newVdi != null) {
- String path = newVdi.getUuid(conn);
-
- iqnToPath.put(disk.getDetails().get(DiskTO.IQN), path);
- }
-
- createVbd(conn, disk, vmName, vm, vmSpec.getBootloader(), newVdi);
- }
-
- if (vmSpec.getType() != VirtualMachine.Type.User) {
- createPatchVbd(conn, vmName, vm);
- }
-
- for (NicTO nic : vmSpec.getNics()) {
- createVif(conn, vmName, vm, vmSpec, nic);
- }
-
- startVM(conn, host, vm, vmName);
-
- if (_isOvs) {
- // TODO(Salvatore-orlando): This code should go
- for (NicTO nic : vmSpec.getNics()) {
- if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vswitch) {
- HashMap<String, String> args = parseDefaultOvsRuleComamnd(BroadcastDomainType.getValue(nic.getBroadcastUri()));
- OvsSetTagAndFlowCommand flowCmd =
- new OvsSetTagAndFlowCommand(args.get("vmName"), args.get("tag"), args.get("vlans"), args.get("seqno"), Long.parseLong(args.get("vmId")));
- OvsSetTagAndFlowAnswer r = execute(flowCmd);
- if (!r.getResult()) {
- s_logger.warn("Failed to set flow for VM " + r.getVmId());
- } else {
- s_logger.info("Success to set flow for VM " + r.getVmId());
- }
- }
- }
- }
-
- if (_canBridgeFirewall) {
- String result = null;
- if (vmSpec.getType() != VirtualMachine.Type.User) {
- NicTO[] nics = vmSpec.getNics();
- boolean secGrpEnabled = false;
- for (NicTO nic : nics) {
- if (nic.isSecurityGroupEnabled() ||
- (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) {
- secGrpEnabled = true;
- break;
- }
- }
- if (secGrpEnabled) {
- result = callHostPlugin(conn, "vmops", "default_network_rules_systemvm", "vmName", vmName);
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to program default network rules for " + vmName);
- } else {
- s_logger.info("Programmed default network rules for " + vmName);
- }
- }
-
- } else {
- //For user vm, program the rules for each nic if the isolation uri scheme is ec2
- NicTO[] nics = vmSpec.getNics();
- for (NicTO nic : nics) {
- if (nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null &&
- nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) {
- List<String> nicSecIps = nic.getNicSecIps();
- String secIpsStr;
- StringBuilder sb = new StringBuilder();
- if (nicSecIps != null) {
- for (String ip : nicSecIps) {
- sb.append(ip).append(":");
- }
- secIpsStr = sb.toString();
- } else {
- secIpsStr = "0:";
- }
- result =
- callHostPlugin(conn, "vmops", "default_network_rules", "vmName", vmName, "vmIP", nic.getIp(), "vmMAC", nic.getMac(), "vmID",
- Long.toString(vmSpec.getId()), "secIps", secIpsStr);
-
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to program default network rules for " + vmName + " on nic with ip:" + nic.getIp() + " mac:" + nic.getMac());
- } else {
- s_logger.info("Programmed default network rules for " + vmName + " on nic with ip:" + nic.getIp() + " mac:" + nic.getMac());
- }
- }
- }
- }
- }
-
- state = State.Running;
-
- StartAnswer startAnswer = new StartAnswer(cmd);
-
- startAnswer.setIqnToPath(iqnToPath);
-
- return startAnswer;
- } catch (Exception e) {
- s_logger.warn("Catch Exception: " + e.getClass().toString() + " due to " + e.toString(), e);
- String msg = handleVmStartFailure(conn, vmName, vm, "", e);
-
- StartAnswer startAnswer = new StartAnswer(cmd, msg);
-
- startAnswer.setIqnToPath(iqnToPath);
-
- return startAnswer;
- } finally {
- synchronized (_cluster.intern()) {
- if (state != State.Stopped) {
- s_vms.put(_cluster, _name, vmName, state);
- s_logger.debug("2. The VM " + vmName + " is in " + state + " state.");
- } else {
- s_vms.remove(_cluster, _name, vmName);
- s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName);
- }
- }
- }
- }
-
- // the idea here is to see if the DiskTO in question is from managed storage and
- // does not yet have an SR
- // if no SR, create it and create a VDI in it
- private VDI prepareManagedDisk(Connection conn, DiskTO disk, String vmName) throws Exception {
- Map<String, String> details = disk.getDetails();
-
- if (details == null) {
- return null;
- }
-
- boolean isManaged = new Boolean(details.get(DiskTO.MANAGED)).booleanValue();
-
- if (!isManaged) {
- return null;
- }
-
- String iqn = details.get(DiskTO.IQN);
-
- Set<SR> srNameLabels = SR.getByNameLabel(conn, iqn);
-
- if (srNameLabels.size() != 0) {
- return null;
- }
-
- String vdiNameLabel = vmName + "-DATA";
-
- return prepareManagedStorage(conn, details, null, vdiNameLabel);
- }
-
- protected SR prepareManagedSr(Connection conn, Map<String, String> details) {
- String iScsiName = details.get(DiskTO.IQN);
- String storageHost = details.get(DiskTO.STORAGE_HOST);
- String chapInitiatorUsername = details.get(DiskTO.CHAP_INITIATOR_USERNAME);
- String chapInitiatorSecret = details.get(DiskTO.CHAP_INITIATOR_SECRET);
-
- return getIscsiSR(conn, iScsiName, storageHost, iScsiName, chapInitiatorUsername, chapInitiatorSecret, true);
- }
-
- protected VDI prepareManagedStorage(Connection conn, Map<String, String> details, String path, String vdiNameLabel) throws Exception {
- SR sr = prepareManagedSr(conn, details);
-
- VDI vdi = getVDIbyUuid(conn, path, false);
-
- if (vdi == null) {
- Long volumeSize = Long.parseLong(details.get(DiskTO.VOLUME_SIZE));
-
- vdi = createVdi(sr, vdiNameLabel, volumeSize);
- }
-
- return vdi;
- }
-
- protected Answer execute(ModifySshKeysCommand cmd) {
- return new Answer(cmd);
- }
-
- private boolean doPingTest(Connection conn, final String computingHostIp) {
- com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.ip, 22);
- try {
- sshConnection.connect(null, 60000, 60000);
- if (!sshConnection.authenticateWithPassword(_username, _password.peek())) {
- throw new CloudRuntimeException("Unable to authenticate");
- }
-
- String cmd = "ping -c 2 " + computingHostIp;
- if (!SSHCmdHelper.sshExecuteCmd(sshConnection, cmd)) {
- throw new CloudRuntimeException("Cannot ping host " + computingHostIp + " from host " + _host.ip);
- }
- return true;
- } catch (Exception e) {
- s_logger.warn("Catch exception " + e.toString(), e);
- return false;
- } finally {
- sshConnection.close();
- }
- }
-
- protected CheckOnHostAnswer execute(CheckOnHostCommand cmd) {
- return new CheckOnHostAnswer(cmd, null, "Not Implmeneted");
- }
-
- private boolean doPingTest(Connection conn, final String domRIp, final String vmIp) {
- String args = "-i " + domRIp + " -p " + vmIp;
- String result = callHostPlugin(conn, "vmops", "pingtest", "args", args);
- if (result == null || result.isEmpty()) {
- return false;
- }
- return true;
- }
-
- private Answer execute(PingTestCommand cmd) {
- Connection conn = getConnection();
- boolean result = false;
- final String computingHostIp = cmd.getComputingHostIp();
-
- if (computingHostIp != null) {
- result = doPingTest(conn, computingHostIp);
- } else {
- result = doPingTest(conn, cmd.getRouterIp(), cmd.getPrivateIp());
- }
-
- if (!result) {
- return new Answer(cmd, false, "PingTestCommand failed");
- }
- return new Answer(cmd);
- }
-
- protected MaintainAnswer execute(MaintainCommand cmd) {
- Connection conn = getConnection();
- try {
-
- Host host = Host.getByUuid(conn, _host.uuid);
- // remove all tags cloud stack
- Host.Record hr = host.getRecord(conn);
- Iterator<String> it = hr.tags.iterator();
- while (it.hasNext()) {
- String tag = it.next();
- if (tag.contains("cloud")) {
- it.remove();
- }
- }
- host.setTags(conn, hr.tags);
- return new MaintainAnswer(cmd);
- } catch (XenAPIException e) {
- s_logger.warn("Unable to put server in maintainence mode", e);
- return new MaintainAnswer(cmd, false, e.getMessage());
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to put server in maintainence mode", e);
- return new MaintainAnswer(cmd, false, e.getMessage());
- }
- }
-
- protected String networkUsage(Connection conn, final String privateIpAddress, final String option, final String vif) {
- if (option.equals("get")) {
- return "0:0";
- }
- return null;
- }
-
- protected ExecutionResult prepareNetworkElementCommand(IpAssocCommand cmd) {
- Connection conn = getConnection();
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
-
- try {
- IpAddressTO[] ips = cmd.getIpAddresses();
- for (IpAddressTO ip : ips) {
-
- VM router = getVM(conn, routerName);
-
- NicTO nic = new NicTO();
- nic.setMac(ip.getVifMacAddress());
- nic.setType(ip.getTrafficType());
- if (ip.getBroadcastUri()== null) {
- nic.setBroadcastType(BroadcastDomainType.Native);
- } else {
- URI uri = BroadcastDomainType.fromString(ip.getBroadcastUri());
- nic.setBroadcastType(BroadcastDomainType.getSchemeValue(uri));
- nic.setBroadcastUri(uri);
- }
- nic.setDeviceId(0);
- nic.setNetworkRateMbps(ip.getNetworkRate());
- nic.setName(ip.getNetworkName());
-
- Network network = getNetwork(conn, nic);
-
- // Determine the correct VIF on DomR to associate/disassociate the
- // IP address with
- VIF correctVif = getCorrectVif(conn, router, network);
-
- // If we are associating an IP address and DomR doesn't have a VIF
- // for the specified vlan ID, we need to add a VIF
- // If we are disassociating the last IP address in the VLAN, we need
- // to remove a VIF
- boolean addVif = false;
- if (ip.isAdd() && correctVif == null) {
- addVif = true;
- }
-
- if (addVif) {
- // Add a new VIF to DomR
- String vifDeviceNum = getLowestAvailableVIFDeviceNum(conn, router);
-
- if (vifDeviceNum == null) {
- throw new InternalErrorException("There were no more available slots for a new VIF on router: " + router.getNameLabel(conn));
- }
-
- nic.setDeviceId(Integer.valueOf(vifDeviceNum));
-
- correctVif = createVif(conn, routerName, router, null, nic);
- correctVif.plug(conn);
- // Add iptables rule for network usage
- networkUsage(conn, routerIp, "addVif", "eth" + correctVif.getDevice(conn));
- }
-
- if (correctVif == null) {
- throw new InternalErrorException("Failed to find DomR VIF to associate/disassociate IP with.");
- }
-
- ip.setNicDevId(Integer.valueOf(correctVif.getDevice(conn)));
- ip.setNewNic(addVif);
- }
- } catch (InternalErrorException e) {
- s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e);
- return new ExecutionResult(false, e.getMessage());
- } catch (Exception e) {
- return new ExecutionResult(false, e.getMessage());
- }
- return new ExecutionResult(true, null);
- }
-
- protected ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) {
- Connection conn = getConnection();
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
- try {
- IpAddressTO[] ips = cmd.getIpAddresses();
- int ipsCount = ips.length;
- for (IpAddressTO ip : ips) {
-
- VM router = getVM(conn, routerName);
-
- NicTO nic = new NicTO();
- nic.setMac(ip.getVifMacAddress());
- nic.setType(ip.getTrafficType());
- if (ip.getBroadcastUri()== null) {
- nic.setBroadcastType(BroadcastDomainType.Native);
- } else {
- URI uri = BroadcastDomainType.fromString(ip.getBroadcastUri());
- nic.setBroadcastType(BroadcastDomainType.getSchemeValue(uri));
- nic.setBroadcastUri(uri);
- }
- nic.setDeviceId(0);
- nic.setNetworkRateMbps(ip.getNetworkRate());
- nic.setName(ip.getNetworkName());
-
- Network network = getNetwork(conn, nic);
-
- // Determine the correct VIF on DomR to associate/disassociate the
- // IP address with
- VIF correctVif = getCorrectVif(conn, router, network);
-
- // If we are disassociating the last IP address in the VLAN, we need
- // to remove a VIF
- boolean removeVif = false;
-
- //there is only one ip in this public vlan and removing it, so remove the nic
- if (ipsCount == 1 && !ip.isAdd()) {
- removeVif = true;
- }
-
- if (correctVif == null) {
- throw new InternalErrorException("Failed to find DomR VIF to associate/disassociate IP with.");
- }
-
- if (removeVif) {
- network = correctVif.getNetwork(conn);
-
- // Mark this vif to be removed from network usage
- networkUsage(conn, routerIp, "deleteVif", "eth" + correctVif.getDevice(conn));
-
- // Remove the VIF from DomR
- correctVif.unplug(conn);
- correctVif.destroy(conn);
-
- // Disable the VLAN network if necessary
- disableVlanNetwork(conn, network);
- }
- }
- } catch (InternalErrorException e) {
- s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e);
- return new ExecutionResult(false, e.getMessage());
- } catch (Exception e) {
- return new ExecutionResult(false, e.getMessage());
- }
- return new ExecutionResult(true, null);
- }
-
- protected GetVncPortAnswer execute(GetVncPortCommand cmd) {
- Connection conn = getConnection();
- try {
- Set<VM> vms = VM.getByNameLabel(conn, cmd.getName());
- if (vms.size() == 1) {
- String consoleurl;
- consoleurl = "consoleurl=" + getVncUrl(conn, vms.iterator().next()) + "&" + "sessionref=" + conn.getSessionReference();
- return new GetVncPortAnswer(cmd, consoleurl, -1);
- } else {
- return new GetVncPortAnswer(cmd, "There are " + vms.size() + " VMs named " + cmd.getName());
- }
- } catch (Exception e) {
- String msg = "Unable to get vnc port due to " + e.toString();
- s_logger.warn(msg, e);
- return new GetVncPortAnswer(cmd, msg);
- }
- }
-
- protected Storage.StorageResourceType getStorageResourceType() {
- return Storage.StorageResourceType.STORAGE_POOL;
- }
-
- protected CheckHealthAnswer execute(CheckHealthCommand cmd) {
- boolean result = pingXAPI();
- return new CheckHealthAnswer(cmd, result);
- }
-
- protected long[] getNetworkStats(Connection conn, String privateIP) {
- String result = networkUsage(conn, privateIP, "get", null);
- long[] stats = new long[2];
- if (result != null) {
- String[] splitResult = result.split(":");
- int i = 0;
- while (i < splitResult.length - 1) {
- stats[0] += (new Long(splitResult[i++])).longValue();
- stats[1] += (new Long(splitResult[i++])).longValue();
- }
- }
- return stats;
- }
-
- /**
- * This is the method called for getting the HOST stats
- *
- * @param cmd
- * @return
- */
- protected GetHostStatsAnswer execute(GetHostStatsCommand cmd) {
- Connection conn = getConnection();
- try {
- HostStatsEntry hostStats = getHostStats(conn, cmd, cmd.getHostGuid(), cmd.getHostId());
- return new GetHostStatsAnswer(cmd, hostStats);
- } catch (Exception e) {
- String msg = "Unable to get Host stats" + e.toString();
- s_logger.warn(msg, e);
- return new GetHostStatsAnswer(cmd, null);
- }
- }
-
- protected HostStatsEntry getHostStats(Connection conn, GetHostStatsCommand cmd, String hostGuid, long hostId) {
-
- HostStatsEntry hostStats = new HostStatsEntry(hostId, 0, 0, 0, "host", 0, 0, 0, 0);
- Object[] rrdData = getRRDData(conn, 1); // call rrd method with 1 for host
-
- if (rrdData == null) {
- return null;
- }
-
- Integer numRows = (Integer)rrdData[0];
- Integer numColumns = (Integer)rrdData[1];
- Node legend = (Node)rrdData[2];
- Node dataNode = (Node)rrdData[3];
-
- NodeList legendChildren = legend.getChildNodes();
- for (int col = 0; col < numColumns; col++) {
-
- if (legendChildren == null || legendChildren.item(col) == null) {
- continue;
- }
-
- String columnMetadata = getXMLNodeValue(legendChildren.item(col));
-
- if (columnMetadata == null) {
- continue;
- }
-
- String[] columnMetadataList = columnMetadata.split(":");
-
- if (columnMetadataList.length != 4) {
- continue;
- }
-
- String type = columnMetadataList[1];
- String param = columnMetadataList[3];
-
- if (type.equalsIgnoreCase("host")) {
-
- if (param.contains("pif_eth0_rx")) {
- hostStats.setNetworkReadKBs(getDataAverage(dataNode, col, numRows));
- }
-
- if (param.contains("pif_eth0_tx")) {
- hostStats.setNetworkWriteKBs(getDataAverage(dataNode, col, numRows));
- }
-
- if (param.contains("memory_total_kib")) {
- hostStats.setTotalMemoryKBs(getDataAverage(dataNode, col, numRows));
- }
-
- if (param.contains("memory_free_kib")) {
- hostStats.setFreeMemoryKBs(getDataAverage(dataNode, col, numRows));
- }
-
- if (param.contains("cpu")) {
- // hostStats.setNumCpus(hostStats.getNumCpus() + 1);
- hostStats.setCpuUtilization(hostStats.getCpuUtilization() + getDataAverage(dataNode, col, numRows));
- }
-
- /*
- if (param.contains("loadavg")) {
- hostStats.setAverageLoad((hostStats.getAverageLoad() + getDataAverage(dataNode, col, numRows)));
- }
- */
- }
- }
-
- // add the host cpu utilization
- /*
- if (hostStats.getNumCpus() != 0) {
- hostStats.setCpuUtilization(hostStats.getCpuUtilization() / hostStats.getNumCpus());
- s_logger.debug("Host cpu utilization " + hostStats.getCpuUtilization());
- }
- */
-
- return hostStats;
- }
-
- protected GetVmStatsAnswer execute(GetVmStatsCommand cmd) {
- Connection conn = getConnection();
- List<String> vmNames = cmd.getVmNames();
- HashMap<String, VmStatsEntry> vmStatsNameMap = new HashMap<String, VmStatsEntry>();
- if (vmNames.size() == 0) {
- return new GetVmStatsAnswer(cmd, vmStatsNameMap);
- }
- try {
-
- // Determine the UUIDs of the requested VMs
- List<String> vmUUIDs = new ArrayList<String>();
-
- for (String vmName : vmNames) {
- VM vm = getVM(conn, vmName);
- vmUUIDs.add(vm.getUuid(conn));
- }
-
- HashMap<String, VmStatsEntry> vmStatsUUIDMap = getVmStats(conn, cmd, vmUUIDs, cmd.getHostGuid());
- if (vmStatsUUIDMap == null) {
- return new GetVmStatsAnswer(cmd, vmStatsNameMap);
- }
-
- for (String vmUUID : vmStatsUUIDMap.keySet()) {
- vmStatsNameMap.put(vmNames.get(vmUUIDs.indexOf(vmUUID)), vmStatsUUIDMap.get(vmUUID));
- }
-
- return new GetVmStatsAnswer(cmd, vmStatsNameMap);
- } catch (XenAPIException e) {
- String msg = "Unable to get VM stats" + e.toString();
- s_logger.warn(msg, e);
- return new GetVmStatsAnswer(cmd, vmStatsNameMap);
- } catch (XmlRpcException e) {
- String msg = "Unable to get VM stats" + e.getMessage();
- s_logger.warn(msg, e);
- return new GetVmStatsAnswer(cmd, vmStatsNameMap);
- }
- }
-
- protected HashMap<String, VmStatsEntry> getVmStats(Connection conn, GetVmStatsCommand cmd, List<String> vmUUIDs, String hostGuid) {
- HashMap<String, VmStatsEntry> vmResponseMap = new HashMap<String, VmStatsEntry>();
-
- for (String vmUUID : vmUUIDs) {
- vmResponseMap.put(vmUUID, new VmStatsEntry(0, 0, 0, 0, "vm"));
- }
-
- Object[] rrdData = getRRDData(conn, 2); // call rrddata with 2 for vm
-
- if (rrdData == null) {
- return null;
- }
-
- Integer numRows = (Integer)rrdData[0];
- Integer numColumns = (Integer)rrdData[1];
- Node legend = (Node)rrdData[2];
- Node dataNode = (Node)rrdData[3];
-
- NodeList legendChildren = legend.getChildNodes();
- for (int col = 0; col < numColumns; col++) {
-
- if (legendChildren == null || legendChildren.item(col) == null) {
- continue;
- }
-
- String columnMetadata = getXMLNodeValue(legendChildren.item(col));
-
- if (columnMetadata == null) {
- continue;
- }
-
- String[] columnMetadataList = columnMetadata.split(":");
-
- if (columnMetadataList.length != 4) {
- continue;
- }
-
- String type = columnMetadataList[1];
- String uuid = columnMetadataList[2];
- String param = columnMetadataList[3];
-
- if (type.equals("vm") && vmResponseMap.keySet().contains(uuid)) {
- VmStatsEntry vmStatsAnswer = vmResponseMap.get(uuid);
-
- vmStatsAnswer.setEntityType("vm");
-
- if (param.contains("cpu")) {
- vmStatsAnswer.setNumCPUs(vmStatsAnswer.getNumCPUs() + 1);
- vmStatsAnswer.setCPUUtilization(((vmStatsAnswer.getCPUUtilization() + getDataAverage(dataNode, col, numRows))));
- } else if (param.matches("vif_\\d_rx")) {
- vmStatsAnswer.setNetworkReadKBs(vmStatsAnswer.getNetworkReadKBs() + (getDataAverage(dataNode, col, numRows) / (8 * 2)));
- } else if (param.matches("vif_\\d_tx")) {
- vmStatsAnswer.setNetworkWriteKBs(vmStatsAnswer.getNetworkWriteKBs() + (getDataAverage(dataNode, col, numRows) / (8 * 2)));
- }
- }
-
- }
-
- for (String vmUUID : vmResponseMap.keySet()) {
- VmStatsEntry vmStatsAnswer = vmResponseMap.get(vmUUID);
-
- if (vmStatsAnswer.getNumCPUs() != 0) {
- vmStatsAnswer.setCPUUtilization(vmStatsAnswer.getCPUUtilization() / vmStatsAnswer.getNumCPUs());
- }
-
- vmStatsAnswer.setCPUUtilization(vmStatsAnswer.getCPUUtilization() * 100);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Vm cpu utilization " + vmStatsAnswer.getCPUUtilization());
- }
- }
-
- try {
- for (String vmUUID : vmUUIDs) {
- VM vm = VM.getByUuid(conn, vmUUID);
- VmStatsEntry stats = vmResponseMap.get(vmUUID);
- double diskReadKBs = 0;
- double diskWriteKBs = 0;
- for (VBD vbd : vm.getVBDs(conn)) {
- VBDMetrics vbdmetrics = vbd.getMetrics(conn);
- if (!isRefNull(vbdmetrics)) {
- try {
- diskReadKBs += vbdmetrics.getIoReadKbs(conn);
- diskWriteKBs += vbdmetrics.getIoWriteKbs(conn);
- } catch (Types.HandleInvalid e) {
- s_logger.debug("vbdmetrics doesn't exist ");
- }
- }
- }
- if (stats == null) {
- stats = new VmStatsEntry();
- }
- stats.setDiskReadKBs(diskReadKBs);
- stats.setDiskWriteKBs(diskWriteKBs);
- vmResponseMap.put(vmUUID, stats);
- }
- } catch (Exception e) {
- s_logger.warn("Error while collecting disk stats from : ", e);
- return null;
- }
-
- return vmResponseMap;
- }
-
- protected GetVmDiskStatsAnswer execute(GetVmDiskStatsCommand cmd) {
- return new GetVmDiskStatsAnswer(cmd, null, null, null);
- }
-
-
- protected Document getStatsRawXML(Connection conn, boolean host) {
- Date currentDate = new Date();
- String urlStr = "http://" + _host.ip + "/rrd_updates?";
- urlStr += "session_id=" + conn.getSessionReference();
- urlStr += "&host=" + (host ? "true" : "false");
- urlStr += "&cf=" + _consolidationFunction;
- urlStr += "&interval=" + _pollingIntervalInSeconds;
- urlStr += "&start=" + (currentDate.getTime() / 1000 - 1000 - 100);
-
- URL url;
- BufferedReader in = null;
- try {
- url = new URL(urlStr);
- url.openConnection();
- URLConnection uc = url.openConnection();
- in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
- InputSource statsSource = new InputSource(in);
- return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(statsSource);
- } catch (MalformedURLException e) {
- s_logger.warn("Malformed URL? come on...." + urlStr);
- return null;
- } catch (IOException e) {
- s_logger.warn("Problems getting stats using " + urlStr, e);
- return null;
- } catch (SAXException e) {
- s_logger.warn("Problems getting stats using " + urlStr, e);
- return null;
- } catch (ParserConfigurationException e) {
- s_logger.warn("Problems getting stats using " + urlStr, e);
- return null;
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- s_logger.warn("Unable to close the buffer ", e);
- }
- }
- }
- }
-
-
-
- protected Object[] getRRDData(Connection conn, int flag) {
-
- /*
- * Note: 1 => called from host, hence host stats 2 => called from vm, hence vm stats
- */
- Document doc = null;
-
- try {
- doc = getStatsRawXML(conn, flag == 1 ? true : false);
- } catch (Exception e1) {
- s_logger.warn("Error whilst collecting raw stats from plugin: ", e1);
- return null;
- }
-
- if (doc == null) { //stats are null when the host plugin call fails (host down state)
- return null;
- }
-
- NodeList firstLevelChildren = doc.getChildNodes();
- NodeList secondLevelChildren = (firstLevelChildren.item(0)).getChildNodes();
- Node metaNode = secondLevelChildren.item(0);
- Node dataNode = secondLevelChildren.item(1);
-
- Integer numRows = 0;
- Integer numColumns = 0;
- Node legend = null;
- NodeList metaNodeChildren = metaNode.getChildNodes();
- for (int i = 0; i < metaNodeChildren.getLength(); i++) {
- Node n = metaNodeChildren.item(i);
- if (n.getNodeName().equals("rows")) {
- numRows = Integer.valueOf(getXMLNodeValue(n));
- } else if (n.getNodeName().equals("columns")) {
- numColumns = Integer.valueOf(getXMLNodeValue(n));
- } else if (n.getNodeName().equals("legend")) {
- legend = n;
- }
- }
-
- return new Object[] { numRows, numColumns, legend, dataNode };
- }
-
- protected String getXMLNodeValue(Node n) {
- return n.getChildNodes().item(0).getNodeValue();
- }
-
- protected double getDataAverage(Node dataNode, int col, int numRows) {
- double value = 0;
- double dummy = 0;
- int numRowsUsed = 0;
- for (int row = 0; row < numRows; row++) {
- Node data = dataNode.getChildNodes().item(numRows - 1 - row).getChildNodes().item(col + 1);
- Double currentDataAsDouble = Double.valueOf(getXMLNodeValue(data));
- if (!currentDataAsDouble.equals(Double.NaN)) {
- numRowsUsed += 1;
- value += currentDataAsDouble;
- }
- }
-
- if (numRowsUsed == 0) {
- if ((!Double.isInfinite(value)) && (!Double.isNaN(value))) {
- return value;
- } else {
- s_logger.warn("Found an invalid value (infinity/NaN) in getDataAverage(), numRows=0");
- return dummy;
- }
- } else {
- if ((!Double.isInfinite(value / numRowsUsed)) && (!Double.isNaN(value / numRowsUsed))) {
- return (value / numRowsUsed);
- } else {
- s_logger.warn("Found an invalid value (infinity/NaN) in getDataAverage(), numRows>0");
- return dummy;
- }
- }
-
- }
-
- protected State convertToState(Types.VmPowerState ps) {
- final State state = s_statesTable.get(ps);
- return state == null ? State.Unknown : state;
- }
-
- private static PowerState convertPowerState(Types.VmPowerState powerState) {
- return s_powerStatesTable.get(powerState);
- }
-
- protected HashMap<String, HostVmStateReportEntry> getHostVmStateReport(Connection conn) {
-
- // TODO : new VM sync model does not require a cluster-scope report, we need to optimize
- // the report accordingly
- final HashMap<String, HostVmStateReportEntry> vmStates = new HashMap<String, HostVmStateReportEntry>();
- Map<VM, VM.Record> vm_map = null;
- for (int i = 0; i < 2; i++) {
- try {
- vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
- break;
- } catch (final Throwable e) {
- s_logger.warn("Unable to get vms", e);
- }
- try {
- Thread.sleep(1000);
- } catch (final InterruptedException ex) {
-
- }
- }
-
- if (vm_map == null) {
- return vmStates;
- }
- for (VM.Record record : vm_map.values()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
-
- VmPowerState ps = record.powerState;
- Host host = record.residentOn;
- String host_uuid = null;
- if (!isRefNull(host)) {
- try {
- host_uuid = host.getUuid(conn);
- } catch (BadServerResponse e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- }
-
- if (host_uuid.equalsIgnoreCase(_host.uuid)) {
- vmStates.put(
- record.nameLabel,
- new HostVmStateReportEntry(convertPowerState(ps), host_uuid)
- );
- }
- }
- }
-
- return vmStates;
- }
-
- // TODO vmsync {
- protected HashMap<String, Pair<String, State>> getAllVms(Connection conn) {
- final HashMap<String, Pair<String, State>> vmStates = new HashMap<String, Pair<String, State>>();
- Map<VM, VM.Record> vm_map = null;
- for (int i = 0; i < 2; i++) {
- try {
- vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
- break;
- } catch (final Throwable e) {
- s_logger.warn("Unable to get vms", e);
- }
- try {
- Thread.sleep(1000);
- } catch (final InterruptedException ex) {
-
- }
- }
-
- if (vm_map == null) {
- return null;
- }
- for (VM.Record record : vm_map.values()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
-
- VmPowerState ps = record.powerState;
- final State state = convertToState(ps);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + record.nameLabel + ": powerstate = " + ps + "; vm state=" + state.toString());
- }
- Host host = record.residentOn;
- String host_uuid = null;
- if (!isRefNull(host)) {
- try {
- host_uuid = host.getUuid(conn);
- } catch (BadServerResponse e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- }
- vmStates.put(record.nameLabel, new Pair<String, State>(host_uuid, state));
- }
- }
-
- return vmStates;
- }
-
- // TODO vmsync }
-
- protected State getVmState(Connection conn, final String vmName) {
- int retry = 3;
- while (retry-- > 0) {
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- for (final VM vm : vms) {
- return convertToState(vm.getPowerState(conn));
- }
- } catch (final BadServerResponse e) {
- // There is a race condition within xen such that if a vm is
- // deleted and we
- // happen to ask for it, it throws this stupid response. So
- // if this happens,
- // we take a nap and try again which then avoids the race
- // condition because
- // the vm's information is now cleaned up by xen. The error
- // is as follows
- // com.xensource.xenapi.Types$BadServerResponse
- // [HANDLE_INVALID, VM,
- // 3dde93f9-c1df-55a7-2cde-55e1dce431ab]
- s_logger.info("Unable to get a vm PowerState due to " + e.toString() + ". We are retrying. Count: " + retry);
- try {
- Thread.sleep(3000);
- } catch (final InterruptedException ex) {
-
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get a vm PowerState due to " + e.toString();
- s_logger.warn(msg, e);
- break;
- } catch (final XmlRpcException e) {
- String msg = "Unable to get a vm PowerState due to " + e.getMessage();
- s_logger.warn(msg, e);
- break;
- }
- }
-
- return State.Stopped;
- }
-
- protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) {
- Connection conn = getConnection();
- final String vmName = cmd.getVmName();
- final State state = getVmState(conn, vmName);
- Integer vncPort = null;
- if (state == State.Running) {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Running);
- }
- s_logger.debug("3. The VM " + vmName + " is in Running state");
- }
-
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
- }
-
- protected PrepareForMigrationAnswer execute(PrepareForMigrationCommand cmd) {
- Connection conn = getConnection();
-
- VirtualMachineTO vm = cmd.getVirtualMachine();
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Preparing host for migrating " + vm);
- }
-
- NicTO[] nics = vm.getNics();
- try {
- prepareISO(conn, vm.getName());
-
- for (NicTO nic : nics) {
- getNetwork(conn, nic);
- }
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vm.getName(), State.Migrating);
- }
- s_logger.debug("4. The VM " + vm.getName() + " is in Migrating state");
-
- return new PrepareForMigrationAnswer(cmd);
- } catch (Exception e) {
- s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e);
- return new PrepareForMigrationAnswer(cmd, e);
- }
- }
-
- String upgradeSnapshot(Connection conn, String templatePath, String snapshotPath) {
- String results = callHostPluginAsync(conn, "vmopspremium", "upgrade_snapshot", 2 * 60 * 60, "templatePath", templatePath, "snapshotPath", snapshotPath);
-
- if (results == null || results.isEmpty()) {
- String msg = "upgrade_snapshot return null";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- String[] tmp = results.split("#");
- String status = tmp[0];
- if (status.equals("0")) {
- return results;
- } else {
- s_logger.warn(results);
- throw new CloudRuntimeException(results);
- }
- }
-
- String createTemplateFromSnapshot(Connection conn, String templatePath, String snapshotPath, int wait) {
- String tmpltLocalDir = UUID.randomUUID().toString();
- String results =
- callHostPluginAsync(conn, "vmopspremium", "create_privatetemplate_from_snapshot", wait, "templatePath", templatePath, "snapshotPath", snapshotPath,
- "tmpltLocalDir", tmpltLocalDir);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg = "create_privatetemplate_from_snapshot return null";
- } else {
- String[] tmp = results.split("#");
- String status = tmp[0];
- if (status.equals("0")) {
- return results;
- } else {
- errMsg = "create_privatetemplate_from_snapshot failed due to " + tmp[1];
- }
- }
- String source = "cloud_mount/" + tmpltLocalDir;
- killCopyProcess(conn, source);
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
- boolean killCopyProcess(Connection conn, String nameLabel) {
- String results = callHostPluginAsync(conn, "vmops", "kill_copy_process", 60, "namelabel", nameLabel);
- String errMsg = null;
- if (results == null || results.equals("false")) {
- errMsg = "kill_copy_process failed";
- s_logger.warn(errMsg);
- return false;
- } else {
- return true;
- }
- }
-
- void destroyVDIbyNameLabel(Connection conn, String nameLabel) {
- try {
- Set<VDI> vdis = VDI.getByNameLabel(conn, nameLabel);
- if (vdis.size() != 1) {
- s_logger.warn("destoryVDIbyNameLabel failed due to there are " + vdis.size() + " VDIs with name " + nameLabel);
- return;
- }
- for (VDI vdi : vdis) {
- try {
- vdi.destroy(conn);
- } catch (Exception e) {
- }
- }
- } catch (Exception e) {
- }
- }
-
- String copy_vhd_from_secondarystorage(Connection conn, String mountpoint, String sruuid, int wait) {
- String nameLabel = "cloud-" + UUID.randomUUID().toString();
- String results =
- callHostPluginAsync(conn, "vmopspremium", "copy_vhd_from_secondarystorage", wait, "mountpoint", mountpoint, "sruuid", sruuid, "namelabel", nameLabel);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg = "copy_vhd_from_secondarystorage return null";
- } else {
- String[] tmp = results.split("#");
- String status = tmp[0];
- if (status.equals("0")) {
- return tmp[1];
- } else {
- errMsg = tmp[1];
- }
- }
- String source = mountpoint.substring(mountpoint.lastIndexOf('/') + 1);
- if (killCopyProcess(conn, source)) {
- destroyVDIbyNameLabel(conn, nameLabel);
- }
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
- public PrimaryStorageDownloadAnswer execute(final PrimaryStorageDownloadCommand cmd) {
- String tmplturl = cmd.getUrl();
- String poolName = cmd.getPoolUuid();
- int wait = cmd.getWait();
- try {
- URI uri = new URI(tmplturl);
- String tmplpath = uri.getHost() + ":" + uri.getPath();
- Connection conn = getConnection();
- SR poolsr = null;
- Set<SR> srs = SR.getByNameLabel(conn, poolName);
- if (srs.size() != 1) {
- String msg = "There are " + srs.size() + " SRs with same name: " + poolName;
- s_logger.warn(msg);
- return new PrimaryStorageDownloadAnswer(msg);
- } else {
- poolsr = srs.iterator().next();
- }
- String pUuid = poolsr.getUuid(conn);
- boolean isISCSI = IsISCSI(poolsr.getType(conn));
- String uuid = copy_vhd_from_secondarystorage(conn, tmplpath, pUuid, wait);
- VDI tmpl = getVDIbyUuid(conn, uuid);
- VDI snapshotvdi = tmpl.snapshot(conn, new HashMap<String, String>());
- String snapshotUuid = snapshotvdi.getUuid(conn);
- snapshotvdi.setNameLabel(conn, "Template " + cmd.getName());
- String parentuuid = getVhdParent(conn, pUuid, snapshotUuid, isISCSI);
- VDI parent = getVDIbyUuid(conn, parentuuid);
- Long phySize = parent.getPhysicalUtilisation(conn);
- tmpl.destroy(conn);
- poolsr.scan(conn);
- try {
- Thread.sleep(5000);
- } catch (Exception e) {
- }
- return new PrimaryStorageDownloadAnswer(snapshotvdi.getUuid(conn), phySize);
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " on host:" + _host.uuid + " for template: " + tmplturl + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new PrimaryStorageDownloadAnswer(msg);
- }
- }
-
- protected String removeSRSync(Connection conn, SR sr) {
- if (sr == null) {
- return null;
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(sr, "Removing SR"));
- }
- long waittime = 0;
- try {
- Set<VDI> vdis = sr.getVDIs(conn);
- for (VDI vdi : vdis) {
- Map<java.lang.String, Types.VdiOperations> currentOperation = vdi.getCurrentOperations(conn);
- if (currentOperation == null || currentOperation.size() == 0) {
- continue;
- }
- if (waittime >= 1800000) {
- String msg = "This template is being used, try late time";
- s_logger.warn(msg);
- return msg;
- }
- waittime += 30000;
- try {
- Thread.sleep(30000);
- } catch (final InterruptedException ex) {
- }
- }
- removeSR(conn, sr);
- return null;
- } catch (XenAPIException e) {
- s_logger.warn(logX(sr, "Unable to get current opertions " + e.toString()), e);
- } catch (XmlRpcException e) {
- s_logger.warn(logX(sr, "Unable to get current opertions " + e.getMessage()), e);
- }
- String msg = "Remove SR failed";
- s_logger.warn(msg);
- return msg;
-
- }
-
- protected void removeSR(Connection conn, SR sr) {
- if (sr == null) {
- return;
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(sr, "Removing SR"));
- }
-
- for (int i = 0; i < 2; i++) {
- try {
- Set<VDI> vdis = sr.getVDIs(conn);
- for (VDI vdi : vdis) {
- vdi.forget(conn);
- }
- Set<PBD> pbds = sr.getPBDs(conn);
- for (PBD pbd : pbds) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(pbd, "Unplugging pbd"));
- }
- if (pbd.getCurrentlyAttached(conn)) {
- pbd.unplug(conn);
- }
- pbd.destroy(conn);
- }
-
- pbds = sr.getPBDs(conn);
- if (pbds.size() == 0) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(sr, "Forgetting"));
- }
- sr.forget(conn);
- return;
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(sr, "There are still pbd attached"));
- if (s_logger.isTraceEnabled()) {
- for (PBD pbd : pbds) {
- s_logger.trace(logX(pbd, " Still attached"));
- }
- }
- }
- } catch (XenAPIException e) {
- s_logger.debug(logX(sr, "Catch XenAPIException: " + e.toString()));
- } catch (XmlRpcException e) {
- s_logger.debug(logX(sr, "Catch Exception: " + e.getMessage()));
- }
- }
- s_logger.warn(logX(sr, "Unable to remove SR"));
- }
-
- protected MigrateAnswer execute(final MigrateCommand cmd) {
- Connection conn = getConnection();
- final String vmName = cmd.getVmName();
- State state = null;
-
- state = s_vms.getState(_cluster, vmName);
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
- s_logger.debug("5. The VM " + vmName + " is in Stopping state");
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
-
- String ipaddr = cmd.getDestinationIp();
-
- Set<Host> hosts = Host.getAll(conn);
- Host dsthost = null;
- for (Host host : hosts) {
- if (host.getAddress(conn).equals(ipaddr)) {
- dsthost = host;
- break;
- }
- }
- if (dsthost == null) {
- String msg = "Migration failed due to unable to find host " + ipaddr + " in XenServer pool " + _host.pool;
- s_logger.warn(msg);
- return new MigrateAnswer(cmd, false, msg, null);
- }
- for (VM vm : vms) {
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- VBD.Record vbdRec = vbd.getRecord(conn);
- if (vbdRec.type.equals(Types.VbdType.CD) && !vbdRec.empty) {
- vbd.eject(conn);
- break;
- }
- }
- migrateVM(conn, dsthost, vm, vmName);
- vm.setAffinity(conn, dsthost);
- state = State.Stopping;
- }
- return new MigrateAnswer(cmd, true, "migration succeeded", null);
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new MigrateAnswer(cmd, false, msg, null);
- } finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
- s_logger.debug("6. The VM " + vmName + " is in " + state + " state");
- }
-
- }
-
- protected State getRealPowerState(Connection conn, String label) {
- int i = 0;
- s_logger.trace("Checking on the HALTED State");
- for (; i < 20; i++) {
- try {
- Set<VM> vms = VM.getByNameLabel(conn, label);
- if (vms == null || vms.size() == 0) {
- continue;
- }
-
- VM vm = vms.iterator().next();
-
- VmPowerState vps = vm.getPowerState(conn);
- if (vps != null && vps != VmPowerState.HALTED && vps != VmPowerState.UNRECOGNIZED) {
- return convertToState(vps);
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get real power state due to " + e.toString();
- s_logger.warn(msg, e);
- } catch (XmlRpcException e) {
- String msg = "Unable to get real power state due to " + e.getMessage();
- s_logger.warn(msg, e);
- }
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- }
- return State.Stopped;
- }
-
- protected Pair<VM, VM.Record> getControlDomain(Connection conn) throws XenAPIException, XmlRpcException {
- Host host = Host.getByUuid(conn, _host.uuid);
- Set<VM> vms = null;
- vms = host.getResidentVMs(conn);
- for (VM vm : vms) {
- if (vm.getIsControlDomain(conn)) {
- return new Pair<VM, VM.Record>(vm, vm.getRecord(conn));
- }
- }
-
- throw new CloudRuntimeException("Com'on no control domain? What the crap?!#@!##$@");
- }
-
- protected void umountSnapshotDir(Connection conn, Long dcId) {
- try {
- callHostPlugin(conn, "vmopsSnapshot", "unmountSnapshotsDir", "dcId", dcId.toString());
- } catch (Exception e) {
- s_logger.debug("Failed to umount snapshot dir",e);
- }
- }
-
- protected ReadyAnswer execute(ReadyCommand cmd) {
- Connection conn = getConnection();
- Long dcId = cmd.getDataCenterId();
- // Ignore the result of the callHostPlugin. Even if unmounting the
- // snapshots dir fails, let Ready command
- // succeed.
- umountSnapshotDir(conn, dcId);
-
- setupLinkLocalNetwork(conn);
- // try to destroy CD-ROM device for all system VMs on this host
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- Set<VM> vms = host.getResidentVMs(conn);
- for (VM vm : vms) {
- destroyPatchVbd(conn, vm.getNameLabel(conn));
- }
- } catch (Exception e) {
- }
- try {
- boolean result = cleanupHaltedVms(conn);
- if (!result) {
- return new ReadyAnswer(cmd, "Unable to cleanup halted vms");
- }
- } catch (XenAPIException e) {
- s_logger.warn("Unable to cleanup halted vms", e);
- return new ReadyAnswer(cmd, "Unable to cleanup halted vms");
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to cleanup halted vms", e);
- return new ReadyAnswer(cmd, "Unable to cleanup halted vms");
- }
-
- return new ReadyAnswer(cmd);
- }
-
- protected String getVncUrl(Connection conn, VM vm) {
- VM.Record record;
- Console c;
- try {
- record = vm.getRecord(conn);
- Set<Console> consoles = record.consoles;
-
- if (consoles.isEmpty()) {
- s_logger.warn("There are no Consoles available to the vm : " + record.nameDescription);
- return null;
- }
- Iterator<Console> i = consoles.iterator();
- while (i.hasNext()) {
- c = i.next();
- if (c.getProtocol(conn) == Types.ConsoleProtocol.RFB)
- return c.getLocation(conn);
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get console url due to " + e.toString();
- s_logger.warn(msg, e);
- return null;
- } catch (XmlRpcException e) {
- String msg = "Unable to get console url due to " + e.getMessage();
- s_logger.warn(msg, e);
- return null;
- }
- return null;
- }
-
- @Override
- public RebootAnswer execute(RebootCommand cmd) {
- Connection conn = getConnection();
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, cmd.getVmName(), State.Starting);
- }
- s_logger.debug("7. The VM " + cmd.getVmName() + " is in Starting state");
- try {
- Set<VM> vms = null;
- try {
- vms = VM.getByNameLabel(conn, cmd.getVmName());
- } catch (XenAPIException e0) {
- s_logger.debug("getByNameLabel failed " + e0.toString());
- return new RebootAnswer(cmd, "getByNameLabel failed " + e0.toString(), false);
- } catch (Exception e0) {
- s_logger.debug("getByNameLabel failed " + e0.getMessage());
- return new RebootAnswer(cmd, "getByNameLabel failed", false);
- }
- for (VM vm : vms) {
- try {
- rebootVM(conn, vm, vm.getNameLabel(conn));
- } catch (Exception e) {
- String msg = e.toString();
- s_logger.warn(msg, e);
- return new RebootAnswer(cmd, msg, false);
- }
- }
- return new RebootAnswer(cmd, "reboot succeeded", true);
- } finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, cmd.getVmName(), State.Running);
- }
- s_logger.debug("8. The VM " + cmd.getVmName() + " is in Running state");
- }
- }
-
- protected Answer execute(RebootRouterCommand cmd) {
- Connection conn = getConnection();
- RebootAnswer answer = execute((RebootCommand)cmd);
- if (answer.getResult()) {
- String cnct = connect(conn, cmd.getVmName(), cmd.getPrivateIpAddress());
- networkUsage(conn, cmd.getPrivateIpAddress(), "create", null);
- if (cnct == null) {
- return answer;
- } else {
- return new Answer(cmd, false, cnct);
- }
- }
- return answer;
- }
-
- protected void startvmfailhandle(Connection conn, VM vm, List<Ternary<SR, VDI, VolumeVO>> mounts) {
- if (vm != null) {
- try {
-
- if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
- try {
- vm.hardShutdown(conn);
- } catch (Exception e) {
- String msg = "VM hardshutdown failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- if (vm.getPowerState(conn) == VmPowerState.HALTED) {
- try {
- vm.destroy(conn);
- } catch (Exception e) {
- String msg = "VM destroy failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- } catch (Exception e) {
- String msg = "VM getPowerState failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- if (mounts != null) {
- for (Ternary<SR, VDI, VolumeVO> mount : mounts) {
- VDI vdi = mount.second();
- Set<VBD> vbds = null;
- try {
- vbds = vdi.getVBDs(conn);
- } catch (Exception e) {
- String msg = "VDI getVBDS failed due to " + e.toString();
- s_logger.warn(msg, e);
- continue;
- }
- for (VBD vbd : vbds) {
- try {
- vbd.unplug(conn);
- vbd.destroy(conn);
- } catch (Exception e) {
- String msg = "VBD destroy failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- }
- }
- }
-
- /**
- * WARN: static-min <= dynamic-min <= dynamic-max <= static-max
- * @see XcpServerResource#setMemory(com.xensource.xenapi.Connection, com.xensource.xenapi.VM, long, long)
- * @param conn
- * @param vm
- * @param minMemsize
- * @param maxMemsize
- * @throws XmlRpcException
- * @throws XenAPIException
- */
- protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException {
- vm.setMemoryLimits(conn, mem_128m, maxMemsize, minMemsize, maxMemsize);
- }
-
- /**
- * When Dynamic Memory Control (DMC) is enabled -
- * xen allows scaling the guest memory while the guest is running
- *
- * By default this is disallowed, override the specific xen resource
- * if this is enabled
- */
- protected boolean isDmcEnabled(Connection conn, Host host) throws XenAPIException, XmlRpcException {
- return false;
- }
-
- protected void waitForTask(Connection c, Task task, long pollInterval, long timeout) throws XenAPIException, XmlRpcException {
- long beginTime = System.currentTimeMillis();
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") sent to " + c.getSessionReference() + " is pending completion with a " + timeout +
- "ms timeout");
- }
- while (task.getStatus(c) == Types.TaskStatusType.PENDING) {
- try {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") is pending, sleeping for " + pollInterval + "ms");
- }
- Thread.sleep(pollInterval);
- } catch (InterruptedException e) {
- }
- if (System.currentTimeMillis() - beginTime > timeout) {
- String msg = "Async " + timeout / 1000 + " seconds timeout for task " + task.toString();
- s_logger.warn(msg);
- task.cancel(c);
- throw new Types.BadAsyncResult(msg);
- }
- }
- }
-
- protected void checkForSuccess(Connection c, Task task) throws XenAPIException, XmlRpcException {
- if (task.getStatus(c) == Types.TaskStatusType.SUCCESS) {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") completed");
- }
- return;
- } else {
- String msg = "Task failed! Task record: " + task.getRecord(c);
- s_logger.warn(msg);
- task.cancel(c);
- throw new Types.BadAsyncResult(msg);
- }
- }
-
- void rebootVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
- Task task = null;
- try {
- task = vm.cleanRebootAsync(conn);
- try {
- //poll every 1 seconds , timeout after 10 minutes
- waitForTask(conn, task, 1000, 10 * 60 * 1000);
- checkForSuccess(conn, task);
- } catch (Types.HandleInvalid e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
- task = null;
- return;
- }
- throw new CloudRuntimeException("Reboot VM catch HandleInvalid and VM is not in RUNNING state");
- }
- } catch (XenAPIException e) {
- s_logger.debug("Unable to Clean Reboot VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString() + ", try hard reboot");
- try {
- vm.hardReboot(conn);
- } catch (Exception e1) {
- String msg = "Unable to hard Reboot VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString();
- s_logger.warn(msg, e1);
- throw new CloudRuntimeException(msg);
- }
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to " + e1.toString());
- }
- }
- }
- }
-
- void forceShutdownVM(Connection conn, VM vm) {
- try {
- Long domId = vm.getDomid(conn);
- callHostPlugin(conn, "vmopspremium", "forceShutdownVM", "domId", domId.toString());
- vm.powerStateReset(conn);
- vm.destroy(conn);
- } catch (Exception e) {
- String msg = "forceShutdown failed due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- }
- }
-
- void shutdownVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
- Task task = null;
- try {
- task = vm.cleanShutdownAsync(conn);
- try {
- //poll every 1 seconds , timeout after 10 minutes
- waitForTask(conn, task, 1000, 10 * 60 * 1000);
- checkForSuccess(conn, task);
- } catch (Types.HandleInvalid e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.HALTED) {
- task = null;
- return;
- }
- throw new CloudRuntimeException("Shutdown VM catch HandleInvalid and VM is not in HALTED state");
- }
- } catch (XenAPIException e) {
- s_logger.debug("Unable to cleanShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString());
- try {
- Types.VmPowerState state = vm.getPowerState(conn);
- if (state == Types.VmPowerState.RUNNING) {
- try {
- vm.hardShutdown(conn);
- } catch (Exception e1) {
- s_logger.debug("Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString());
- state = vm.getPowerState(conn);
- if (state == Types.VmPowerState.RUNNING) {
- forceShutdownVM(conn, vm);
- }
- return;
- }
- } else if (state == Types.VmPowerState.HALTED) {
- return;
- } else {
- String msg = "After cleanShutdown the VM status is " + state.toString() + ", that is not expected";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- } catch (Exception e1) {
- String msg = "Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString();
- s_logger.warn(msg, e1);
- throw new CloudRuntimeException(msg);
- }
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to " + e1.toString());
- }
- }
- }
- }
-
- void startVM(Connection conn, Host host, VM vm, String vmName) throws XmlRpcException {
- Task task = null;
- try {
- task = vm.startOnAsync(conn, host, false, true);
- try {
- //poll every 1 seconds , timeout after 10 minutes
- waitForTask(conn, task, 1000, 10 * 60 * 1000);
- checkForSuccess(conn, task);
- } catch (Types.HandleInvalid e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
- s_logger.debug("VM " + vmName + " is in Running status");
- task = null;
- return;
- }
- throw new CloudRuntimeException("Start VM " + vmName + " catch HandleInvalid and VM is not in RUNNING state");
- } catch (Types.BadAsyncResult e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
- s_logger.debug("VM " + vmName + " is in Running status");
- task = null;
- return;
- }
- throw new CloudRuntimeException("Start VM " + vmName + " catch BadAsyncResult and VM is not in RUNNING state");
- }
- } catch (XenAPIException e) {
- String msg = "Unable to start VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to " + e1.toString());
- }
- }
- }
- }
-
- private void migrateVM(Connection conn, Host destHost, VM vm, String vmName) throws XmlRpcException {
- Task task = null;
- try {
- Map<String, String> other = new HashMap<String, String>();
- other.put("live", "true");
- task = vm.poolMigrateAsync(conn, destHost, other);
- try {
- // poll every 1 seconds
- long timeout = (_migratewait) * 1000L;
- waitForTask(conn, task, 1000, timeout);
- checkForSuccess(conn, task);
- } catch (Types.HandleInvalid e) {
- if (vm.getResidentOn(conn).equals(destHost)) {
- task = null;
- return;
- }
- throw new CloudRuntimeException("migrate VM catch HandleInvalid and VM is not running on dest host");
- }
- } catch (XenAPIException e) {
- String msg = "Unable to migrate VM(" + vmName + ") from host(" + _host.uuid + ") due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to " + e1.toString());
- }
- }
- }
- }
-
- protected VDI cloudVDIcopy(Connection conn, VDI vdi, SR sr, int wait) throws XenAPIException, XmlRpcException {
- Task task = null;
- if (wait == 0) {
- wait = 2 * 60 * 60;
- }
- try {
- task = vdi.copyAsync(conn, sr);
- // poll every 1 seconds , timeout after 2 hours
- waitForTask(conn, task, 1000, wait * 1000);
- checkForSuccess(conn, task);
- VDI dvdi = Types.toVDI(task, conn);
- return dvdi;
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.warn("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to ", e1);
- }
- }
- }
- }
-
- protected String callHostPluginAsync(Connection conn, String plugin, String cmd, int wait, String... params) {
- int timeout = wait * 1000;
- Map<String, String> args = new HashMap<String, String>();
- Task task = null;
- try {
- for (int i = 0; i < params.length; i += 2) {
- args.put(params[i], params[i + 1]);
- }
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin executing for command " + cmd + " with " + getArgsString(args));
- }
- Host host = Host.getByUuid(conn, _host.uuid);
- task = host.callPluginAsync(conn, plugin, cmd, args);
- // poll every 1 seconds
- waitForTask(conn, task, 1000, timeout);
- checkForSuccess(conn, task);
- String result = task.getResult(conn);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin Result: " + result);
- }
- return result.replace("<value>", "").replace("</value>", "").replace("\n", "");
- } catch (Types.HandleInvalid e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to HandleInvalid clazz:" + e.clazz + ", handle:" +
- e.handle);
- } catch (XenAPIException e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.toString(), e);
- } catch (XmlRpcException e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.getMessage(), e);
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.warn("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to ", e1);
- }
- }
- }
- return null;
- }
-
- @Override
- public StopAnswer execute(StopCommand cmd) {
- String vmName = cmd.getVmName();
- String platformstring = null;
- try {
- Connection conn = getConnection();
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- // stop vm which is running on this host or is in halted state
- Iterator<VM> iter = vms.iterator();
- while (iter.hasNext()) {
- VM vm = iter.next();
- VM.Record vmr = vm.getRecord(conn);
- if (vmr.powerState != VmPowerState.RUNNING) {
- continue;
- }
- if (isRefNull(vmr.residentOn)) {
- continue;
- }
- if (vmr.residentOn.getUuid(conn).equals(_host.uuid)) {
- continue;
- }
- iter.remove();
- }
-
- if (vms.size() == 0) {
- synchronized (_cluster.intern()) {
- s_logger.info("VM does not exist on XenServer" + _host.uuid);
- s_vms.remove(_cluster, _name, vmName);
- }
- return new StopAnswer(cmd, "VM does not exist", true);
- }
- for (VM vm : vms) {
- VM.Record vmr = vm.getRecord(conn);
- platformstring = StringUtils.mapToString(vmr.platform);
- if (vmr.isControlDomain) {
- String msg = "Tring to Shutdown control domain";
- s_logger.warn(msg);
- return new StopAnswer(cmd, msg, false);
- }
-
- if (vmr.powerState == VmPowerState.RUNNING && !isRefNull(vmr.residentOn) && !vmr.residentOn.getUuid(conn).equals(_host.uuid)) {
- String msg = "Stop Vm " + vmName + " failed due to this vm is not running on this host: " + _host.uuid + " but host:" + vmr.residentOn.getUuid(conn);
- s_logger.warn(msg);
- return new StopAnswer(cmd, msg, platformstring, false);
- }
-
- if (cmd.checkBeforeCleanup() && vmr.powerState == VmPowerState.RUNNING) {
- String msg = "Vm " + vmName + " is running on host and checkBeforeCleanup flag is set, so bailing out";
- s_logger.debug(msg);
- return new StopAnswer(cmd, msg, false);
- }
-
- State state = s_vms.getState(_cluster, vmName);
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
- s_logger.debug("9. The VM " + vmName + " is in Stopping state");
-
- try {
- if (vmr.powerState == VmPowerState.RUNNING) {
- /* when stop a vm, set affinity to current xenserver */
- vm.setAffinity(conn, vm.getResidentOn(conn));
-
- if (_canBridgeFirewall) {
- String result = callHostPlugin(conn, "vmops", "destroy_network_rules_for_vm", "vmName", cmd.getVmName());
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to remove network rules for vm " + cmd.getVmName());
- } else {
- s_logger.info("Removed network rules for vm " + cmd.getVmName());
- }
- }
- shutdownVM(conn, vm, vmName);
- }
- } catch (Exception e) {
- String msg = "Catch exception " + e.getClass().getName() + " when stop VM:" + cmd.getVmName() + " due to " + e.toString();
- s_logger.debug(msg);
- return new StopAnswer(cmd, msg, platformstring, false);
- } finally {
-
- try {
- if (vm.getPowerState(conn) == VmPowerState.HALTED) {
- Set<VGPU> vGPUs = null;
- // Get updated GPU details
- try {
- vGPUs = vm.getVGPUs(conn);
- } catch (XenAPIException e2) {
- s_logger.debug("VM " + vmName + " does not have GPU support.");
- }
- if (vGPUs != null && !vGPUs.isEmpty()) {
- HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = getGPUGroupDetails(conn);
- cmd.setGpuDevice(new GPUDeviceTO(null, null, groupDetails));
- }
-
- Set<VIF> vifs = vm.getVIFs(conn);
- List<Network> networks = new ArrayList<Network>();
- for (VIF vif : vifs) {
- networks.add(vif.getNetwork(conn));
- }
- vm.destroy(conn);
- state = State.Stopped;
- SR sr = getISOSRbyVmName(conn, cmd.getVmName());
- removeSR(conn, sr);
- // Disable any VLAN networks that aren't used
- // anymore
- for (Network network : networks) {
- try {
- if (network.getNameLabel(conn).startsWith("VLAN")) {
- disableVlanNetwork(conn, network);
- }
- } catch (Exception e) {
- // network might be destroyed by other host
- }
- }
- return new StopAnswer(cmd, "Stop VM " + vmName + " Succeed", platformstring, true);
- }
- } catch (Exception e) {
- String msg = "VM destroy failed in Stop " + vmName + " Command due to " + e.getMessage();
- s_logger.warn(msg, e);
- } finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
- s_logger.debug("10. The VM " + vmName + " is in " + state + " state");
- }
- }
- }
-
- } catch (Exception e) {
- String msg = "Stop Vm " + vmName + " fail due to " + e.toString();
- s_logger.warn(msg, e);
- return new StopAnswer(cmd, msg, platformstring, false);
- }
- return new StopAnswer(cmd, "Stop VM failed", platformstring, false);
- }
-
- private List<VDI> getVdis(Connection conn, VM vm) {
- List<VDI> vdis = new ArrayList<VDI>();
- try {
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- vdis.add(vbd.getVDI(conn));
- }
- } catch (XenAPIException e) {
- String msg = "getVdis can not get VPD due to " + e.toString();
- s_logger.warn(msg, e);
- } catch (XmlRpcException e) {
- String msg = "getVdis can not get VPD due to " + e.getMessage();
- s_logger.warn(msg, e);
- }
- return vdis;
- }
-
- protected String connect(Connection conn, final String vmName, final String ipAddress, final int port) {
- for (int i = 0; i <= _retry; i++) {
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- if (vms.size() < 1) {
- String msg = "VM " + vmName + " is not running";
- s_logger.warn(msg);
- return msg;
- }
- } catch (Exception e) {
- String msg = "VM.getByNameLabel " + vmName + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- return msg;
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Trying to connect to " + ipAddress + " attempt " + i + " of " + _retry);
- }
- if (pingdomr(conn, ipAddress, Integer.toString(port))) {
- return null;
- }
- try {
- Thread.sleep(_sleep);
- } catch (final InterruptedException e) {
- }
- }
- String msg = "Timeout, Unable to logon to " + ipAddress;
- s_logger.debug(msg);
-
- return msg;
- }
-
- protected String connect(Connection conn, final String vmname, final String ipAddress) {
- return connect(conn, vmname, ipAddress, 3922);
- }
-
- protected boolean isDeviceUsed(Connection conn, VM vm, Long deviceId) {
- // Figure out the disk number to attach the VM to
-
- String msg = null;
- try {
- Set<String> allowedVBDDevices = vm.getAllowedVBDDevices(conn);
- if (allowedVBDDevices.contains(deviceId.toString())) {
- return false;
- }
- return true;
- } catch (XmlRpcException e) {
- msg = "Catch XmlRpcException due to: " + e.getMessage();
- s_logger.warn(msg, e);
- } catch (XenAPIException e) {
- msg = "Catch XenAPIException due to: " + e.toString();
- s_logger.warn(msg, e);
- }
- throw new CloudRuntimeException("When check deviceId " + msg);
- }
-
- protected String getUnusedDeviceNum(Connection conn, VM vm) {
- // Figure out the disk number to attach the VM to
- try {
- Set<String> allowedVBDDevices = vm.getAllowedVBDDevices(conn);
- if (allowedVBDDevices.size() == 0) {
- throw new CloudRuntimeException("Could not find an available slot in VM with name: " + vm.getNameLabel(conn) + " to attach a new disk.");
- }
- return allowedVBDDevices.iterator().next();
- } catch (XmlRpcException e) {
- String msg = "Catch XmlRpcException due to: " + e.getMessage();
- s_logger.warn(msg, e);
- } catch (XenAPIException e) {
- String msg = "Catch XenAPIException due to: " + e.toString();
- s_logger.warn(msg, e);
- }
- throw new CloudRuntimeException("Could not find an available slot in VM with name to attach a new disk.");
- }
-
- protected String callHostPlugin(Connection conn, String plugin, String cmd, String... params) {
- Map<String, String> args = new HashMap<String, String>();
- String msg;
- try {
- for (int i = 0; i < params.length; i += 2) {
- args.put(params[i], params[i + 1]);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin executing for command " + cmd + " with " + getArgsString(args));
- }
- Host host = Host.getByUuid(conn, _host.uuid);
- String result = host.callPlugin(conn, plugin, cmd, args);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin Result: " + result);
- }
- return result.replace("\n", "");
- } catch (XenAPIException e) {
- msg = "callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- msg = "callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.getMessage();
- s_logger.debug(msg);
- }
- throw new CloudRuntimeException(msg);
- }
-
- protected String getArgsString(Map<String, String> args) {
- StringBuilder argString = new StringBuilder();
- for (Map.Entry<String, String> arg : args.entrySet()) {
- argString.append(arg.getKey() + ": " + arg.getValue() + ", ");
- }
- return argString.toString();
- }
-
- protected boolean setIptables(Connection conn) {
- String result = callHostPlugin(conn, "vmops", "setIptables");
- if (result == null || result.isEmpty()) {
- return false;
- }
- return true;
- }
-
- protected XsLocalNetwork getManagementNetwork(Connection conn) throws XmlRpcException, XenAPIException {
- PIF mgmtPif = null;
- PIF.Record mgmtPifRec = null;
- Host host = Host.getByUuid(conn, _host.uuid);
- Set<PIF> hostPifs = host.getPIFs(conn);
- for (PIF pif : hostPifs) {
- PIF.Record rec = pif.getRecord(conn);
- if (rec.management) {
- if (rec.VLAN != null && rec.VLAN != -1) {
- String msg =
- new StringBuilder("Unsupported configuration. Management network is on a VLAN. host=").append(_host.uuid)
- .append("; pif=")
- .append(rec.uuid)
- .append("; vlan=")
- .append(rec.VLAN)
- .toString();
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Management network is on pif=" + rec.uuid);
- }
- mgmtPif = pif;
- mgmtPifRec = rec;
- break;
- }
- }
- if (mgmtPif == null) {
- String msg = "Unable to find management network for " + _host.uuid;
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- Bond bond = mgmtPifRec.bondSlaveOf;
- if (!isRefNull(bond)) {
- String msg =
- "Management interface is on slave(" + mgmtPifRec.uuid + ") of bond(" + bond.getUuid(conn) + ") on host(" + _host.uuid +
- "), please move management interface to bond!";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- Network nk = mgmtPifRec.network;
- Network.Record nkRec = nk.getRecord(conn);
- return new XsLocalNetwork(nk, nkRec, mgmtPif, mgmtPifRec);
- }
-
- protected VIF getCorrectVif(Connection conn, VM router, Network network) throws XmlRpcException, XenAPIException {
- Set<VIF> routerVIFs = router.getVIFs(conn);
- for (VIF vif : routerVIFs) {
- Network vifNetwork = vif.getNetwork(conn);
- if (vifNetwork.getUuid(conn).equals(network.getUuid(conn))) {
- return vif;
- }
- }
-
- return null;
- }
-
- protected VIF getCorrectVif(Connection conn, VM router, IpAddressTO ip) throws XmlRpcException, XenAPIException {
- NicTO nic = new NicTO();
- nic.setType(ip.getTrafficType());
- nic.setName(ip.getNetworkName());
- if (ip.getBroadcastUri() == null) {
- nic.setBroadcastType(BroadcastDomainType.Native);
- } else {
- URI uri = BroadcastDomainType.fromString(ip.getBroadcastUri());
- nic.setBroadcastType(BroadcastDomainType.getSchemeValue(uri));
- nic.setBroadcastUri(uri);
- }
- Network network = getNetwork(conn, nic);
- // Determine the correct VIF on DomR to associate/disassociate the
- // IP address with
- Set<VIF> routerVIFs = router.getVIFs(conn);
- for (VIF vif : routerVIFs) {
- Network vifNetwork = vif.getNetwork(conn);
- if (vifNetwork.getUuid(conn).equals(network.getUuid(conn))) {
- return vif;
- }
- }
- return null;
- }
-
- protected VIF getVifByMac(Connection conn, VM router, String mac) throws XmlRpcException, XenAPIException {
- Set<VIF> routerVIFs = router.getVIFs(conn);
- mac = mac.trim();
- for (VIF vif : routerVIFs) {
- String lmac = vif.getMAC(conn);
- if (lmac.trim().equals(mac)) {
- return vif;
- }
- }
- return null;
- }
-
- protected String getLowestAvailableVIFDeviceNum(Connection conn, VM vm) {
- String vmName = "";
- try {
- vmName = vm.getNameLabel(conn);
- List<Integer> usedDeviceNums = new ArrayList<Integer>();
- Set<VIF> vifs = vm.getVIFs(conn);
- Iterator<VIF> vifIter = vifs.iterator();
- while (vifIter.hasNext()) {
- VIF vif = vifIter.next();
- try {
- String deviceId = vif.getDevice(conn);
- if(vm.getIsControlDomain(conn) || vif.getCurrentlyAttached(conn)) {
- usedDeviceNums.add(Integer.valueOf(deviceId));
- } else {
- s_logger.debug("Found unplugged VIF " + deviceId + " in VM " + vmName + " destroy it");
- vif.destroy(conn);
- }
- usedDeviceNums.add(Integer.valueOf(vif.getDevice(conn)));
- } catch (NumberFormatException e) {
- String msg = "Obtained an invalid value for an allocated VIF device number for VM: " + vmName;
- s_logger.debug(msg, e);
- throw new CloudRuntimeException(msg);
- }
- }
-
- for (Integer i = 0; i < _maxNics; i++) {
- if (!usedDeviceNums.contains(i)) {
- s_logger.debug("Lowest available Vif device number: " + i + " for VM: " + vmName);
- return i.toString();
- }
- }
- } catch (XmlRpcException e) {
- String msg = "Caught XmlRpcException: " + e.getMessage();
- s_logger.warn(msg, e);
- } catch (XenAPIException e) {
- String msg = "Caught XenAPIException: " + e.toString();
- s_logger.warn(msg, e);
- }
-
- throw new CloudRuntimeException("Could not find available VIF slot in VM with name: " + vmName);
- }
-
- protected VDI mount(Connection conn, StoragePoolType poolType, String volumeFolder, String volumePath) {
- return getVDIbyUuid(conn, volumePath);
- }
-
- /**
- * getNetworkByName() retrieves what the server thinks is the actual
- * network used by the XenServer host. This method should always be
- * used to talk to retrieve a network by the name. The reason is
- * because of the problems in using the name label as the way to find
- * the Network.
- *
- * To see how we are working around these problems, take a look at
- * enableVlanNetwork(). The following description assumes you have looked
- * at the description on that method.
- *
- * In order to understand this, we have to see what type of networks are
- * within a XenServer that's under CloudStack control.
- *
- * - Native Networks: these are networks that are untagged on the
- * XenServer and are used to crate VLAN networks on. These are
- * created by the user and is assumed to be one per cluster.
- * - VLAN Networks: these are dynamically created by CloudStack and can
- * have problems with duplicated names.
- * - LinkLocal Networks: these are dynamically created by CloudStack and
- * can also have problems with duplicated names but these don't have
- * actual PIFs.
- *
- * In order to speed to retrieval of a network, we do the following:
- * - We retrieve by the name. If only one network is retrieved, we
- * assume we retrieved the right network.
- * - If more than one network is retrieved, we check to see which one
- * has the pif for the local host and use that.
- * - If a pif is not found, then we look at the tags and find the
- * one with the lowest timestamp. (See enableVlanNetwork())
- *
- * @param conn Xapi connection
- * @param name name of the network
- * @return XsNic an object that contains network, network record, pif, and pif record.
- * @throws XenAPIException
- * @throws XmlRpcException
- *
- * @see CitrixResourceBase#enableVlanNetwork
- */
- protected XsLocalNetwork getNetworkByName(Connection conn, String name) throws XenAPIException, XmlRpcException {
- Set<Network> networks = Network.getByNameLabel(conn, name);
- if (networks.size() == 1) {
- return new XsLocalNetwork(networks.iterator().next(), null, null, null);
- }
-
- if (networks.size() == 0) {
- return null;
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Found more than one network with the name " + name);
- }
- Network earliestNetwork = null;
- Network.Record earliestNetworkRecord = null;
- long earliestTimestamp = Long.MAX_VALUE;
- int earliestRandom = Integer.MAX_VALUE;
- for (Network network : networks) {
- XsLocalNetwork nic = new XsLocalNetwork(network);
-
- if (nic.getPif(conn) != null) {
- return nic;
- }
-
- Network.Record record = network.getRecord(conn);
- if (record.tags != null) {
- for (String tag : record.tags) {
- Pair<Long, Integer> stamp = parseTimestamp(tag);
- if (stamp == null) {
- continue;
- }
-
- if (stamp.first() < earliestTimestamp || (stamp.first() == earliestTimestamp && stamp.second() < earliestRandom)) {
- earliestTimestamp = stamp.first();
- earliestRandom = stamp.second();
- earliestNetwork = network;
- earliestNetworkRecord = record;
- }
- }
- }
- }
-
- return earliestNetwork != null ? new XsLocalNetwork(earliestNetwork, earliestNetworkRecord, null, null) : null;
- }
-
- protected String generateTimeStamp() {
- return new StringBuilder("CsCreateTime-").append(System.currentTimeMillis()).append("-").append(Rand.nextInt(Integer.MAX_VALUE)).toString();
- }
-
- protected Pair<Long, Integer> parseTimestamp(String timeStampStr) {
- String[] tokens = timeStampStr.split("-");
- if (tokens.length != 3) {
- s_logger.debug("timeStamp in network has wrong pattern: " + timeStampStr);
- return null;
- }
- if (!tokens[0].equals("CsCreateTime")) {
- s_logger.debug("timeStamp in network doesn't start with CsCreateTime: " + timeStampStr);
- return null;
- }
- return new Pair<Long, Integer>(Long.parseLong(tokens[1]), Integer.parseInt(tokens[2]));
- }
-
- /**
- * enableVlanNetwork creates a Network object, Vlan object, and thereby
- * a tagged PIF object in Xapi.
- *
- * In XenServer, VLAN is added by
- * - Create a network, which is unique cluster wide.
- * - Find the PIF that you want to create the VLAN on.
- * - Create a VLAN using the network and the PIF. As a result of this
- * operation, a tagged PIF object is also created.
- *
- * Here is a list of problems with clustered Xapi implementation that
- * we are trying to circumvent.
- * - There can be multiple Networks with the same name-label so searching
- * using name-label is not unique.
- * - There are no other ways to search for Networks other than listing
- * all of them which is not efficient in our implementation because
- * we can have over 4000 VLAN networks.
- * - In a clustered situation, it's possible for both hosts to detect
- * that the Network is missing and both creates it. This causes a
- * lot of problems as one host may be using one Network and another
- * may be using a different network for their VMs. This causes
- * problems in migration because the VMs are logically attached
- * to different networks in Xapi's database but in reality, they
- * are attached to the same network.
- *
- * To work around these problems, we do the following.
- *
- * - When creating the VLAN network, we name it as VLAN-UUID of the
- * Network it is created on-VLAN Tag. Because VLAN tags is unique with
- * one particular network, this is a unique name-label to quickly
- * retrieve the the VLAN network with when we need it again.
- * - When we create the VLAN network, we add a timestamp and a random
- * number as a tag into the network. Then instead of creating
- * VLAN on that network, we actually retrieve the Network again
- * and this time uses the VLAN network with lowest timestamp or
- * lowest random number as the VLAN network. This allows VLAN creation
- * to happen on multiple hosts concurrently but even if two VLAN
- * networks were created with the same name, only one of them is used.
- *
- * One cavaet about this approach is that it relies on the timestamp to
- * be relatively accurate among different hosts.
- *
- * @param conn Xapi Connection
- * @param tag VLAN tag
- * @param network network on this host to create the VLAN on.
- * @return VLAN Network created.
- * @throws XenAPIException
- * @throws XmlRpcException
- */
- protected Network enableVlanNetwork(Connection conn, long tag, XsLocalNetwork network) throws XenAPIException, XmlRpcException {
- Network vlanNetwork = null;
- String oldName = "VLAN" + Long.toString(tag);
- String newName = "VLAN-" + network.getNetworkRecord(conn).uuid + "-" + tag;
- XsLocalNetwork vlanNic = getNetworkByName(conn, newName);
- if (vlanNic == null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Couldn't find vlan network with the new name so trying old name: " + oldName);
- }
- vlanNic = getNetworkByName(conn, oldName);
- if (vlanNic != null) {
- s_logger.info("Renaming VLAN with old name " + oldName + " to " + newName);
- vlanNic.getNetwork().setNameLabel(conn, newName);
- }
- }
- if (vlanNic == null) { // Can't find it, then create it.
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Creating VLAN network for " + tag + " on host " + _host.ip);
- }
- Network.Record nwr = new Network.Record();
- nwr.nameLabel = newName;
- nwr.tags = new HashSet<String>();
- nwr.tags.add(generateTimeStamp());
- vlanNetwork = Network.create(conn, nwr);
- vlanNic = getNetworkByName(conn, newName);
- }
-
- PIF nPif = network.getPif(conn);
- PIF.Record nPifr = network.getPifRecord(conn);
-
- vlanNetwork = vlanNic.getNetwork();
- if (vlanNic.getPif(conn) != null) {
- return vlanNetwork;
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Creating VLAN " + tag + " on host " + _host.ip + " on device " + nPifr.device);
- }
- VLAN vlan = VLAN.create(conn, nPif, tag, vlanNetwork);
- VLAN.Record vlanr = vlan.getRecord(conn);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VLAN is created for " + tag + ". The uuid is " + vlanr.uuid);
- }
-
- return vlanNetwork;
- }
-
- protected void disableVlanNetwork(Connection conn, Network network) {
- }
-
- protected SR getLocalLVMSR(Connection conn) {
- try {
- Map<SR, SR.Record> map = SR.getAllRecords(conn);
- for (Map.Entry<SR, SR.Record> entry : map.entrySet()) {
- SR.Record srRec = entry.getValue();
- if (SRType.LVM.equals(srRec.type)) {
- Set<PBD> pbds = srRec.PBDs;
- if (pbds == null) {
- continue;
- }
- for (PBD pbd : pbds) {
- Host host = pbd.getHost(conn);
- if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) {
- if (!pbd.getCurrentlyAttached(conn)) {
- pbd.plug(conn);
- }
- SR sr = entry.getKey();
- sr.scan(conn);
- return sr;
- }
- }
- }
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get local LVMSR in host:" + _host.uuid + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- String msg = "Unable to get local LVMSR in host:" + _host.uuid + e.getCause();
- s_logger.warn(msg);
- }
- return null;
- }
-
- protected SR getLocalEXTSR(Connection conn) {
- try {
- Map<SR, SR.Record> map = SR.getAllRecords(conn);
- for (Map.Entry<SR, SR.Record> entry : map.entrySet()) {
- SR.Record srRec = entry.getValue();
- if (SRType.FILE.equals(srRec.type) || SRType.EXT.equals(srRec.type)) {
- Set<PBD> pbds = srRec.PBDs;
- if (pbds == null) {
- continue;
- }
- for (PBD pbd : pbds) {
- Host host = pbd.getHost(conn);
- if (!isRefNull(host) && host.getUuid(conn).equals(_host.uuid)) {
- if (!pbd.getCurrentlyAttached(conn)) {
- pbd.plug(conn);
- }
- SR sr = entry.getKey();
- sr.scan(conn);
- return sr;
- }
- }
- }
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get local EXTSR in host:" + _host.uuid + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- String msg = "Unable to get local EXTSR in host:" + _host.uuid + e.getCause();
- s_logger.warn(msg);
- }
- return null;
- }
-
- protected StartupStorageCommand initializeLocalSR(Connection conn) {
- SR lvmsr = getLocalLVMSR(conn);
- if (lvmsr != null) {
- try {
- _host.localSRuuid = lvmsr.getUuid(conn);
-
- String lvmuuid = lvmsr.getUuid(conn);
- long cap = lvmsr.getPhysicalSize(conn);
- if (cap > 0) {
- long avail = cap - lvmsr.getPhysicalUtilisation(conn);
- lvmsr.setNameLabel(conn, lvmuuid);
- String name = "Cloud Stack Local LVM Storage Pool for " + _host.uuid;
- lvmsr.setNameDescription(conn, name);
- Host host = Host.getByUuid(conn, _host.uuid);
- String address = host.getAddress(conn);
- StoragePoolInfo pInfo = new StoragePoolInfo(lvmuuid, address, SRType.LVM.toString(), SRType.LVM.toString(), StoragePoolType.LVM, cap, avail);
- StartupStorageCommand cmd = new StartupStorageCommand();
- cmd.setPoolInfo(pInfo);
- cmd.setGuid(_host.uuid);
- cmd.setDataCenter(Long.toString(_dcId));
- cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
- return cmd;
- }
- } catch (XenAPIException e) {
- String msg = "build local LVM info err in host:" + _host.uuid + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- String msg = "build local LVM info err in host:" + _host.uuid + e.getMessage();
- s_logger.warn(msg);
- }
- }
-
- SR extsr = getLocalEXTSR(conn);
- if (extsr != null) {
- try {
- String extuuid = extsr.getUuid(conn);
- _host.localSRuuid = extuuid;
- long cap = extsr.getPhysicalSize(conn);
- if (cap > 0) {
- long avail = cap - extsr.getPhysicalUtilisation(conn);
- extsr.setNameLabel(conn, extuuid);
- String name = "Cloud Stack Local EXT Storage Pool for " + _host.uuid;
- extsr.setNameDescription(conn, name);
- Host host = Host.getByUuid(conn, _host.uuid);
- String address = host.getAddress(conn);
- StoragePoolInfo pInfo = new StoragePoolInfo(extuuid, address, SRType.EXT.toString(), SRType.EXT.toString(), StoragePoolType.EXT, cap, avail);
- StartupStorageCommand cmd = new StartupStorageCommand();
- cmd.setPoolInfo(pInfo);
- cmd.setGuid(_host.uuid);
- cmd.setDataCenter(Long.toString(_dcId));
- cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
- return cmd;
- }
- } catch (XenAPIException e) {
- String msg = "build local EXT info err in host:" + _host.uuid + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- String msg = "build local EXT info err in host:" + _host.uuid + e.getMessage();
- s_logger.warn(msg);
- }
- }
- return null;
- }
-
- @Override
- public PingCommand getCurrentStatus(long id) {
- try {
- if (!pingXAPI()) {
- Thread.sleep(1000);
- if (!pingXAPI()) {
- s_logger.warn(" can not ping xenserver " + _host.uuid);
- return null;
- }
- }
- Connection conn = getConnection();
- if (!_canBridgeFirewall && !_isOvs) {
- return new PingRoutingCommand(getType(), id, null, getHostVmStateReport(conn));
- } else if (_isOvs) {
- List<Pair<String, Long>> ovsStates = ovsFullSyncStates();
- return new PingRoutingWithOvsCommand(getType(), id, null, getHostVmStateReport(conn), ovsStates);
- } else {
- HashMap<String, Pair<Long, Long>> nwGrpStates = syncNetworkGroups(conn, id);
- return new PingRoutingWithNwGroupsCommand(getType(), id, null, getHostVmStateReport(conn), nwGrpStates);
- }
- } catch (Exception e) {
- s_logger.warn("Unable to get current status", e);
- return null;
- }
- }
-
- private HashMap<String, Pair<Long, Long>> syncNetworkGroups(Connection conn, long id) {
- HashMap<String, Pair<Long, Long>> states = new HashMap<String, Pair<Long, Long>>();
-
- String result = callHostPlugin(conn, "vmops", "get_rule_logs_for_vms", "host_uuid", _host.uuid);
- s_logger.trace("syncNetworkGroups: id=" + id + " got: " + result);
- String[] rulelogs = result != null ? result.split(";") : new String[0];
- for (String rulesforvm : rulelogs) {
- String[] log = rulesforvm.split(",");
- if (log.length != 6) {
- continue;
- }
- //output = ','.join([vmName, vmID, vmIP, domID, signature, seqno])
- try {
- states.put(log[0], new Pair<Long, Long>(Long.parseLong(log[1]), Long.parseLong(log[5])));
- } catch (NumberFormatException nfe) {
- states.put(log[0], new Pair<Long, Long>(-1L, -1L));
- }
- }
- return states;
- }
-
- @Override
- public Type getType() {
- return com.cloud.host.Host.Type.Routing;
- }
-
- protected boolean getHostInfo(Connection conn) throws IllegalArgumentException {
- try {
- Host myself = Host.getByUuid(conn, _host.uuid);
- Set<HostCpu> hcs = null;
- for (int i = 0; i < 10; i++) {
- hcs = myself.getHostCPUs(conn);
- _host.cpus = hcs.size();
- if (_host.cpus > 0) {
- break;
- }
- Thread.sleep(5000);
- }
- if (_host.cpus <= 0) {
- throw new CloudRuntimeException("Cannot get the numbers of cpu from XenServer host " + _host.ip);
- }
- Map<String, String> cpuInfo = myself.getCpuInfo(conn);
- if (cpuInfo.get("socket_count") != null) {
- _host.cpuSockets = Integer.parseInt(cpuInfo.get("socket_count"));
- }
- for (final HostCpu hc : hcs) {
- _host.speed = hc.getSpeed(conn).intValue();
- break;
- }
- Host.Record hr = myself.getRecord(conn);
- _host.productVersion = hr.softwareVersion.get("product_version");
- if (_host.productVersion == null) {
- _host.productVersion = hr.softwareVersion.get("platform_version");
- } else {
- _host.productVersion = _host.productVersion.trim();
- }
-
- XsLocalNetwork privateNic = getManagementNetwork(conn);
- _privateNetworkName = privateNic.getNetworkRecord(conn).nameLabel;
- _host.privatePif = privateNic.getPifRecord(conn).uuid;
- _host.privateNetwork = privateNic.getNetworkRecord(conn).uuid;
- _host.systemvmisouuid = null;
-
- XsLocalNetwork guestNic = null;
- if (_guestNetworkName != null && !_guestNetworkName.equals(_privateNetworkName)) {
- guestNic = getNetworkByName(conn, _guestNetworkName);
- if (guestNic == null) {
- s_logger.warn("Unable to find guest network " + _guestNetworkName);
- throw new IllegalArgumentException("Unable to find guest network " + _guestNetworkName + " for host " + _host.ip);
- }
- } else {
- guestNic = privateNic;
- _guestNetworkName = _privateNetworkName;
- }
- _host.guestNetwork = guestNic.getNetworkRecord(conn).uuid;
- _host.guestPif = guestNic.getPifRecord(conn).uuid;
-
- XsLocalNetwork publicNic = null;
- if (_publicNetworkName != null && !_publicNetworkName.equals(_guestNetworkName)) {
- publicNic = getNetworkByName(conn, _publicNetworkName);
- if (publicNic == null) {
- s_logger.warn("Unable to find public network " + _publicNetworkName + " for host " + _host.ip);
- throw new IllegalArgumentException("Unable to find public network " + _publicNetworkName + " for host " + _host.ip);
- }
- } else {
- publicNic = guestNic;
- _publicNetworkName = _guestNetworkName;
- }
- _host.publicPif = publicNic.getPifRecord(conn).uuid;
- _host.publicNetwork = publicNic.getNetworkRecord(conn).uuid;
- if (_storageNetworkName1 == null) {
- _storageNetworkName1 = _guestNetworkName;
- }
- XsLocalNetwork storageNic1 = null;
- storageNic1 = getNetworkByName(conn, _storageNetworkName1);
- if (storageNic1 == null) {
- s_logger.warn("Unable to find storage network " + _storageNetworkName1 + " for host " + _host.ip);
- throw new IllegalArgumentException("Unable to find storage network " + _storageNetworkName1 + " for host " + _host.ip);
- } else {
- _host.storageNetwork1 = storageNic1.getNetworkRecord(conn).uuid;
- _host.storagePif1 = storageNic1.getPifRecord(conn).uuid;
- }
-
- XsLocalNetwork storageNic2 = null;
- if (_storageNetworkName2 != null) {
- storageNic2 = getNetworkByName(conn, _storageNetworkName2);
- _host.storageNetwork2 = storageNic2.getNetworkRecord(conn).uuid;
- _host.storagePif2 = storageNic2.getPifRecord(conn).uuid;
- }
-
- s_logger.info("Private Network is " + _privateNetworkName + " for host " + _host.ip);
- s_logger.info("Guest Network is " + _guestNetworkName + " for host " + _host.ip);
- s_logger.info("Public Network is " + _publicNetworkName + " for host " + _host.ip);
-
- return true;
- } catch (XenAPIException e) {
- s_logger.warn("Unable to get host information for " + _host.ip, e);
- return false;
- } catch (Exception e) {
- s_logger.warn("Unable to get host information for " + _host.ip, e);
- return false;
- }
- }
-
- protected void plugDom0Vif(Connection conn, VIF dom0Vif) throws XmlRpcException, XenAPIException {
- if (dom0Vif != null) {
- dom0Vif.plug(conn);
- }
- }
-
- private void setupLinkLocalNetwork(Connection conn) {
- try {
- Network.Record rec = new Network.Record();
- Set<Network> networks = Network.getByNameLabel(conn, _linkLocalPrivateNetworkName);
- Network linkLocal = null;
-
- if (networks.size() == 0) {
- rec.nameDescription = "link local network used by system vms";
- rec.nameLabel = _linkLocalPrivateNetworkName;
- Map<String, String> configs = new HashMap<String, String>();
- configs.put("ip_begin", NetUtils.getLinkLocalGateway());
- configs.put("ip_end", NetUtils.getLinkLocalIpEnd());
- configs.put("netmask", NetUtils.getLinkLocalNetMask());
- rec.otherConfig = configs;
- linkLocal = Network.create(conn, rec);
-
- } else {
- linkLocal = networks.iterator().next();
- }
-
- /* Make sure there is a physical bridge on this network */
- VIF dom0vif = null;
- Pair<VM, VM.Record> vm = getControlDomain(conn);
- VM dom0 = vm.first();
- Set<VIF> vifs = dom0.getVIFs(conn);
- if (vifs.size() != 0) {
- for (VIF vif : vifs) {
- Map<String, String> otherConfig = vif.getOtherConfig(conn);
- if (otherConfig != null) {
- String nameLabel = otherConfig.get("nameLabel");
- if ((nameLabel != null) && nameLabel.equalsIgnoreCase("link_local_network_vif")) {
- dom0vif = vif;
- }
- }
- }
- }
-
- /* create temp VIF0 */
- if (dom0vif == null) {
- s_logger.debug("Can't find a vif on dom0 for link local, creating a new one");
- VIF.Record vifr = new VIF.Record();
- vifr.VM = dom0;
- vifr.device = getLowestAvailableVIFDeviceNum(conn, dom0);
- if (vifr.device == null) {
- s_logger.debug("Failed to create link local network, no vif available");
- return;
- }
- Map<String, String> config = new HashMap<String, String>();
- config.put("nameLabel", "link_local_network_vif");
- vifr.otherConfig = config;
- vifr.MAC = "FE:FF:FF:FF:FF:FF";
- vifr.network = linkLocal;
- vifr.lockingMode = Types.VifLockingMode.NETWORK_DEFAULT;
- dom0vif = VIF.create(conn, vifr);
- plugDom0Vif(conn, dom0vif);
- } else {
- s_logger.debug("already have a vif on dom0 for link local network");
- if (!dom0vif.getCurrentlyAttached(conn)) {
- plugDom0Vif(conn, dom0vif);
- }
- }
-
- String brName = linkLocal.getBridge(conn);
- callHostPlugin(conn, "vmops", "setLinkLocalIP", "brName", brName);
- _host.linkLocalNetwork = linkLocal.getUuid(conn);
-
- } catch (XenAPIException e) {
- s_logger.warn("Unable to create local link network", e);
- throw new CloudRuntimeException("Unable to create local link network due to " + e.toString(), e);
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to create local link network", e);
- throw new CloudRuntimeException("Unable to create local link network due to " + e.toString(), e);
- }
- }
-
- protected boolean transferManagementNetwork(Connection conn, Host host, PIF src, PIF.Record spr, PIF dest) throws XmlRpcException, XenAPIException {
- dest.reconfigureIp(conn, spr.ipConfigurationMode, spr.IP, spr.netmask, spr.gateway, spr.DNS);
- Host.managementReconfigure(conn, dest);
- String hostUuid = null;
- int count = 0;
- while (count < 10) {
- try {
- Thread.sleep(10000);
- hostUuid = host.getUuid(conn);
- if (hostUuid != null) {
- break;
- }
- } catch (XmlRpcException e) {
- s_logger.debug("Waiting for host to come back: " + e.getMessage());
- } catch (XenAPIException e) {
- s_logger.debug("Waiting for host to come back: " + e.getMessage());
- } catch (InterruptedException e) {
- s_logger.debug("Gotta run");
- return false;
- }
- }
- if (hostUuid == null) {
- s_logger.warn("Unable to transfer the management network from " + spr.uuid);
- return false;
- }
-
- src.reconfigureIp(conn, Types.IpConfigurationMode.NONE, null, null, null, null);
- return true;
- }
-
- @Override
- public StartupCommand[] initialize() throws IllegalArgumentException {
- Connection conn = getConnection();
- if (!getHostInfo(conn)) {
- s_logger.warn("Unable to get host information for " + _host.ip);
- return null;
- }
- StartupRoutingCommand cmd = new StartupRoutingCommand();
- fillHostInfo(conn, cmd);
- cmd.setHypervisorType(HypervisorType.XenServer);
- cmd.setCluster(_cluster);
- cmd.setPoolSync(false);
- cmd.setHostVmStateReport(getHostVmStateReport(conn));
-
- Pool pool;
- try {
- pool = Pool.getByUuid(conn, _host.pool);
- Pool.Record poolr = pool.getRecord(conn);
-
- Host.Record hostr = poolr.master.getRecord(conn);
- if (_host.uuid.equals(hostr.uuid)) {
- HashMap<String, Pair<String, State>> allStates = fullClusterSync(conn);
- cmd.setClusterVMStateChanges(allStates);
- }
- } catch (Throwable e) {
- s_logger.warn("Check for master failed, failing the FULL Cluster sync command");
- }
-
- StartupStorageCommand sscmd = initializeLocalSR(conn);
- if (sscmd != null) {
- return new StartupCommand[] {cmd, sscmd};
- }
- return new StartupCommand[] {cmd};
- }
-
- private void cleanupTemplateSR(Connection conn) {
- Set<PBD> pbds = null;
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- pbds = host.getPBDs(conn);
- } catch (XenAPIException e) {
- s_logger.warn("Unable to get the SRs " + e.toString(), e);
- throw new CloudRuntimeException("Unable to get SRs " + e.toString(), e);
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to get SRs " + e.getMessage(), e);
- }
- for (PBD pbd : pbds) {
- SR sr = null;
- SR.Record srRec = null;
- try {
- sr = pbd.getSR(conn);
- srRec = sr.getRecord(conn);
- } catch (Exception e) {
- s_logger.warn("pbd.getSR get Exception due to ", e);
- continue;
- }
- String type = srRec.type;
- if (srRec.shared) {
- continue;
- }
- if (SRType.NFS.equals(type) || (SRType.ISO.equals(type) && srRec.nameDescription.contains("template"))) {
- try {
- pbd.unplug(conn);
- pbd.destroy(conn);
- sr.forget(conn);
- } catch (Exception e) {
- s_logger.warn("forget SR catch Exception due to ", e);
- }
- }
- }
- }
-
- protected boolean launchHeartBeat(Connection conn) {
- String result = callHostPluginPremium(conn, "heartbeat", "host", _host.uuid, "interval", Integer
- .toString(_heartbeatInterval));
- if (result == null || !result.contains("> DONE <")) {
- s_logger.warn("Unable to launch the heartbeat process on " + _host.ip);
- return false;
- }
- return true;
- }
-
- protected SetupAnswer execute(SetupCommand cmd) {
- Connection conn = getConnection();
- setupServer(conn);
- try {
- if (!setIptables(conn)) {
- s_logger.warn("set xenserver Iptable failed");
- return null;
- }
-
- if (_securityGroupEnabled) {
- _canBridgeFirewall = can_bridge_firewall(conn);
- if (!_canBridgeFirewall) {
- String msg = "Failed to configure brige firewall";
- s_logger.warn(msg);
- s_logger.warn("Check host " + _host.ip +" for CSP is installed or not and check network mode for bridge");
- return new SetupAnswer(cmd, msg);
- }
-
- }
-
-
- boolean r = launchHeartBeat(conn);
- if (!r) {
- return null;
- }
- cleanupTemplateSR(conn);
- Host host = Host.getByUuid(conn, _host.uuid);
- try {
- if (cmd.useMultipath()) {
- // the config value is set to true
- host.addToOtherConfig(conn, "multipathing", "true");
- host.addToOtherConfig(conn, "multipathhandle", "dmp");
- }
-
- } catch (Types.MapDuplicateKey e) {
- s_logger.debug("multipath is already set");
- }
-
- if (cmd.needSetup() ) {
- String result = callHostPlugin(conn, "vmops", "setup_iscsi", "uuid", _host.uuid);
-
- if (!result.contains("> DONE <")) {
- s_logger.warn("Unable to setup iscsi: " + result);
- return new SetupAnswer(cmd, result);
- }
-
- Pair<PIF, PIF.Record> mgmtPif = null;
- Set<PIF> hostPifs = host.getPIFs(conn);
- for (PIF pif : hostPifs) {
- PIF.Record rec = pif.getRecord(conn);
- if (rec.management) {
- if (rec.VLAN != null && rec.VLAN != -1) {
- String msg =
- new StringBuilder("Unsupported configuration. Management network is on a VLAN. host=").append(_host.uuid)
- .append("; pif=")
- .append(rec.uuid)
- .append("; vlan=")
- .append(rec.VLAN)
- .toString();
- s_logger.warn(msg);
- return new SetupAnswer(cmd, msg);
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Management network is on pif=" + rec.uuid);
- }
- mgmtPif = new Pair<PIF, PIF.Record>(pif, rec);
- break;
- }
- }
-
- if (mgmtPif == null) {
- String msg = "Unable to find management network for " + _host.uuid;
- s_logger.warn(msg);
- return new SetupAnswer(cmd, msg);
- }
-
- Map<Network, Network.Record> networks = Network.getAllRecords(conn);
- for (Network.Record network : networks.values()) {
- if (network.nameLabel.equals("cloud-private")) {
- for (PIF pif : network.PIFs) {
- PIF.Record pr = pif.getRecord(conn);
- if (_host.uuid.equals(pr.host.getUuid(conn))) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Found a network called cloud-private. host=" + _host.uuid + "; Network=" + network.uuid + "; pif=" + pr.uuid);
- }
- if (pr.VLAN != null && pr.VLAN != -1) {
- String msg =
- new StringBuilder("Unsupported configuration. Network cloud-private is on a VLAN. Network=").append(network.uuid)
- .append(" ; pif=")
- .append(pr.uuid)
- .toString();
- s_logger.warn(msg);
- return new SetupAnswer(cmd, msg);
- }
- if (!pr.management && pr.bondMasterOf != null && pr.bondMasterOf.size() > 0) {
- if (pr.bondMasterOf.size() > 1) {
- String msg =
- new StringBuilder("Unsupported configuration. Network cloud-private has more than one bond. Network=").append(network.uuid)
- .append("; pif=")
- .append(pr.uuid)
- .toString();
- s_logger.warn(msg);
- return new SetupAnswer(cmd, msg);
- }
- Bond bond = pr.bondMasterOf.iterator().next();
- Set<PIF> slaves = bond.getSlaves(conn);
- for (PIF slave : slaves) {
- PIF.Record spr = slave.getRecord(conn);
- if (spr.management) {
- if (!transferManagementNetwork(conn, host, slave, spr, pif)) {
- String msg =
- new StringBuilder("Unable to transfer management network. slave=" + spr.uuid + "; master=" + pr.uuid + "; host=" +
- _host.uuid).toString();
- s_logger.warn(msg);
- return new SetupAnswer(cmd, msg);
- }
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- return new SetupAnswer(cmd, false);
-
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to setup", e);
- return new SetupAnswer(cmd, e.getMessage());
- } catch (XenAPIException e) {
- s_logger.warn("Unable to setup", e);
- return new SetupAnswer(cmd, e.getMessage());
- } catch (Exception e) {
- s_logger.warn("Unable to setup", e);
- return new SetupAnswer(cmd, e.getMessage());
- }
- }
-
- /* return : if setup is needed */
- protected boolean setupServer(Connection conn) {
- String packageVersion = CitrixResourceBase.class.getPackage().getImplementationVersion();
- String version = this.getClass().getName() + "-" + (packageVersion == null ? Long.toString(System.currentTimeMillis()) : packageVersion);
-
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- /* enable host in case it is disabled somehow */
- host.enable(conn);
- /* push patches to XenServer */
- Host.Record hr = host.getRecord(conn);
-
- Iterator<String> it = hr.tags.iterator();
-
- while (it.hasNext()) {
- String tag = it.next();
- if (tag.startsWith("vmops-version-")) {
- if (tag.contains(version)) {
- s_logger.info(logX(host, "Host " + hr.address + " is already setup."));
- return false;
- } else {
- it.remove();
- }
- }
- }
-
- com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(hr.address, 22);
- try {
- sshConnection.connect(null, 60000, 60000);
- if (!sshConnection.authenticateWithPassword(_username, _password.peek())) {
- throw new CloudRuntimeException("Unable to authenticate");
- }
-
- com.trilead.ssh2.Session session = sshConnection.openSession();
-
- String cmd = "mkdir -p /opt/cloud/bin /var/log/cloud";
- if (!SSHCmdHelper.sshExecuteCmd(sshConnection, cmd)) {
- throw new CloudRuntimeException("Cannot create directory /opt/cloud/bin on XenServer hosts");
- }
-
- SCPClient scp = new SCPClient(sshConnection);
-
- List<File> files = getPatchFiles();
- if (files == null || files.isEmpty()) {
- throw new CloudRuntimeException("Can not find patch file");
- }
- for (File file : files) {
- String path = file.getParentFile().getAbsolutePath() + "/";
- Properties props = new Properties();
- props.load(new FileInputStream(file));
-
- for (Map.Entry<Object, Object> entry : props.entrySet()) {
- String k = (String)entry.getKey();
- String v = (String)entry.getValue();
-
- assert (k != null && k.length() > 0 && v != null && v.length() > 0) : "Problems with " + k + "=" + v;
-
- String[] tokens = v.split(",");
- String f = null;
- if (tokens.length == 3 && tokens[0].length() > 0) {
- if (tokens[0].startsWith("/")) {
- f = tokens[0];
- } else if (tokens[0].startsWith("~")) {
- String homedir = System.getenv("HOME");
- f = homedir + tokens[0].substring(1) + k;
- } else {
- f = path + tokens[0] + '/' + k;
- }
- } else {
- f = path + k;
- }
- String d = tokens[tokens.length - 1];
- f = f.replace('/', File.separatorChar);
-
- String p = "0755";
- if (tokens.length == 3) {
- p = tokens[1];
- } else if (tokens.length == 2) {
- p = tokens[0];
- }
-
- if (!new File(f).exists()) {
- s_logger.warn("We cannot locate " + f);
- continue;
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Copying " + f + " to " + d + " on " + hr.address + " with permission " + p);
- }
- try {
- session.execCommand("mkdir -m 700 -p " + d);
- } catch (IOException e) {
- s_logger.debug("Unable to create destination path: " + d + " on " + hr.address + " but trying anyway");
-
- }
- scp.put(f, d, p);
-
- }
- }
-
- } catch (IOException e) {
- throw new CloudRuntimeException("Unable to setup the server correctly", e);
- } finally {
- sshConnection.close();
- }
- hr.tags.add("vmops-version-" + version);
- host.setTags(conn, hr.tags);
- return true;
- } catch (XenAPIException e) {
- String msg = "Xen setup failed due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException("Unable to get host information " + e.toString(), e);
- } catch (XmlRpcException e) {
- String msg = "Xen setup failed due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException("Unable to get host information ", e);
- }
- }
-
- protected CheckNetworkAnswer execute(CheckNetworkCommand cmd) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Checking if network name setup is done on the resource");
- }
-
- List<PhysicalNetworkSetupInfo> infoList = cmd.getPhysicalNetworkInfoList();
-
- try {
- boolean errorout = false;
- String msg = "";
- for (PhysicalNetworkSetupInfo info : infoList) {
- if (!isNetworkSetupByName(info.getGuestNetworkName())) {
- msg =
- "For Physical Network id:" + info.getPhysicalNetworkId() + ", Guest Network is not configured on the backend by name " +
- info.getGuestNetworkName();
- errorout = true;
- break;
- }
- if (!isNetworkSetupByName(info.getPrivateNetworkName())) {
- msg =
- "For Physical Network id:" + info.getPhysicalNetworkId() + ", Private Network is not configured on the backend by name " +
- info.getPrivateNetworkName();
- errorout = true;
- break;
- }
- if (!isNetworkSetupByName(info.getPublicNetworkName())) {
- msg =
- "For Physical Network id:" + info.getPhysicalNetworkId() + ", Public Network is not configured on the backend by name " +
- info.getPublicNetworkName();
- errorout = true;
- break;
- }
- /*if(!isNetworkSetupByName(info.getStorageNetworkName())){
- msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Storage Network is not configured on the backend by name " + info.getStorageNetworkName();
- errorout = true;
- break;
- }*/
- }
- if (errorout) {
- s_logger.error(msg);
- return new CheckNetworkAnswer(cmd, false, msg);
- } else {
- return new CheckNetworkAnswer(cmd, true, "Network Setup check by names is done");
- }
-
- } catch (XenAPIException e) {
- String msg = "CheckNetworkCommand failed with XenAPIException:" + e.toString() + " host:" + _host.uuid;
- s_logger.warn(msg, e);
- return new CheckNetworkAnswer(cmd, false, msg);
- } catch (Exception e) {
- String msg = "CheckNetworkCommand failed with Exception:" + e.getMessage() + " host:" + _host.uuid;
- s_logger.warn(msg, e);
- return new CheckNetworkAnswer(cmd, false, msg);
- }
- }
-
- protected boolean isNetworkSetupByName(String nameTag) throws XenAPIException, XmlRpcException {
- if (nameTag != null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Looking for network setup by name " + nameTag);
- }
- Connection conn = getConnection();
- XsLocalNetwork network = getNetworkByName(conn, nameTag);
- if (network == null) {
- return false;
- }
- }
- return true;
- }
-
- protected List<File> getPatchFiles() {
- return null;
- }
-
- protected SR getSRByNameLabelandHost(Connection conn, String name) throws BadServerResponse, XenAPIException, XmlRpcException {
- Set<SR> srs = SR.getByNameLabel(conn, name);
- SR ressr = null;
- for (SR sr : srs) {
- Set<PBD> pbds;
- pbds = sr.getPBDs(conn);
- for (PBD pbd : pbds) {
- PBD.Record pbdr = pbd.getRecord(conn);
- if (pbdr.host != null && pbdr.host.getUuid(conn).equals(_host.uuid)) {
- if (!pbdr.currentlyAttached) {
- pbd.plug(conn);
- }
- ressr = sr;
- break;
- }
- }
- }
- return ressr;
- }
-
- protected GetStorageStatsAnswer execute(final GetStorageStatsCommand cmd) {
- Connection conn = getConnection();
- try {
- Set<SR> srs = SR.getByNameLabel(conn, cmd.getStorageId());
- if (srs.size() != 1) {
- String msg = "There are " + srs.size() + " storageid: " + cmd.getStorageId();
- s_logger.warn(msg);
- return new GetStorageStatsAnswer(cmd, msg);
- }
- SR sr = srs.iterator().next();
- sr.scan(conn);
- long capacity = sr.getPhysicalSize(conn);
- long used = sr.getPhysicalUtilisation(conn);
- return new GetStorageStatsAnswer(cmd, capacity, used);
- } catch (XenAPIException e) {
- String msg = "GetStorageStats Exception:" + e.toString() + "host:" + _host.uuid + "storageid: " + cmd.getStorageId();
- s_logger.warn(msg);
- return new GetStorageStatsAnswer(cmd, msg);
- } catch (XmlRpcException e) {
- String msg = "GetStorageStats Exception:" + e.getMessage() + "host:" + _host.uuid + "storageid: " + cmd.getStorageId();
- s_logger.warn(msg);
- return new GetStorageStatsAnswer(cmd, msg);
- }
- }
-
- private void pbdPlug(Connection conn, PBD pbd, String uuid) {
- try {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Plugging in PBD " + uuid + " for " + _host);
- }
- pbd.plug(conn);
- } catch (Exception e) {
- String msg = "PBD " + uuid + " is not attached! and PBD plug failed due to " + e.toString() + ". Please check this PBD in " + _host;
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- }
- }
-
- protected boolean checkSR(Connection conn, SR sr) {
- try {
- SR.Record srr = sr.getRecord(conn);
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds.size() == 0) {
- String msg = "There is no PBDs for this SR: " + srr.nameLabel + " on host:" + _host.uuid;
- s_logger.warn(msg);
- return false;
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Checking " + srr.nameLabel + " or SR " + srr.uuid + " on " + _host);
- }
- if (srr.shared) {
- if (SRType.NFS.equals(srr.type) ){
- Map<String, String> smConfig = srr.smConfig;
- if( !smConfig.containsKey("nosubdir")) {
- smConfig.put("nosubdir", "true");
- sr.setSmConfig(conn,smConfig);
- }
- }
-
- Host host = Host.getByUuid(conn, _host.uuid);
- boolean found = false;
- for (PBD pbd : pbds) {
- PBD.Record pbdr = pbd.getRecord(conn);
- if (host.equals(pbdr.host)) {
- if (!pbdr.currentlyAttached) {
- pbdPlug(conn, pbd, pbdr.uuid);
- }
- found = true;
- break;
- }
- }
- if (!found) {
- PBD.Record pbdr = srr.PBDs.iterator().next().getRecord(conn);
- pbdr.host = host;
- pbdr.uuid = "";
- PBD pbd = PBD.create(conn, pbdr);
- pbdPlug(conn, pbd, pbd.getUuid(conn));
- }
- } else {
- for (PBD pbd : pbds) {
- PBD.Record pbdr = pbd.getRecord(conn);
- if (!pbdr.currentlyAttached) {
- pbdPlug(conn, pbd, pbdr.uuid);
- }
- }
- }
-
- } catch (Exception e) {
- String msg = "checkSR failed host:" + _host + " due to " + e.toString();
- s_logger.warn(msg, e);
- return false;
- }
- return true;
- }
-
- protected Answer execute(CreateStoragePoolCommand cmd) {
- Connection conn = getConnection();
- StorageFilerTO pool = cmd.getPool();
- try {
- if (pool.getType() == StoragePoolType.NetworkFilesystem) {
- getNfsSR(conn, pool);
- } else if (pool.getType() == StoragePoolType.IscsiLUN) {
- getIscsiSR(conn, pool.getUuid(), pool.getHost(), pool.getPath(), null, null, false);
- } else if (pool.getType() == StoragePoolType.PreSetup) {
- } else {
- return new Answer(cmd, false, "The pool type: " + pool.getType().name() + " is not supported.");
- }
- return new Answer(cmd, true, "success");
- } catch (Exception e) {
- String msg =
- "Catch Exception " + e.getClass().getName() + ", create StoragePool failed due to " + e.toString() + " on host:" + _host.uuid + " pool: " +
- pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
-
- }
-
- protected String callHostPluginThroughMaster(Connection conn, String plugin, String cmd, String... params) {
- Map<String, String> args = new HashMap<String, String>();
-
- try {
- Map<Pool, Pool.Record> poolRecs = Pool.getAllRecords(conn);
- if (poolRecs.size() != 1) {
- throw new CloudRuntimeException("There are " + poolRecs.size() + " pool for host :" + _host.uuid);
- }
- Host master = poolRecs.values().iterator().next().master;
- for (int i = 0; i < params.length; i += 2) {
- args.put(params[i], params[i + 1]);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin executing for command " + cmd + " with " + getArgsString(args));
- }
- String result = master.callPlugin(conn, plugin, cmd, args);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("callHostPlugin Result: " + result);
- }
- return result.replace("\n", "");
- } catch (Types.HandleInvalid e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to HandleInvalid clazz:" + e.clazz + ", handle:" +
- e.handle);
- } catch (XenAPIException e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.toString(), e);
- } catch (XmlRpcException e) {
- s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to " + e.getMessage(), e);
- }
- return null;
- }
-
- protected String callHostPluginPremium(Connection conn, String cmd, String... params) {
- return callHostPlugin(conn, "vmopspremium", cmd, params);
- }
-
- protected String setupHeartbeatSr(Connection conn, SR sr, boolean force) throws XenAPIException, XmlRpcException {
- SR.Record srRec = sr.getRecord(conn);
- String srUuid = srRec.uuid;
- if (!srRec.shared || (!SRType.LVMOHBA.equals(srRec.type) && !SRType.LVMOISCSI.equals(srRec.type) && !SRType.NFS.equals(srRec.type))) {
- return srUuid;
- }
- String result = null;
- Host host = Host.getByUuid(conn, _host.uuid);
- Set<String> tags = host.getTags(conn);
- if (force || !tags.contains("cloud-heartbeat-" + srUuid)) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Setting up the heartbeat sr for host " + _host.ip + " and sr " + srUuid);
- }
- Set<PBD> pbds = sr.getPBDs(conn);
- for (PBD pbd : pbds) {
- PBD.Record pbdr = pbd.getRecord(conn);
- if (!pbdr.currentlyAttached && pbdr.host.getUuid(conn).equals(_host.uuid)) {
- pbd.plug(conn);
- break;
- }
- }
- result = callHostPluginThroughMaster(conn, "vmopspremium", "setup_heartbeat_sr", "host", _host.uuid, "sr", srUuid);
- if (result == null || !result.split("#")[1].equals("0")) {
- throw new CloudRuntimeException("Unable to setup heartbeat sr on SR " + srUuid + " due to " + result);
- }
-
- if (!tags.contains("cloud-heartbeat-" + srUuid)) {
- tags.add("cloud-heartbeat-" + srUuid);
- host.setTags(conn, tags);
- }
- }
- result = callHostPluginPremium(conn, "setup_heartbeat_file", "host", _host.uuid, "sr", srUuid, "add", "true");
- if (result == null || !result.split("#")[1].equals("0")) {
- throw new CloudRuntimeException("Unable to setup heartbeat file entry on SR " + srUuid + " due to " + result);
- }
- return srUuid;
- }
-
- protected Answer execute(ModifyStoragePoolCommand cmd) {
- Connection conn = getConnection();
- StorageFilerTO pool = cmd.getPool();
- boolean add = cmd.getAdd();
- if (add) {
- try {
- SR sr = getStorageRepository(conn, pool.getUuid());
- setupHeartbeatSr(conn, sr, false);
- long capacity = sr.getPhysicalSize(conn);
- long available = capacity - sr.getPhysicalUtilisation(conn);
- if (capacity == -1) {
- String msg = "Pool capacity is -1! pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg);
- return new Answer(cmd, false, msg);
- }
- Map<String, TemplateProp> tInfo = new HashMap<String, TemplateProp>();
- ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, capacity, available, tInfo);
- return answer;
- } catch (XenAPIException e) {
- String msg = "ModifyStoragePoolCommand add XenAPIException:" + e.toString() + " host:" + _host.uuid + " pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- } catch (Exception e) {
- String msg = "ModifyStoragePoolCommand add XenAPIException:" + e.getMessage() + " host:" + _host.uuid + " pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
- } else {
- try {
- SR sr = getStorageRepository(conn, pool.getUuid());
- String srUuid = sr.getUuid(conn);
- String result = callHostPluginPremium(conn, "setup_heartbeat_file", "host", _host.uuid, "sr", srUuid, "add", "false");
- if (result == null || !result.split("#")[1].equals("0")) {
- throw new CloudRuntimeException("Unable to remove heartbeat file entry for SR " + srUuid + " due to " + result);
- }
- return new Answer(cmd, true, "seccuss");
- } catch (XenAPIException e) {
- String msg = "ModifyStoragePoolCommand remove XenAPIException:" + e.toString() + " host:" + _host.uuid + " pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- } catch (Exception e) {
- String msg = "ModifyStoragePoolCommand remove XenAPIException:" + e.getMessage() + " host:" + _host.uuid + " pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
- }
-
- }
-
- protected boolean can_bridge_firewall(Connection conn) {
- return Boolean.valueOf(callHostPlugin(conn, "vmops", "can_bridge_firewall", "host_uuid", _host.uuid, "instance", _instance));
- }
-
- private Answer execute(OvsSetupBridgeCommand cmd) {
- Connection conn = getConnection();
- findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
- configureTunnelNetwork(conn, cmd.getNetworkId(), cmd.getHostId(), cmd.getBridgeName());
- s_logger.debug("OVS Bridge configured");
- return new Answer(cmd, true, null);
- }
-
- private Answer execute(OvsDestroyBridgeCommand cmd) {
- Connection conn = getConnection();
- Network nw = findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
- cleanUpTmpDomVif(conn, nw);
- destroyTunnelNetwork(conn, cmd.getBridgeName());
- s_logger.debug("OVS Bridge destroyed");
- return new Answer(cmd, true, null);
- }
-
- private Answer execute(OvsDestroyTunnelCommand cmd) {
- Connection conn = getConnection();
- try {
- Network nw = findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
- if (nw == null) {
- s_logger.warn("Unable to find tunnel network for GRE key:" + cmd.getBridgeName());
- return new Answer(cmd, false, "No network found");
- }
-
- String bridge = nw.getBridge(conn);
- String result = callHostPlugin(conn, "ovstunnel", "destroy_tunnel", "bridge", bridge, "in_port", cmd.getInPortName());
-
- if (result.equalsIgnoreCase("SUCCESS")) {
- return new Answer(cmd, true, result);
- } else {
- return new Answer(cmd, false, result);
- }
- } catch (Exception e) {
- s_logger.warn("caught execption when destroy ovs tunnel", e);
- return new Answer(cmd, false, e.getMessage());
- }
- }
-
- public Answer execute(OvsVpcPhysicalTopologyConfigCommand cmd) {
- Connection conn = getConnection();
- try {
- Network nw = findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
- String bridgeName = nw.getBridge(conn);
- String result = callHostPlugin(conn, "ovstunnel", "configure_ovs_bridge_for_network_topology", "bridge",
- bridgeName, "config", cmd.getVpcConfigInJson(), "host-id", ((Long)cmd.getHostId()).toString());
- if (result.startsWith("SUCCESS")) {
- return new Answer(cmd, true, result);
- } else {
- return new Answer(cmd, false, result);
- }
- } catch (Exception e) {
- s_logger.warn("caught exception while updating host with latest VPC topology", e);
- return new Answer(cmd, false, e.getMessage());
- }
- }
-
- public Answer execute(OvsVpcRoutingPolicyConfigCommand cmd) {
- Connection conn = getConnection();
- try {
- Network nw = findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
- String bridgeName = nw.getBridge(conn);
-
- String result = callHostPlugin(conn, "ovstunnel", "configure_ovs_bridge_for_routing_policies", "bridge",
- bridgeName, "host-id", ((Long)cmd.getHostId()).toString(), "config",
- cmd.getVpcConfigInJson());
- if (result.startsWith("SUCCESS")) {
- return new Answer(cmd, true, result);
- } else {
- return new Answer(cmd, false, result);
- }
- } catch (Exception e) {
- s_logger.warn("caught exception while updating host with latest routing policies", e);
- return new Answer(cmd, false, e.getMessage());
- }
- }
-
- private Answer execute(UpdateHostPasswordCommand cmd) {
- _password.add(cmd.getNewPassword());
- return new Answer(cmd, true, null);
- }
-
- private OvsCreateTunnelAnswer execute(OvsCreateTunnelCommand cmd) {
- Connection conn = getConnection();
- String bridge = "unknown";
- try {
- Network nw = findOrCreateTunnelNetwork(conn, cmd.getNetworkName());
- if (nw == null) {
- s_logger.debug("Error during bridge setup");
- return new OvsCreateTunnelAnswer(cmd, false, "Cannot create network", bridge);
- }
-
- configureTunnelNetwork(conn, cmd.getNetworkId(), cmd.getFrom(), cmd.getNetworkName());
- bridge = nw.getBridge(conn);
- String result =
- callHostPlugin(conn, "ovstunnel", "create_tunnel", "bridge", bridge, "remote_ip", cmd.getRemoteIp(),
- "key", cmd.getKey().toString(), "from",
- cmd.getFrom().toString(), "to", cmd.getTo().toString(), "cloudstack-network-id",
- cmd.getNetworkUuid());
- String[] res = result.split(":");
- if (res.length == 2 && res[0].equalsIgnoreCase("SUCCESS")) {
- return new OvsCreateTunnelAnswer(cmd, true, result, res[1], bridge);
- } else {
- return new OvsCreateTunnelAnswer(cmd, false, result, bridge);
- }
- } catch (Exception e) {
- s_logger.debug("Error during tunnel setup");
- s_logger.warn("Caught execption when creating ovs tunnel", e);
- return new OvsCreateTunnelAnswer(cmd, false, e.getMessage(), bridge);
- }
- }
-
- private Answer execute(OvsDeleteFlowCommand cmd) {
- _isOvs = true;
-
- Connection conn = getConnection();
- try {
- Network nw = setupvSwitchNetwork(conn);
- String bridge = nw.getBridge(conn);
- String result = callHostPlugin(conn, "ovsgre", "ovs_delete_flow", "bridge", bridge, "vmName", cmd.getVmName());
-
- if (result.equalsIgnoreCase("SUCCESS")) {
- return new Answer(cmd, true, "success to delete flows for " + cmd.getVmName());
- } else {
- return new Answer(cmd, false, result);
- }
- } catch (BadServerResponse e) {
- s_logger.error("Failed to delete flow", e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to delete flow", e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to delete flow", e);
- }
- return new Answer(cmd, false, "failed to delete flow for " + cmd.getVmName());
- }
-
- private List<Pair<String, Long>> ovsFullSyncStates() {
- Connection conn = getConnection();
- String result = callHostPlugin(conn, "ovsgre", "ovs_get_vm_log", "host_uuid", _host.uuid);
- String[] logs = result != null ? result.split(";") : new String[0];
- List<Pair<String, Long>> states = new ArrayList<Pair<String, Long>>();
- for (String log : logs) {
- String[] info = log.split(",");
- if (info.length != 5) {
- s_logger.warn("Wrong element number in ovs log(" + log + ")");
- continue;
- }
-
- //','.join([bridge, vmName, vmId, seqno, tag])
- try {
- states.add(new Pair<String, Long>(info[0], Long.parseLong(info[3])));
- } catch (NumberFormatException nfe) {
- states.add(new Pair<String, Long>(info[0], -1L));
- }
- }
- return states;
- }
-
- private OvsSetTagAndFlowAnswer execute(OvsSetTagAndFlowCommand cmd) {
- _isOvs = true;
-
- Connection conn = getConnection();
- try {
- Network nw = setupvSwitchNetwork(conn);
- String bridge = nw.getBridge(conn);
-
- /*If VM is domainRouter, this will try to set flow and tag on its
- * none guest network nic. don't worry, it will fail silently at host
- * plugin side
- */
- String result =
- callHostPlugin(conn, "ovsgre", "ovs_set_tag_and_flow", "bridge", bridge, "vmName", cmd.getVmName(), "tag", cmd.getTag(), "vlans", cmd.getVlans(),
- "seqno", cmd.getSeqNo());
- s_logger.debug("set flow for " + cmd.getVmName() + " " + result);
-
- if (result.equalsIgnoreCase("SUCCESS")) {
- return new OvsSetTagAndFlowAnswer(cmd, true, result);
- } else {
- return new OvsSetTagAndFlowAnswer(cmd, false, result);
- }
- } catch (BadServerResponse e) {
- s_logger.error("Failed to set tag and flow", e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to set tag and flow", e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to set tag and flow", e);
- }
-
- return new OvsSetTagAndFlowAnswer(cmd, false, "EXCEPTION");
- }
-
- private OvsFetchInterfaceAnswer execute(OvsFetchInterfaceCommand cmd) {
-
- String label = cmd.getLabel();
- //FIXME: this is a tricky to pass the network checking in XCP. I temporary get default label from Host.
- if (is_xcp()) {
- label = getLabel();
- }
- s_logger.debug("Will look for network with name-label:" + label + " on host " + _host.ip);
- Connection conn = getConnection();
- try {
- XsLocalNetwork nw = getNetworkByName(conn, label);
- s_logger.debug("Network object:" + nw.getNetwork().getUuid(conn));
- PIF pif = nw.getPif(conn);
- PIF.Record pifRec = pif.getRecord(conn);
- s_logger.debug("PIF object:" + pifRec.uuid + "(" + pifRec.device + ")");
- return new OvsFetchInterfaceAnswer(cmd, true, "Interface " + pifRec.device + " retrieved successfully", pifRec.IP, pifRec.netmask, pifRec.MAC);
- } catch (BadServerResponse e) {
- s_logger.error("An error occurred while fetching the interface for " + label + " on host " + _host.ip, e);
- return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
- } catch (XenAPIException e) {
- s_logger.error("An error occurred while fetching the interface for " + label + " on host " + _host.ip, e);
- return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
- } catch (XmlRpcException e) {
- s_logger.error("An error occurred while fetching the interface for " + label + " on host " + _host.ip, e);
- return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage());
- }
- }
-
- private OvsCreateGreTunnelAnswer execute(OvsCreateGreTunnelCommand cmd) {
- _isOvs = true;
-
- Connection conn = getConnection();
- String bridge = "unkonwn";
- try {
- Network nw = setupvSwitchNetwork(conn);
- bridge = nw.getBridge(conn);
-
- String result =
- callHostPlugin(conn, "ovsgre", "ovs_create_gre", "bridge", bridge, "remoteIP", cmd.getRemoteIp(), "greKey", cmd.getKey(), "from",
- Long.toString(cmd.getFrom()), "to", Long.toString(cmd.getTo()));
- String[] res = result.split(":");
- if (res.length != 2 || (res.length == 2 && res[1].equalsIgnoreCase("[]"))) {
- return new OvsCreateGreTunnelAnswer(cmd, false, result, _host.ip, bridge);
- } else {
- return new OvsCreateGreTunnelAnswer(cmd, true, result, _host.ip, bridge, Integer.parseInt(res[1]));
- }
- } catch (BadServerResponse e) {
- s_logger.error("An error occurred while creating a GRE tunnel to " + cmd.getRemoteIp() + " on host " + _host.ip, e);
- } catch (XenAPIException e) {
- s_logger.error("An error occurred while creating a GRE tunnel to " + cmd.getRemoteIp() + " on host " + _host.ip, e);
- } catch (XmlRpcException e) {
- s_logger.error("An error occurred while creating a GRE tunnel to " + cmd.getRemoteIp() + " on host " + _host.ip, e);
- }
-
- return new OvsCreateGreTunnelAnswer(cmd, false, "EXCEPTION", _host.ip, bridge);
- }
-
- private Answer execute(SecurityGroupRulesCmd cmd) {
- Connection conn = getConnection();
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Sending network rules command to " + _host.ip);
- }
-
- if (!_canBridgeFirewall) {
- s_logger.warn("Host " + _host.ip + " cannot do bridge firewalling");
- return new SecurityGroupRuleAnswer(cmd, false, "Host " + _host.ip + " cannot do bridge firewalling",
- SecurityGroupRuleAnswer.FailureReason.CANNOT_BRIDGE_FIREWALL);
- }
-
- String result =
- callHostPlugin(conn, "vmops", "network_rules", "vmName", cmd.getVmName(), "vmIP", cmd.getGuestIp(), "vmMAC", cmd.getGuestMac(), "vmID",
- Long.toString(cmd.getVmId()), "signature", cmd.getSignature(), "seqno", Long.toString(cmd.getSeqNum()), "deflated", "true", "rules",
- cmd.compressStringifiedRules(), "secIps", cmd.getSecIpsString());
-
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- s_logger.warn("Failed to program network rules for vm " + cmd.getVmName());
- return new SecurityGroupRuleAnswer(cmd, false, "programming network rules failed");
- } else {
- s_logger.info("Programmed network rules for vm " + cmd.getVmName() + " guestIp=" + cmd.getGuestIp() + ", ingress numrules=" + cmd.getIngressRuleSet().length +
- ", egress numrules=" + cmd.getEgressRuleSet().length);
- return new SecurityGroupRuleAnswer(cmd);
- }
- }
-
- protected Answer execute(DeleteStoragePoolCommand cmd) {
- Connection conn = getConnection();
- StorageFilerTO poolTO = cmd.getPool();
- try {
- SR sr = getStorageRepository(conn, poolTO.getUuid());
- removeSR(conn, sr);
- Answer answer = new Answer(cmd, true, "success");
- return answer;
- } catch (Exception e) {
- String msg = "DeleteStoragePoolCommand XenAPIException:" + e.getMessage() + " host:" + _host.uuid + " pool: " + poolTO.getHost() + poolTO.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
-
- }
-
- public Connection getConnection() {
- return ConnPool.connect(_host.uuid, _host.pool, _host.ip, _username, _password, _wait);
- }
-
-
- protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
- final StringBuilder caps = new StringBuilder();
- try {
-
- Host host = Host.getByUuid(conn, _host.uuid);
- Host.Record hr = host.getRecord(conn);
-
- Map<String, String> details = cmd.getHostDetails();
- if (details == null) {
- details = new HashMap<String, String>();
- }
-
- String productBrand = hr.softwareVersion.get("product_brand");
- if (productBrand == null) {
- productBrand = hr.softwareVersion.get("platform_name");
- }
- details.put("product_brand", productBrand);
- details.put("product_version", _host.productVersion);
- if (hr.softwareVersion.get("product_version_text_short") != null) {
- details.put("product_version_text_short", hr.softwareVersion.get("product_version_text_short"));
- cmd.setHypervisorVersion(hr.softwareVersion.get("product_version_text_short"));
-
- cmd.setHypervisorVersion(_host.productVersion);
- }
- if (_privateNetworkName != null) {
- details.put("private.network.device", _privateNetworkName);
- }
-
- cmd.setHostDetails(details);
- cmd.setName(hr.nameLabel);
- cmd.setGuid(_host.uuid);
- cmd.setPool(_host.pool);
- cmd.setDataCenter(Long.toString(_dcId));
- for (final String cap : hr.capabilities) {
- if (cap.length() > 0) {
- caps.append(cap).append(" , ");
- }
- }
- if (caps.length() > 0) {
- caps.delete(caps.length() - 3, caps.length());
- }
- cmd.setCaps(caps.toString());
-
- cmd.setSpeed(_host.speed);
- cmd.setCpuSockets(_host.cpuSockets);
- cmd.setCpus(_host.cpus);
-
- HostMetrics hm = host.getMetrics(conn);
-
- long ram = 0;
- long dom0Ram = 0;
- ram = hm.getMemoryTotal(conn);
- Set<VM> vms = host.getResidentVMs(conn);
- for (VM vm : vms) {
- if (vm.getIsControlDomain(conn)) {
- dom0Ram = vm.getMemoryStaticMax(conn);
- break;
- }
- }
-
- ram = (long)((ram - dom0Ram - _xsMemoryUsed) * _xsVirtualizationFactor);
- cmd.setMemory(ram);
- cmd.setDom0MinMemory(dom0Ram);
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Total Ram: " + ram + " dom0 Ram: " + dom0Ram);
- }
-
- PIF pif = PIF.getByUuid(conn, _host.privatePif);
- PIF.Record pifr = pif.getRecord(conn);
- if (pifr.IP != null && pifr.IP.length() > 0) {
- cmd.setPrivateIpAddress(pifr.IP);
- cmd.setPrivateMacAddress(pifr.MAC);
- cmd.setPrivateNetmask(pifr.netmask);
- } else {
- cmd.setPrivateIpAddress(_host.ip);
- cmd.setPrivateMacAddress(pifr.MAC);
- cmd.setPrivateNetmask("255.255.255.0");
- }
-
- pif = PIF.getByUuid(conn, _host.publicPif);
- pifr = pif.getRecord(conn);
- if (pifr.IP != null && pifr.IP.length() > 0) {
- cmd.setPublicIpAddress(pifr.IP);
- cmd.setPublicMacAddress(pifr.MAC);
- cmd.setPublicNetmask(pifr.netmask);
- }
-
- if (_host.storagePif1 != null) {
- pif = PIF.getByUuid(conn, _host.storagePif1);
- pifr = pif.getRecord(conn);
- if (pifr.IP != null && pifr.IP.length() > 0) {
- cmd.setStorageIpAddress(pifr.IP);
- cmd.setStorageMacAddress(pifr.MAC);
- cmd.setStorageNetmask(pifr.netmask);
- }
- }
-
- if (_host.storagePif2 != null) {
- pif = PIF.getByUuid(conn, _host.storagePif2);
- pifr = pif.getRecord(conn);
- if (pifr.IP != null && pifr.IP.length() > 0) {
- cmd.setStorageIpAddressDeux(pifr.IP);
- cmd.setStorageMacAddressDeux(pifr.MAC);
- cmd.setStorageNetmaskDeux(pifr.netmask);
- }
- }
-
- Map<String, String> configs = hr.otherConfig;
- cmd.setIqn(configs.get("iscsi_iqn"));
-
- cmd.setPod(_pod);
- cmd.setVersion(CitrixResourceBase.class.getPackage().getImplementationVersion());
-
- } catch (final XmlRpcException e) {
- throw new CloudRuntimeException("XML RPC Exception" + e.getMessage(), e);
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("XenAPIException" + e.toString(), e);
- }
- }
-
- public CitrixResourceBase() {
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- _name = name;
-
- try {
- _dcId = Long.parseLong((String)params.get("zone"));
- } catch (NumberFormatException e) {
- throw new ConfigurationException("Unable to get the zone " + params.get("zone"));
- }
-
- _host.uuid = (String)params.get("guid");
-
- _name = _host.uuid;
- _host.ip = (String)params.get("ipaddress");
-
- _username = (String)params.get("username");
- _password.add((String)params.get("password"));
- _pod = (String)params.get("pod");
- _cluster = (String)params.get("cluster");
- _privateNetworkName = (String)params.get("private.network.device");
- _publicNetworkName = (String)params.get("public.network.device");
- _guestNetworkName = (String)params.get("guest.network.device");
- _instance = (String)params.get("instance.name");
- _securityGroupEnabled = Boolean.parseBoolean((String)params.get("securitygroupenabled"));
-
- _linkLocalPrivateNetworkName = (String)params.get("private.linkLocal.device");
- if (_linkLocalPrivateNetworkName == null) {
- _linkLocalPrivateNetworkName = "cloud_link_local_network";
- }
-
- _storageNetworkName1 = (String)params.get("storage.network.device1");
- _storageNetworkName2 = (String)params.get("storage.network.device2");
-
- _heartbeatInterval = NumbersUtil.parseInt((String)params.get("xen.heartbeat.interval"), 60);
-
- String value = (String)params.get("wait");
- _wait = NumbersUtil.parseInt(value, 600);
-
- value = (String)params.get("migratewait");
- _migratewait = NumbersUtil.parseInt(value, 3600);
-
- _maxNics = NumbersUtil.parseInt((String)params.get("xen.nics.max"), 7);
-
- if (_pod == null) {
- throw new ConfigurationException("Unable to get the pod");
- }
-
- if (_host.ip == null) {
- throw new ConfigurationException("Unable to get the host address");
- }
-
- if (_username == null) {
- throw new ConfigurationException("Unable to get the username");
- }
-
- if (_password == null) {
- throw new ConfigurationException("Unable to get the password");
- }
-
- if (_host.uuid == null) {
- throw new ConfigurationException("Unable to get the uuid");
- }
-
- CheckXenHostInfo();
-
- storageHandler = getStorageHandler();
-
- _vrResource = new VirtualRoutingResource(this);
- if (!_vrResource.configure(name, params)) {
- throw new ConfigurationException("Unable to configure VirtualRoutingResource");
- }
- return true;
- }
-
- protected StorageSubsystemCommandHandler getStorageHandler() {
- XenServerStorageProcessor processor = new XenServerStorageProcessor(this);
- return new StorageSubsystemCommandHandlerBase(processor);
- }
-
- private void CheckXenHostInfo() throws ConfigurationException {
- Connection conn = ConnPool.getConnect(_host.ip, _username, _password);
- if( conn == null ) {
- throw new ConfigurationException("Can not create connection to " + _host.ip);
- }
- try {
- Host.Record hostRec = null;
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- hostRec = host.getRecord(conn);
- Pool.Record poolRec = Pool.getAllRecords(conn).values().iterator().next();
- _host.pool = poolRec.uuid;
-
- } catch (Exception e) {
- throw new ConfigurationException("Can not get host information from " + _host.ip);
- }
- if (!hostRec.address.equals(_host.ip)) {
- String msg = "Host " + _host.ip + " seems be reinstalled, please remove this host and readd";
- s_logger.error(msg);
- throw new ConfigurationException(msg);
- }
- } finally {
- try {
- Session.logout(conn);
- } catch (Exception e) {
- }
- }
- }
-
-
- public CreateAnswer execute(CreateCommand cmd) {
- Connection conn = getConnection();
- StorageFilerTO pool = cmd.getPool();
- DiskProfile dskch = cmd.getDiskCharacteristics();
- VDI vdi = null;
- try {
- SR poolSr = getStorageRepository(conn, pool.getUuid());
- if (cmd.getTemplateUrl() != null) {
- VDI tmpltvdi = null;
-
- tmpltvdi = getVDIbyUuid(conn, cmd.getTemplateUrl());
- vdi = tmpltvdi.createClone(conn, new HashMap<String, String>());
- vdi.setNameLabel(conn, dskch.getName());
- } else {
- VDI.Record vdir = new VDI.Record();
- vdir.nameLabel = dskch.getName();
- vdir.SR = poolSr;
- vdir.type = Types.VdiType.USER;
-
- vdir.virtualSize = dskch.getSize();
- vdi = VDI.create(conn, vdir);
- }
-
- VDI.Record vdir;
- vdir = vdi.getRecord(conn);
- s_logger.debug("Succesfully created VDI for " + cmd + ". Uuid = " + vdir.uuid);
-
- VolumeTO vol =
- new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), vdir.nameLabel, pool.getPath(), vdir.uuid, vdir.virtualSize, null);
- return new CreateAnswer(cmd, vol);
- } catch (Exception e) {
- s_logger.warn("Unable to create volume; Pool=" + pool + "; Disk: " + dskch, e);
- return new CreateAnswer(cmd, e);
- }
- }
-
- public Answer execute(ResizeVolumeCommand cmd) {
- Connection conn = getConnection();
- String volid = cmd.getPath();
- long newSize = cmd.getNewSize();
-
- try {
- VDI vdi = getVDIbyUuid(conn, volid);
- vdi.resize(conn, newSize);
- return new ResizeVolumeAnswer(cmd, true, "success", newSize);
- } catch (Exception e) {
- s_logger.warn("Unable to resize volume", e);
- String error = "failed to resize volume:" + e;
- return new ResizeVolumeAnswer(cmd, false, error);
- }
- }
-
- protected SR getISOSRbyVmName(Connection conn, String vmName) {
- try {
- Set<SR> srs = SR.getByNameLabel(conn, vmName + "-ISO");
- if (srs.size() == 0) {
- return null;
- } else if (srs.size() == 1) {
- return srs.iterator().next();
- } else {
- String msg = "getIsoSRbyVmName failed due to there are more than 1 SR having same Label";
- s_logger.warn(msg);
- }
- } catch (XenAPIException e) {
- String msg = "getIsoSRbyVmName failed due to " + e.toString();
- s_logger.warn(msg, e);
- } catch (Exception e) {
- String msg = "getIsoSRbyVmName failed due to " + e.getMessage();
- s_logger.warn(msg, e);
- }
- return null;
- }
-
- protected SR createNfsSRbyURI(Connection conn, URI uri, boolean shared) {
- try {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Creating a " + (shared ? "shared SR for " : "not shared SR for ") + uri);
- }
-
- Map<String, String> deviceConfig = new HashMap<String, String>();
- String path = uri.getPath();
- path = path.replace("//", "/");
- deviceConfig.put("server", uri.getHost());
- deviceConfig.put("serverpath", path);
- String name = UUID.nameUUIDFromBytes(new String(uri.getHost() + path).getBytes()).toString();
- if (!shared) {
- Set<SR> srs = SR.getByNameLabel(conn, name);
- for (SR sr : srs) {
- SR.Record record = sr.getRecord(conn);
- if (SRType.NFS.equals(record.type) && record.contentType.equals("user") && !record.shared) {
- removeSRSync(conn, sr);
- }
- }
- }
-
- Host host = Host.getByUuid(conn, _host.uuid);
- Map<String, String> smConfig = new HashMap<String, String>();
- smConfig.put("nosubdir", "true");
- SR sr = SR.create(conn, host, deviceConfig, new Long(0), name, uri.getHost() + uri.getPath(), SRType.NFS.toString(), "user", shared, smConfig);
-
- if (!checkSR(conn, sr)) {
- throw new Exception("no attached PBD");
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(logX(sr, "Created a SR; UUID is " + sr.getUuid(conn) + " device config is " + deviceConfig));
- }
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- String msg = "Can not create second storage SR mountpoint: " + uri.getHost() + uri.getPath() + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- } catch (Exception e) {
- String msg = "Can not create second storage SR mountpoint: " + uri.getHost() + uri.getPath() + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
-
- protected SR createIsoSRbyURI(Connection conn, URI uri, String vmName, boolean shared) {
- try {
- Map<String, String> deviceConfig = new HashMap<String, String>();
- String path = uri.getPath();
- path = path.replace("//", "/");
- deviceConfig.put("location", uri.getHost() + ":" + path);
- Host host = Host.getByUuid(conn, _host.uuid);
- SR sr = SR.create(conn, host, deviceConfig, new Long(0), uri.getHost() + path, "iso", "iso", "iso", shared, new HashMap<String, String>());
- sr.setNameLabel(conn, vmName + "-ISO");
- sr.setNameDescription(conn, deviceConfig.get("location"));
-
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- String msg = "createIsoSRbyURI failed! mountpoint: " + uri.getHost() + uri.getPath() + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- } catch (Exception e) {
- String msg = "createIsoSRbyURI failed! mountpoint: " + uri.getHost() + uri.getPath() + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
-
- protected VDI getVDIbyLocationandSR(Connection conn, String loc, SR sr) {
- try {
- Set<VDI> vdis = sr.getVDIs(conn);
- for (VDI vdi : vdis) {
- if (vdi.getLocation(conn).startsWith(loc)) {
- return vdi;
- }
- }
-
- String msg = "can not getVDIbyLocationandSR " + loc;
- s_logger.warn(msg);
- return null;
- } catch (XenAPIException e) {
- String msg = "getVDIbyLocationandSR exception " + loc + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- } catch (Exception e) {
- String msg = "getVDIbyLocationandSR exception " + loc + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
-
- }
-
- protected VDI getVDIbyUuid(Connection conn, String uuid) {
- return getVDIbyUuid(conn, uuid, true);
- }
-
- protected VDI getVDIbyUuid(Connection conn, String uuid, boolean throwExceptionIfNotFound) {
- try {
- return VDI.getByUuid(conn, uuid);
- } catch (Exception e) {
- if (throwExceptionIfNotFound) {
- String msg = "Catch Exception " + e.getClass().getName() + " :VDI getByUuid for uuid: " + uuid + " failed due to " + e.toString();
-
- s_logger.debug(msg);
-
- throw new CloudRuntimeException(msg, e);
- }
-
- return null;
- }
- }
-
- protected SR getIscsiSR(Connection conn, String srNameLabel, String target, String path, String chapInitiatorUsername, String chapInitiatorPassword,
- boolean ignoreIntroduceException) {
- synchronized (srNameLabel.intern()) {
- Map<String, String> deviceConfig = new HashMap<String, String>();
- try {
- if (path.endsWith("/")) {
- path = path.substring(0, path.length() - 1);
- }
-
- String tmp[] = path.split("/");
- if (tmp.length != 3) {
- String msg = "Wrong iscsi path " + path + " it should be /targetIQN/LUN";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- String targetiqn = tmp[1].trim();
- String lunid = tmp[2].trim();
- String scsiid = "";
-
- Set<SR> srs = SR.getByNameLabel(conn, srNameLabel);
- for (SR sr : srs) {
- if (!SRType.LVMOISCSI.equals(sr.getType(conn))) {
- continue;
- }
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds.isEmpty()) {
- continue;
- }
- PBD pbd = pbds.iterator().next();
- Map<String, String> dc = pbd.getDeviceConfig(conn);
- if (dc == null) {
- continue;
- }
- if (dc.get("target") == null) {
- continue;
- }
- if (dc.get("targetIQN") == null) {
- continue;
- }
- if (dc.get("lunid") == null) {
- continue;
- }
- if (target.equals(dc.get("target")) && targetiqn.equals(dc.get("targetIQN")) && lunid.equals(dc.get("lunid"))) {
- throw new CloudRuntimeException("There is a SR using the same configuration target:" + dc.get("target") + ", targetIQN:" + dc.get("targetIQN") +
- ", lunid:" + dc.get("lunid") + " for pool " + srNameLabel + "on host:" + _host.uuid);
- }
- }
- deviceConfig.put("target", target);
- deviceConfig.put("targetIQN", targetiqn);
-
- if (StringUtils.isNotBlank(chapInitiatorUsername) && StringUtils.isNotBlank(chapInitiatorPassword)) {
- deviceConfig.put("chapuser", chapInitiatorUsername);
- deviceConfig.put("chappassword", chapInitiatorPassword);
- }
-
- Host host = Host.getByUuid(conn, _host.uuid);
- Map<String, String> smConfig = new HashMap<String, String>();
- String type = SRType.LVMOISCSI.toString();
- SR sr = null;
- try {
- sr = SR.create(conn, host, deviceConfig, new Long(0), srNameLabel, srNameLabel, type, "user", true, smConfig);
- } catch (XenAPIException e) {
- String errmsg = e.toString();
- if (errmsg.contains("SR_BACKEND_FAILURE_107")) {
- String lun[] = errmsg.split("<LUN>");
- boolean found = false;
- for (int i = 1; i < lun.length; i++) {
- int blunindex = lun[i].indexOf("<LUNid>") + 7;
- int elunindex = lun[i].indexOf("</LUNid>");
- String ilun = lun[i].substring(blunindex, elunindex);
- ilun = ilun.trim();
- if (ilun.equals(lunid)) {
- int bscsiindex = lun[i].indexOf("<SCSIid>") + 8;
- int escsiindex = lun[i].indexOf("</SCSIid>");
- scsiid = lun[i].substring(bscsiindex, escsiindex);
- scsiid = scsiid.trim();
- found = true;
- break;
- }
- }
- if (!found) {
- String msg = "can not find LUN " + lunid + " in " + errmsg;
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- } else {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
- deviceConfig.put("SCSIid", scsiid);
-
- String result = SR.probe(conn, host, deviceConfig, type, smConfig);
- String pooluuid = null;
- if (result.indexOf("<UUID>") != -1) {
- pooluuid = result.substring(result.indexOf("<UUID>") + 6, result.indexOf("</UUID>")).trim();
- }
-
- if (pooluuid == null || pooluuid.length() != 36) {
- sr = SR.create(conn, host, deviceConfig, new Long(0), srNameLabel, srNameLabel, type, "user", true, smConfig);
- } else {
- try {
- sr = SR.introduce(conn, pooluuid, srNameLabel, srNameLabel, type, "user", true, smConfig);
- } catch (XenAPIException ex) {
- if (ignoreIntroduceException) {
- return sr;
- }
-
- throw ex;
- }
-
- Set<Host> setHosts = Host.getAll(conn);
-
- for (Host currentHost : setHosts) {
- PBD.Record rec = new PBD.Record();
-
- rec.deviceConfig = deviceConfig;
- rec.host = currentHost;
- rec.SR = sr;
-
- PBD pbd = PBD.create(conn, rec);
-
- pbd.plug(conn);
- }
- }
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- } catch (Exception e) {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
- }
-
- protected SR getNfsSR(Connection conn, StorageFilerTO pool) {
- Map<String, String> deviceConfig = new HashMap<String, String>();
- try {
- String server = pool.getHost();
- String serverpath = pool.getPath();
- serverpath = serverpath.replace("//", "/");
- Set<SR> srs = SR.getAll(conn);
- for (SR sr : srs) {
- if (!SRType.NFS.equals(sr.getType(conn))) {
- continue;
- }
-
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds.isEmpty()) {
- continue;
- }
-
- PBD pbd = pbds.iterator().next();
-
- Map<String, String> dc = pbd.getDeviceConfig(conn);
-
- if (dc == null) {
- continue;
- }
-
- if (dc.get("server") == null) {
- continue;
- }
-
- if (dc.get("serverpath") == null) {
- continue;
- }
-
- if (server.equals(dc.get("server")) && serverpath.equals(dc.get("serverpath"))) {
- throw new CloudRuntimeException("There is a SR using the same configuration server:" + dc.get("server") + ", serverpath:" + dc.get("serverpath") +
- " for pool " + pool.getUuid() + "on host:" + _host.uuid);
- }
-
- }
- deviceConfig.put("server", server);
- deviceConfig.put("serverpath", serverpath);
- Host host = Host.getByUuid(conn, _host.uuid);
- Map<String, String> smConfig = new HashMap<String, String>();
- smConfig.put("nosubdir", "true");
- SR sr = SR.create(conn, host, deviceConfig, new Long(0), pool.getUuid(), Long.toString(pool.getId()), SRType.NFS.toString(), "user", true, smConfig);
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
- } catch (XmlRpcException e) {
- throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
- }
- }
-
- public Answer execute(DestroyCommand cmd) {
- Connection conn = getConnection();
- VolumeTO vol = cmd.getVolume();
- // Look up the VDI
- String volumeUUID = vol.getPath();
- VDI vdi = null;
- try {
- vdi = getVDIbyUuid(conn, volumeUUID);
- } catch (Exception e) {
- return new Answer(cmd, true, "Success");
- }
- Set<VBD> vbds = null;
- try {
- vbds = vdi.getVBDs(conn);
- } catch (Exception e) {
- String msg = "VDI getVBDS for " + volumeUUID + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
- for (VBD vbd : vbds) {
- try {
- vbd.unplug(conn);
- vbd.destroy(conn);
- } catch (Exception e) {
- String msg = "VM destroy for " + volumeUUID + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
- }
- try {
- Set<VDI> snapshots = vdi.getSnapshots(conn);
- for (VDI snapshot : snapshots) {
- snapshot.destroy(conn);
- }
- vdi.destroy(conn);
- } catch (Exception e) {
- String msg = "VDI destroy for " + volumeUUID + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
-
- return new Answer(cmd, true, "Success");
- }
-
- protected VDI createVdi(SR sr, String vdiNameLabel, Long volumeSize) throws Types.XenAPIException, XmlRpcException {
- VDI vdi = null;
-
- Connection conn = getConnection();
-
- VDI.Record vdir = new VDI.Record();
-
- vdir.nameLabel = vdiNameLabel;
- vdir.SR = sr;
- vdir.type = Types.VdiType.USER;
-
- long totalSrSpace = sr.getPhysicalSize(conn);
- long unavailableSrSpace = sr.getPhysicalUtilisation(conn);
- long availableSrSpace = totalSrSpace - unavailableSrSpace;
-
- if (availableSrSpace < volumeSize) {
- throw new CloudRuntimeException("Available space for SR cannot be less than " + volumeSize + ".");
- }
-
- vdir.virtualSize = volumeSize;
-
- long maxNumberOfTries = (totalSrSpace / unavailableSrSpace >= 1) ? (totalSrSpace / unavailableSrSpace) : 1;
- long tryNumber = 0;
-
- while (tryNumber <= maxNumberOfTries) {
- try {
- vdi = VDI.create(conn, vdir);
-
- break;
- } catch (Exception ex) {
- tryNumber++;
-
- vdir.virtualSize -= unavailableSrSpace;
- }
- }
-
- return vdi;
- }
-
- protected void handleSrAndVdiDetach(String iqn, Connection conn) throws Exception {
- SR sr = getStorageRepository(conn, iqn);
-
- removeSR(conn, sr);
- }
-
- protected AttachVolumeAnswer execute(final AttachVolumeCommand cmd) {
- Connection conn = getConnection();
- boolean attach = cmd.getAttach();
- String vmName = cmd.getVmName();
- String vdiNameLabel = vmName + "-DATA";
- Long deviceId = cmd.getDeviceId();
-
- String errorMsg;
- if (attach) {
- errorMsg = "Failed to attach volume";
- } else {
- errorMsg = "Failed to detach volume";
- }
-
- try {
- VDI vdi = null;
-
- if (cmd.getAttach() && cmd.isManaged()) {
- SR sr =
- getIscsiSR(conn, cmd.get_iScsiName(), cmd.getStorageHost(), cmd.get_iScsiName(), cmd.getChapInitiatorUsername(), cmd.getChapInitiatorPassword(), true);
-
- vdi = getVDIbyUuid(conn, cmd.getVolumePath(), false);
-
- if (vdi == null) {
- vdi = createVdi(sr, vdiNameLabel, cmd.getVolumeSize());
- }
- } else {
- vdi = getVDIbyUuid(conn, cmd.getVolumePath());
- }
-
- // Look up the VM
- VM vm = getVM(conn, vmName);
- /* For HVM guest, if no pv driver installed, no attach/detach */
- boolean isHVM;
- if (vm.getPVBootloader(conn).equalsIgnoreCase("")) {
- isHVM = true;
- } else {
- isHVM = false;
- }
- VMGuestMetrics vgm = vm.getGuestMetrics(conn);
- boolean pvDrvInstalled = false;
- if (!isRefNull(vgm) && vgm.getPVDriversUpToDate(conn)) {
- pvDrvInstalled = true;
- }
- if (isHVM && !pvDrvInstalled) {
- s_logger.warn(errorMsg + ": You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected");
- return new AttachVolumeAnswer(cmd,
- "You attempted an operation that requires PV drivers to be installed on the VM. Please install them by inserting xen-pv-drv.iso.");
- }
- if (attach) {
- // Figure out the disk number to attach the VM to
- String diskNumber = null;
- if (deviceId != null) {
- if (deviceId.longValue() == 3) {
- String msg = "Device 3 is reserved for CD-ROM, choose other device";
- return new AttachVolumeAnswer(cmd, msg);
- }
- if (isDeviceUsed(conn, vm, deviceId)) {
- String msg = "Device " + deviceId + " is used in VM " + vmName;
- return new AttachVolumeAnswer(cmd, msg);
- }
- diskNumber = deviceId.toString();
- } else {
- diskNumber = getUnusedDeviceNum(conn, vm);
- }
- // Create a new VBD
- VBD.Record vbdr = new VBD.Record();
- vbdr.VM = vm;
- vbdr.VDI = vdi;
- vbdr.bootable = false;
- vbdr.userdevice = diskNumber;
- vbdr.mode = Types.VbdMode.RW;
- vbdr.type = Types.VbdType.DISK;
- vbdr.unpluggable = true;
- VBD vbd = VBD.create(conn, vbdr);
-
- // Attach the VBD to the VM
- vbd.plug(conn);
-
- // Update the VDI's label to include the VM name
- vdi.setNameLabel(conn, vdiNameLabel);
-
- return new AttachVolumeAnswer(cmd, Long.parseLong(diskNumber), vdi.getUuid(conn));
- } else {
- // Look up all VBDs for this VDI
- Set<VBD> vbds = vdi.getVBDs(conn);
-
- // Detach each VBD from its VM, and then destroy it
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
-
- if (vbdr.currentlyAttached) {
- vbd.unplug(conn);
- }
-
- vbd.destroy(conn);
- }
-
- // Update the VDI's label to be "detached"
- vdi.setNameLabel(conn, "detached");
-
- if (cmd.isManaged()) {
- handleSrAndVdiDetach(cmd.get_iScsiName(), conn);
- }
-
- return new AttachVolumeAnswer(cmd);
- }
- } catch (XenAPIException e) {
- String msg = errorMsg + " for uuid: " + cmd.getVolumePath() + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new AttachVolumeAnswer(cmd, msg);
- } catch (Exception e) {
- String msg = errorMsg + " for uuid: " + cmd.getVolumePath() + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new AttachVolumeAnswer(cmd, msg);
- }
-
- }
-
- protected void umount(Connection conn, VDI vdi) {
-
- }
-
- private long getVMSnapshotChainSize(Connection conn, VolumeObjectTO volumeTo, String vmName) throws BadServerResponse, XenAPIException, XmlRpcException {
- Set<VDI> allvolumeVDIs = VDI.getByNameLabel(conn, volumeTo.getName());
- long size = 0;
- for (VDI vdi : allvolumeVDIs) {
- try {
- if (vdi.getIsASnapshot(conn) && vdi.getSmConfig(conn).get("vhd-parent") != null) {
- String parentUuid = vdi.getSmConfig(conn).get("vhd-parent");
- VDI parentVDI = VDI.getByUuid(conn, parentUuid);
- // add size of snapshot vdi node, usually this only contains meta data
- size = size + vdi.getPhysicalUtilisation(conn);
- // add size of snapshot vdi parent, this contains data
- if (parentVDI != null)
- size = size + parentVDI.getPhysicalUtilisation(conn).longValue();
- }
- } catch (Exception e) {
- s_logger.debug("Exception occurs when calculate " + "snapshot capacity for volumes: " + e.getMessage());
- continue;
- }
- }
- if (volumeTo.getVolumeType() == Volume.Type.ROOT) {
- Map<VM, VM.Record> allVMs = VM.getAllRecords(conn);
- // add size of memory snapshot vdi
- if (allVMs.size() > 0) {
- for (VM vmr : allVMs.keySet()) {
- try {
- String vName = vmr.getNameLabel(conn);
- if (vName != null && vName.contains(vmName) && vmr.getIsASnapshot(conn)) {
-
- VDI memoryVDI = vmr.getSuspendVDI(conn);
- size = size + memoryVDI.getParent(conn).getPhysicalUtilisation(conn);
- size = size + memoryVDI.getPhysicalUtilisation(conn);
- }
- } catch (Exception e) {
- s_logger.debug("Exception occurs when calculate " + "snapshot capacity for memory: " + e.getMessage());
- continue;
- }
- }
- }
- }
- return size;
- }
-
- protected Answer execute(final CreateVMSnapshotCommand cmd) {
- String vmName = cmd.getVmName();
- String vmSnapshotName = cmd.getTarget().getSnapshotName();
- List<VolumeObjectTO> listVolumeTo = cmd.getVolumeTOs();
- VirtualMachine.State vmState = cmd.getVmState();
- String guestOSType = cmd.getGuestOSType();
-
- boolean snapshotMemory = cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory;
- long timeout = cmd.getWait();
-
- Connection conn = getConnection();
- VM vm = null;
- VM vmSnapshot = null;
- boolean success = false;
-
- try {
- // check if VM snapshot already exists
- Set<VM> vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName());
- if (vmSnapshots.size() > 0)
- return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs());
-
- // check if there is already a task for this VM snapshot
- Task task = null;
- Set<Task> tasks = Task.getByNameLabel(conn, "Async.VM.snapshot");
- tasks.addAll(Task.getByNameLabel(conn, "Async.VM.checkpoint"));
- for (Task taskItem : tasks) {
- if (taskItem.getOtherConfig(conn).containsKey("CS_VM_SNAPSHOT_KEY")) {
- String vmSnapshotTaskName = taskItem.getOtherConfig(conn).get("CS_VM_SNAPSHOT_KEY");
- if (vmSnapshotTaskName != null && vmSnapshotTaskName.equals(cmd.getTarget().getSnapshotName())) {
- task = taskItem;
- }
- }
- }
-
- // create a new task if there is no existing task for this VM snapshot
- if (task == null) {
- try {
- vm = getVM(conn, vmName);
- } catch (Exception e) {
- if (!snapshotMemory) {
- vm = createWorkingVM(conn, vmName, guestOSType, listVolumeTo);
- }
- }
-
- if (vm == null) {
- return new CreateVMSnapshotAnswer(cmd, false, "Creating VM Snapshot Failed due to can not find vm: " + vmName);
- }
-
- // call Xenserver API
- if (!snapshotMemory) {
- task = vm.snapshotAsync(conn, vmSnapshotName);
- } else {
- Set<VBD> vbds = vm.getVBDs(conn);
- Pool pool = Pool.getByUuid(conn, _host.pool);
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
- if (vbdr.userdevice.equals("0")) {
- VDI vdi = vbdr.VDI;
- SR sr = vdi.getSR(conn);
- // store memory image on the same SR with ROOT volume
- pool.setSuspendImageSR(conn, sr);
- }
- }
- task = vm.checkpointAsync(conn, vmSnapshotName);
- }
- task.addToOtherConfig(conn, "CS_VM_SNAPSHOT_KEY", vmSnapshotName);
- }
-
- waitForTask(conn, task, 1000, timeout * 1000);
- checkForSuccess(conn, task);
- String result = task.getResult(conn);
-
- // extract VM snapshot ref from result
- String ref = result.substring("<value>".length(), result.length() - "</value>".length());
- vmSnapshot = Types.toVM(ref);
- try {
- Thread.sleep(5000);
- } catch (final InterruptedException ex) {
-
- }
- // calculate used capacity for this VM snapshot
- for (VolumeObjectTO volumeTo : cmd.getVolumeTOs()) {
- long size = getVMSnapshotChainSize(conn, volumeTo, cmd.getVmName());
- volumeTo.setSize(size);
- }
-
- success = true;
- return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs());
- } catch (Exception e) {
- String msg = "";
- if (e instanceof Types.BadAsyncResult) {
- String licenseKeyWord = "LICENCE_RESTRICTION";
- Types.BadAsyncResult errorResult = (Types.BadAsyncResult)e;
- if (errorResult.shortDescription != null && errorResult.shortDescription.contains(licenseKeyWord)) {
- msg = licenseKeyWord;
- }
- } else {
- msg = e.getMessage();
- }
- s_logger.error("Creating VM Snapshot " + cmd.getTarget().getSnapshotName() + " failed due to: " + msg);
- return new CreateVMSnapshotAnswer(cmd, false, msg);
- } finally {
- try {
- if (!success) {
- if (vmSnapshot != null) {
- s_logger.debug("Delete exsisting VM Snapshot " + vmSnapshotName + " after making VolumeTO failed");
- Set<VBD> vbds = vmSnapshot.getVBDs(conn);
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
- if (vbdr.type == Types.VbdType.DISK) {
- VDI vdi = vbdr.VDI;
- vdi.destroy(conn);
- }
- }
- vmSnapshot.destroy(conn);
- }
- }
- if (vmState == VirtualMachine.State.Stopped) {
- if (vm != null) {
- vm.destroy(conn);
- }
- }
- } catch (Exception e2) {
- s_logger.error("delete snapshot error due to " + e2.getMessage());
- }
- }
- }
-
- private VM createWorkingVM(Connection conn, String vmName, String guestOSType, List<VolumeObjectTO> listVolumeTo) throws BadServerResponse, Types.VmBadPowerState, Types.SrFull,
- Types.OperationNotAllowed, XenAPIException, XmlRpcException {
- String guestOsTypeName = getGuestOsType(guestOSType, false);
- if (guestOsTypeName == null) {
- String msg =
- " Hypervisor " + this.getClass().getName() + " doesn't support guest OS type " + guestOSType + ". you can choose 'Other install media' to run it as HVM";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- VM template = getVM(conn, guestOsTypeName);
- VM vm = template.createClone(conn, vmName);
- vm.setIsATemplate(conn, false);
- Map<VDI, VolumeObjectTO> vdiMap = new HashMap<VDI, VolumeObjectTO>();
- for (VolumeObjectTO volume : listVolumeTo) {
- String vdiUuid = volume.getPath();
- try {
- VDI vdi = VDI.getByUuid(conn, vdiUuid);
- vdiMap.put(vdi, volume);
- } catch (Types.UuidInvalid e) {
- s_logger.warn("Unable to find vdi by uuid: " + vdiUuid + ", skip it");
- }
- }
- for (VDI vdi : vdiMap.keySet()) {
- VolumeObjectTO volumeTO = vdiMap.get(vdi);
- VBD.Record vbdr = new VBD.Record();
- vbdr.VM = vm;
- vbdr.VDI = vdi;
- if (volumeTO.getVolumeType() == Volume.Type.ROOT) {
- vbdr.bootable = true;
- vbdr.unpluggable = false;
- } else {
- vbdr.bootable = false;
- vbdr.unpluggable = true;
- }
- vbdr.userdevice = Long.toString(volumeTO.getDeviceId());
- vbdr.mode = Types.VbdMode.RW;
- vbdr.type = Types.VbdType.DISK;
- VBD.create(conn, vbdr);
- }
- return vm;
- }
-
- protected Answer execute(final DeleteVMSnapshotCommand cmd) {
- String snapshotName = cmd.getTarget().getSnapshotName();
- Connection conn = getConnection();
-
- try {
- List<VDI> vdiList = new ArrayList<VDI>();
- Set<VM> snapshots = VM.getByNameLabel(conn, snapshotName);
- if (snapshots.size() == 0) {
- s_logger.warn("VM snapshot with name " + snapshotName + " does not exist, assume it is already deleted");
- return new DeleteVMSnapshotAnswer(cmd, cmd.getVolumeTOs());
- }
- VM snapshot = snapshots.iterator().next();
- Set<VBD> vbds = snapshot.getVBDs(conn);
- for (VBD vbd : vbds) {
- if (vbd.getType(conn) == Types.VbdType.DISK) {
- VDI vdi = vbd.getVDI(conn);
- vdiList.add(vdi);
- }
- }
- if (cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory)
- vdiList.add(snapshot.getSuspendVDI(conn));
- snapshot.destroy(conn);
- for (VDI vdi : vdiList) {
- vdi.destroy(conn);
- }
-
- try {
- Thread.sleep(5000);
- } catch (final InterruptedException ex) {
-
- }
- // re-calculate used capacify for this VM snapshot
- for (VolumeObjectTO volumeTo : cmd.getVolumeTOs()) {
- long size = getVMSnapshotChainSize(conn, volumeTo, cmd.getVmName());
- volumeTo.setSize(size);
- }
-
- return new DeleteVMSnapshotAnswer(cmd, cmd.getVolumeTOs());
- } catch (Exception e) {
- s_logger.warn("Catch Exception: " + e.getClass().toString() + " due to " + e.toString(), e);
- return new DeleteVMSnapshotAnswer(cmd, false, e.getMessage());
- }
- }
-
- protected Answer execute(final AttachIsoCommand cmd) {
- Connection conn = getConnection();
- boolean attach = cmd.isAttach();
- String vmName = cmd.getVmName();
- String isoURL = cmd.getIsoPath();
-
- String errorMsg;
- if (attach) {
- errorMsg = "Failed to attach ISO";
- } else {
- errorMsg = "Failed to detach ISO";
- }
- try {
- if (attach) {
- VBD isoVBD = null;
-
- // Find the VM
- VM vm = getVM(conn, vmName);
-
- // Find the ISO VDI
- VDI isoVDI = getIsoVDIByURL(conn, vmName, isoURL);
-
- // Find the VM's CD-ROM VBD
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- String userDevice = vbd.getUserdevice(conn);
- Types.VbdType type = vbd.getType(conn);
-
- if (userDevice.equals("3") && type == Types.VbdType.CD) {
- isoVBD = vbd;
- break;
- }
- }
-
- if (isoVBD == null) {
- throw new CloudRuntimeException("Unable to find CD-ROM VBD for VM: " + vmName);
- } else {
- // If an ISO is already inserted, eject it
- if (isoVBD.getEmpty(conn) == false) {
- isoVBD.eject(conn);
- }
-
- // Insert the new ISO
- isoVBD.insert(conn, isoVDI);
- }
-
- return new Answer(cmd);
- } else {
- // Find the VM
- VM vm = getVM(conn, vmName);
- String vmUUID = vm.getUuid(conn);
-
- // Find the ISO VDI
- VDI isoVDI = getIsoVDIByURL(conn, vmName, isoURL);
-
- SR sr = isoVDI.getSR(conn);
-
- // Look up all VBDs for this VDI
- Set<VBD> vbds = isoVDI.getVBDs(conn);
-
- // Iterate through VBDs, and if the VBD belongs the VM, eject
- // the ISO from it
- for (VBD vbd : vbds) {
- VM vbdVM = vbd.getVM(conn);
- String vbdVmUUID = vbdVM.getUuid(conn);
-
- if (vbdVmUUID.equals(vmUUID)) {
- // If an ISO is already inserted, eject it
- if (!vbd.getEmpty(conn)) {
- vbd.eject(conn);
- }
-
- break;
- }
- }
-
- if (!sr.getNameLabel(conn).startsWith("XenServer Tools")) {
- removeSR(conn, sr);
- }
-
- return new Answer(cmd);
- }
- } catch (XenAPIException e) {
- s_logger.warn(errorMsg + ": " + e.toString(), e);
- return new Answer(cmd, false, e.toString());
- } catch (Exception e) {
- s_logger.warn(errorMsg + ": " + e.toString(), e);
- return new Answer(cmd, false, e.getMessage());
- }
- }
-
- boolean IsISCSI(String type) {
- return SRType.LVMOHBA.equals(type) || SRType.LVMOISCSI.equals(type) || SRType.LVM.equals(type);
- }
-
- protected Answer execute(final UpgradeSnapshotCommand cmd) {
-
- String secondaryStorageUrl = cmd.getSecondaryStorageUrl();
- String backedUpSnapshotUuid = cmd.getSnapshotUuid();
- Long volumeId = cmd.getVolumeId();
- Long accountId = cmd.getAccountId();
- Long templateId = cmd.getTemplateId();
- Long tmpltAcountId = cmd.getTmpltAccountId();
- String version = cmd.getVersion();
-
- if (!version.equals("2.1")) {
- return new Answer(cmd, true, "success");
- }
- try {
- Connection conn = getConnection();
- URI uri = new URI(secondaryStorageUrl);
- String secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
- String snapshotPath = secondaryStorageMountPath + "/snapshots/" + accountId + "/" + volumeId + "/" + backedUpSnapshotUuid + ".vhd";
- String templatePath = secondaryStorageMountPath + "/template/tmpl/" + tmpltAcountId + "/" + templateId;
- upgradeSnapshot(conn, templatePath, snapshotPath);
- return new Answer(cmd, true, "success");
- } catch (Exception e) {
- String details = "upgrading snapshot " + backedUpSnapshotUuid + " failed due to " + e.toString();
- s_logger.error(details, e);
-
- }
- return new Answer(cmd, false, "failure");
- }
-
- private boolean destroySnapshotOnPrimaryStorageExceptThis(Connection conn, String volumeUuid, String avoidSnapshotUuid) {
- try {
- VDI volume = getVDIbyUuid(conn, volumeUuid);
- if (volume == null) {
- throw new InternalErrorException("Could not destroy snapshot on volume " + volumeUuid + " due to can not find it");
- }
- Set<VDI> snapshots = volume.getSnapshots(conn);
- for (VDI snapshot : snapshots) {
- try {
- if (!snapshot.getUuid(conn).equals(avoidSnapshotUuid)) {
- snapshot.destroy(conn);
- }
- } catch (Exception e) {
- String msg = "Destroying snapshot: " + snapshot + " on primary storage failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- s_logger.debug("Successfully destroyed snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid);
- return true;
- } catch (XenAPIException e) {
- String msg = "Destroying snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid + " failed due to " + e.toString();
- s_logger.error(msg, e);
- } catch (Exception e) {
- String msg = "Destroying snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
-
- return false;
- }
-
- protected VM getVM(Connection conn, String vmName) {
- // Look up VMs with the specified name
- Set<VM> vms;
- try {
- vms = VM.getByNameLabel(conn, vmName);
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to get " + vmName + ": " + e.toString(), e);
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to get " + vmName + ": " + e.getMessage(), e);
- }
-
- // If there are no VMs, throw an exception
- if (vms.size() == 0) {
- throw new CloudRuntimeException("VM with name: " + vmName + " does not exist.");
- }
-
- // If there is more than one VM, print a warning
- if (vms.size() > 1) {
- s_logger.warn("Found " + vms.size() + " VMs with name: " + vmName);
- }
-
- // Return the first VM in the set
- return vms.iterator().next();
- }
-
- protected VDI getIsoVDIByURL(Connection conn, String vmName, String isoURL) {
- SR isoSR = null;
- String mountpoint = null;
- if (isoURL.startsWith("xs-tools")) {
- try {
- Set<VDI> vdis = VDI.getByNameLabel(conn, isoURL);
- if (vdis.isEmpty()) {
- throw new CloudRuntimeException("Could not find ISO with URL: " + isoURL);
- }
- return vdis.iterator().next();
-
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to get pv iso: " + isoURL + " due to " + e.toString());
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to get pv iso: " + isoURL + " due to " + e.toString());
- }
- }
-
- int index = isoURL.lastIndexOf("/");
- mountpoint = isoURL.substring(0, index);
-
- URI uri;
- try {
- uri = new URI(mountpoint);
- } catch (URISyntaxException e) {
- throw new CloudRuntimeException("isoURL is wrong: " + isoURL);
- }
- isoSR = getISOSRbyVmName(conn, vmName);
- if (isoSR == null) {
- isoSR = createIsoSRbyURI(conn, uri, vmName, false);
- }
-
- String isoName = isoURL.substring(index + 1);
-
- VDI isoVDI = getVDIbyLocationandSR(conn, isoName, isoSR);
-
- if (isoVDI != null) {
- return isoVDI;
- } else {
- throw new CloudRuntimeException("Could not find ISO with URL: " + isoURL);
- }
- }
-
- protected SR getStorageRepository(Connection conn, String srNameLabel) {
- Set<SR> srs;
- try {
- srs = SR.getByNameLabel(conn, srNameLabel);
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to get SR " + srNameLabel + " due to " + e.toString(), e);
- } catch (Exception e) {
- throw new CloudRuntimeException("Unable to get SR " + srNameLabel + " due to " + e.getMessage(), e);
- }
-
- if (srs.size() > 1) {
- throw new CloudRuntimeException("More than one storage repository was found for pool with uuid: " + srNameLabel);
- } else if (srs.size() == 1) {
- SR sr = srs.iterator().next();
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("SR retrieved for " + srNameLabel);
- }
-
- if (checkSR(conn, sr)) {
- return sr;
- }
- throw new CloudRuntimeException("SR check failed for storage pool: " + srNameLabel + "on host:" + _host.uuid);
- } else {
- throw new CloudRuntimeException("Can not see storage pool: " + srNameLabel + " from on host:" + _host.uuid);
- }
- }
-
- protected Answer execute(final CheckConsoleProxyLoadCommand cmd) {
- return executeProxyLoadScan(cmd, cmd.getProxyVmId(), cmd.getProxyVmName(), cmd.getProxyManagementIp(), cmd.getProxyCmdPort());
- }
-
- protected Answer execute(final WatchConsoleProxyLoadCommand cmd) {
- return executeProxyLoadScan(cmd, cmd.getProxyVmId(), cmd.getProxyVmName(), cmd.getProxyManagementIp(), cmd.getProxyCmdPort());
- }
-
- protected Answer executeProxyLoadScan(final Command cmd, final long proxyVmId, final String proxyVmName, final String proxyManagementIp, final int cmdPort) {
- String result = null;
-
- final StringBuffer sb = new StringBuffer();
- sb.append("http://").append(proxyManagementIp).append(":" + cmdPort).append("/cmd/getstatus");
-
- boolean success = true;
- try {
- final URL url = new URL(sb.toString());
- final URLConnection conn = url.openConnection();
-
- // setting TIMEOUTs to avoid possible waiting until death situations
- conn.setConnectTimeout(5000);
- conn.setReadTimeout(5000);
-
- final InputStream is = conn.getInputStream();
- final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- final StringBuilder sb2 = new StringBuilder();
- String line = null;
- try {
- while ((line = reader.readLine()) != null) {
- sb2.append(line + "\n");
- }
- result = sb2.toString();
- } catch (final IOException e) {
- success = false;
- } finally {
- try {
- is.close();
- } catch (final IOException e) {
- s_logger.warn("Exception when closing , console proxy address : " + proxyManagementIp);
- success = false;
- }
- }
- } catch (final IOException e) {
- s_logger.warn("Unable to open console proxy command port url, console proxy address : " + proxyManagementIp);
- success = false;
- }
-
- return new ConsoleProxyLoadAnswer(cmd, proxyVmId, proxyVmName, success, result);
- }
-
- protected boolean createSecondaryStorageFolder(Connection conn, String remoteMountPath, String newFolder) {
- String result = callHostPlugin(conn, "vmopsSnapshot", "create_secondary_storage_folder", "remoteMountPath", remoteMountPath, "newFolder", newFolder);
- return (result != null);
- }
-
- protected boolean deleteSecondaryStorageFolder(Connection conn, String remoteMountPath, String folder) {
- String details = callHostPlugin(conn, "vmopsSnapshot", "delete_secondary_storage_folder", "remoteMountPath", remoteMountPath, "folder", folder);
- return (details != null && details.equals("1"));
- }
-
- protected boolean postCreatePrivateTemplate(Connection conn, String templatePath, String tmpltFilename, String templateName, String templateDescription,
- String checksum, long size, long virtualSize, long templateId) {
-
- if (templateDescription == null) {
- templateDescription = "";
- }
-
- if (checksum == null) {
- checksum = "";
- }
-
- String result =
- callHostPlugin(conn, "vmopsSnapshot", "post_create_private_template", "templatePath", templatePath, "templateFilename", tmpltFilename, "templateName",
- templateName, "templateDescription", templateDescription, "checksum", checksum, "size", String.valueOf(size), "virtualSize", String.valueOf(virtualSize),
- "templateId", String.valueOf(templateId));
-
- boolean success = false;
- if (result != null && !result.isEmpty()) {
- // Else, command threw an exception which has already been logged.
-
- if (result.equalsIgnoreCase("1")) {
- s_logger.debug("Successfully created template.properties file on secondary storage for " + tmpltFilename);
- success = true;
- } else {
- s_logger.warn("Could not create template.properties file on secondary storage for " + tmpltFilename + " for templateId: " + templateId);
- }
- }
-
- return success;
- }
-
- protected String getVhdParent(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI) {
- String parentUuid =
- callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI",
- isISCSI.toString());
-
- if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
- s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
- // errString is already logged.
- return null;
- }
- return parentUuid;
- }
-
- protected String deleteSnapshotBackup(Connection conn, Long dcId, Long accountId, Long volumeId, String secondaryStorageMountPath, String backupUUID) {
-
- // If anybody modifies the formatting below again, I'll skin them
- String result =
- callHostPlugin(conn, "vmopsSnapshot", "deleteSnapshotBackup", "backupUUID", backupUUID, "dcId", dcId.toString(), "accountId", accountId.toString(),
- "volumeId", volumeId.toString(), "secondaryStorageMountPath", secondaryStorageMountPath);
-
- return result;
- }
-
- @Override
- public boolean start() {
- return true;
- }
-
- @Override
- public boolean stop() {
- disconnected();
- return true;
- }
-
- @Override
- public String getName() {
- return _name;
- }
-
- @Override
- public IAgentControl getAgentControl() {
- return _agentControl;
- }
-
- @Override
- public void setAgentControl(IAgentControl agentControl) {
- _agentControl = agentControl;
- }
-
- private Answer execute(CleanupNetworkRulesCmd cmd) {
- if (!_canBridgeFirewall) {
- return new Answer(cmd, true, null);
- }
- Connection conn = getConnection();
- String result = callHostPlugin(conn, "vmops", "cleanup_rules", "instance", _instance);
- int numCleaned = Integer.parseInt(result);
- if (result == null || result.isEmpty() || (numCleaned < 0)) {
- s_logger.warn("Failed to cleanup rules for host " + _host.ip);
- return new Answer(cmd, false, result);
- }
- if (numCleaned > 0) {
- s_logger.info("Cleaned up rules for " + result + " vms on host " + _host.ip);
- }
- return new Answer(cmd, true, result);
- }
-
- /**
- * XsNic represents a network and the host's specific PIF.
- */
- protected class XsLocalNetwork {
- private final Network _n;
- private Network.Record _nr;
- private PIF _p;
- private PIF.Record _pr;
-
- public XsLocalNetwork(Network n) {
- this(n, null, null, null);
- }
-
- public XsLocalNetwork(Network n, Network.Record nr, PIF p, PIF.Record pr) {
- _n = n;
- _nr = nr;
- _p = p;
- _pr = pr;
- }
-
- public Network getNetwork() {
- return _n;
- }
-
- public Network.Record getNetworkRecord(Connection conn) throws XenAPIException, XmlRpcException {
- if (_nr == null) {
- _nr = _n.getRecord(conn);
- }
-
- return _nr;
- }
-
- public PIF getPif(Connection conn) throws XenAPIException, XmlRpcException {
- if (_p == null) {
- Network.Record nr = getNetworkRecord(conn);
- for (PIF pif : nr.PIFs) {
- PIF.Record pr = pif.getRecord(conn);
- if (_host.uuid.equals(pr.host.getUuid(conn))) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Found a network called " + nr.nameLabel + " on host=" + _host.ip + "; Network=" + nr.uuid + "; pif=" + pr.uuid);
- }
- _p = pif;
- _pr = pr;
- break;
- }
- }
- }
- return _p;
- }
-
- public PIF.Record getPifRecord(Connection conn) throws XenAPIException, XmlRpcException {
- if (_pr == null) {
- PIF p = getPif(conn);
- if (_pr == null) {
- _pr = p.getRecord(conn);
- }
- }
- return _pr;
- }
- }
-
- // A list of UUIDs that are gathered from the XenServer when
- // the resource first connects to XenServer. These UUIDs do
- // not change over time.
- protected class XsHost {
- public String systemvmisouuid;
- public String uuid;
- public String ip;
- public String publicNetwork;
- public String privateNetwork;
- public String linkLocalNetwork;
- public Network vswitchNetwork;
- public String storageNetwork1;
- public String storageNetwork2;
- public String guestNetwork;
- public String guestPif;
- public String publicPif;
- public String privatePif;
- public String storagePif1;
- public String storagePif2;
- public String pool;
- public int speed;
- public Integer cpuSockets;
- public int cpus;
- public String productVersion;
- public String localSRuuid;
-
- @Override
- public String toString() {
- return new StringBuilder("XS[").append(uuid).append("-").append(ip).append("]").toString();
- }
- }
-
- /*Override by subclass*/
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return stdType;
- }
-
- private Answer execute(NetworkRulesSystemVmCommand cmd) {
- boolean success = true;
- Connection conn = getConnection();
- if (cmd.getType() != VirtualMachine.Type.User) {
- String result = callHostPlugin(conn, "vmops", "default_network_rules_systemvm", "vmName", cmd.getVmName());
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- success = false;
- }
- }
-
- return new Answer(cmd, success, "");
- }
-
- private Answer execute(NetworkRulesVmSecondaryIpCommand cmd) {
- boolean success = true;
- Connection conn = getConnection();
-
- String result =
- callHostPlugin(conn, "vmops", "network_rules_vmSecondaryIp", "vmName", cmd.getVmName(), "vmMac", cmd.getVmMac(), "vmSecIp", cmd.getVmSecIp(), "action",
- cmd.getAction());
- if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
- success = false;
- }
-
- return new Answer(cmd, success, "");
- }
-
- protected Answer execute(final ClusterSyncCommand cmd) {
- Connection conn = getConnection();
- //check if this is master
- Pool pool;
- try {
- pool = Pool.getByUuid(conn, _host.pool);
- Pool.Record poolr = pool.getRecord(conn);
-
- Host.Record hostr = poolr.master.getRecord(conn);
- if (!_host.uuid.equals(hostr.uuid)) {
- return new Answer(cmd);
- }
- } catch (Throwable e) {
- s_logger.warn("Check for master failed, failing the Cluster sync command");
- return new Answer(cmd);
- }
- HashMap<String, Pair<String, State>> newStates = deltaClusterSync(conn);
- return new ClusterSyncAnswer(cmd.getClusterId(), newStates);
- }
-
-
- protected ClusterVMMetaDataSyncAnswer execute(final ClusterVMMetaDataSyncCommand cmd) {
- Connection conn = getConnection();
- //check if this is master
- Pool pool;
- try {
- pool = Pool.getByUuid(conn, _host.pool);
- Pool.Record poolr = pool.getRecord(conn);
- Host.Record hostr = poolr.master.getRecord(conn);
- if (!_host.uuid.equals(hostr.uuid)) {
- return new ClusterVMMetaDataSyncAnswer(cmd.getClusterId(), null);
- }
- } catch (Throwable e) {
- s_logger.warn("Check for master failed, failing the Cluster sync VMMetaData command");
- return new ClusterVMMetaDataSyncAnswer(cmd.getClusterId(), null);
- }
- HashMap<String, String> vmMetadatum = clusterVMMetaDataSync(conn);
- return new ClusterVMMetaDataSyncAnswer(cmd.getClusterId(), vmMetadatum);
- }
-
- protected HashMap<String, String> clusterVMMetaDataSync(Connection conn) {
- final HashMap<String, String> vmMetaDatum = new HashMap<String, String>();
- try {
- Map<VM, VM.Record> vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
- for (VM.Record record: vm_map.values()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
- vmMetaDatum.put(record.nameLabel, StringUtils.mapToString(record.platform));
- }
- } catch (final Throwable e) {
- String msg = "Unable to get vms through host " + _host.uuid + " due to to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- }
- return vmMetaDatum;
- }
-
- protected HashMap<String, Pair<String, State>> fullClusterSync(Connection conn) {
- synchronized (_cluster.intern()) {
- s_vms.clear(_cluster);
- }
- try {
- Map<VM, VM.Record> vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
- for (VM.Record record : vm_map.values()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
- String vm_name = record.nameLabel;
- VmPowerState ps = record.powerState;
- final State state = convertToState(ps);
- Host host = record.residentOn;
- String host_uuid = null;
- if (!isRefNull(host)) {
- host_uuid = host.getUuid(conn);
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, host_uuid, vm_name, state);
- }
- }
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm_name + ": powerstate = " + ps + "; vm state=" + state.toString());
- }
- }
- } catch (final Throwable e) {
- String msg = "Unable to get vms through host " + _host.uuid + " due to to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- }
- return s_vms.getClusterVmState(_cluster);
- }
-
- protected HashMap<String, Pair<String, State>> deltaClusterSync(Connection conn) {
- final HashMap<String, Pair<String, State>> changes = new HashMap<String, Pair<String, State>>();
-
- synchronized (_cluster.intern()) {
- HashMap<String, Pair<String, State>> newStates = getAllVms(conn);
- if (newStates == null) {
- s_logger.warn("Unable to get the vm states so no state sync at this point.");
- return null;
- }
- HashMap<String, Pair<String, State>> oldStates = new HashMap<String, Pair<String, State>>(s_vms.size(_cluster));
- oldStates.putAll(s_vms.getClusterVmState(_cluster));
-
- for (final Map.Entry<String, Pair<String, State>> entry : newStates.entrySet()) {
- final String vm = entry.getKey();
- State newState = entry.getValue().second();
- String host_uuid = entry.getValue().first();
- final Pair<String, State> oldState = oldStates.remove(vm);
-
- //check if host is changed
- if (host_uuid != null && oldState != null) {
- if (!host_uuid.equals(oldState.first()) && newState != State.Stopped && newState != State.Stopping) {
- s_logger.warn("Detecting a change in host for " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
-
- s_logger.debug("11. The VM " + vm + " is in " + newState + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- continue;
- }
- }
-
- if (newState == State.Stopped && oldState != null && oldState.second() != State.Stopping && oldState.second() != State.Stopped) {
- newState = getRealPowerState(conn, vm);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": xen has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (vm.startsWith("migrating")) {
- s_logger.warn("Migrating from xen detected. Skipping");
- continue;
- }
- if (oldState == null) {
- s_vms.put(_cluster, host_uuid, vm, newState);
- s_logger.warn("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- } else if (oldState.second() == State.Starting) {
- if (newState == State.Running) {
- s_logger.debug("12. The VM " + vm + " is in " + State.Running + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.warn("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState.second() == State.Migrating) {
- if (newState == State.Running) {
- s_logger.debug("Detected that an migrating VM is now running: " + vm);
- s_vms.put(_cluster, host_uuid, vm, newState);
- }
- } else if (oldState.second() == State.Stopping) {
- if (newState == State.Stopped) {
- s_logger.debug("13. The VM " + vm + " is in " + State.Stopped + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- } else if (newState == State.Running) {
- s_logger.warn("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState.second() != newState) {
- s_logger.debug("14. The VM " + vm + " is in " + newState + " state was " + oldState.second());
- s_vms.put(_cluster, host_uuid, vm, newState);
- if (newState == State.Stopped) {
- /*
- * if (s_vmsKilled.remove(vm)) { s_logger.debug("VM " + vm + " has been killed for storage. ");
- * newState = State.Error; }
- */
- }
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- }
- }
-
- for (final Map.Entry<String, Pair<String, State>> entry : oldStates.entrySet()) {
- final String vm = entry.getKey();
- final State oldState = entry.getValue().second();
- String host_uuid = entry.getValue().first();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + " is now missing from xen so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.warn("Ignoring VM " + vm + " in transition state stopping.");
- s_vms.remove(_cluster, host_uuid, vm);
- } else if (oldState == State.Starting) {
- s_logger.warn("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- s_logger.debug("VM missing " + vm + " old state stopped so removing.");
- s_vms.remove(_cluster, host_uuid, vm);
- } else if (oldState == State.Migrating) {
- s_logger.warn("Ignoring VM " + vm + " in migrating state.");
- } else {
- State newState = State.Stopped;
- s_logger.warn("The VM is now missing marking it as Stopped " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- }
- }
- }
- return changes;
- }
-
- /**
- * @param cmd
- * @return
- */
- private UnPlugNicAnswer execute(UnPlugNicCommand cmd) {
- Connection conn = getConnection();
- String vmName = cmd.getVmName();
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- if (vms == null || vms.isEmpty()) {
- return new UnPlugNicAnswer(cmd, false, "Can not find VM " + vmName);
- }
- VM vm = vms.iterator().next();
- NicTO nic = cmd.getNic();
- String mac = nic.getMac();
- VIF vif = getVifByMac(conn, vm, mac);
- if (vif != null) {
- vif.unplug(conn);
- Network network = vif.getNetwork(conn);
- vif.destroy(conn);
- try {
- if (network.getNameLabel(conn).startsWith("VLAN")) {
- disableVlanNetwork(conn, network);
- }
- } catch (Exception e) {
- }
- }
- return new UnPlugNicAnswer(cmd, true, "success");
- } catch (Exception e) {
- String msg = " UnPlug Nic failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new UnPlugNicAnswer(cmd, false, msg);
- }
- }
-
- /**
- * @param cmd
- * @return
- */
- private PlugNicAnswer execute(PlugNicCommand cmd) {
- Connection conn = getConnection();
- String vmName = cmd.getVmName();
- try {
- Set<VM> vms = VM.getByNameLabel(conn, vmName);
- if (vms == null || vms.isEmpty()) {
- return new PlugNicAnswer(cmd, false, "Can not find VM " + vmName);
- }
- VM vm = vms.iterator().next();
- NicTO nic = cmd.getNic();
- VIF vif = getVifByMac(conn, vm, nic.getMac());
- if (vif != null) {
- String msg = " Plug Nic failed due to a VIF with the same mac " + nic.getMac() + " exists";
- s_logger.warn(msg);
- return new PlugNicAnswer(cmd, false, msg);
- }
- String deviceId = getLowestAvailableVIFDeviceNum(conn, vm);
- nic.setDeviceId(Integer.parseInt(deviceId));
- vif = createVif(conn, vmName, vm, null, nic);
- vif.plug(conn);
- return new PlugNicAnswer(cmd, true, "success");
- } catch (Exception e) {
- String msg = " Plug Nic failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new PlugNicAnswer(cmd, false, msg);
- }
- }
-
- /**
- * @param cmd
- * @return
- */
- private ExecutionResult prepareNetworkElementCommand(SetupGuestNetworkCommand cmd) {
- Connection conn = getConnection();
- NicTO nic = cmd.getNic();
- String domrName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- try {
- Set<VM> vms = VM.getByNameLabel(conn, domrName);
- if (vms == null || vms.isEmpty()) {
- return new ExecutionResult(false, "Can not find VM " + domrName);
- }
- VM vm = vms.iterator().next();
- String mac = nic.getMac();
- VIF domrVif = null;
- for (VIF vif : vm.getVIFs(conn)) {
- String lmac = vif.getMAC(conn);
- if (lmac.equals(mac)) {
- domrVif = vif;
- break;
- }
- }
- if (domrVif == null) {
- return new ExecutionResult(false, "Can not find vif with mac " + mac + " for VM " + domrName);
- }
-
- nic.setDeviceId(Integer.valueOf(domrVif.getDevice(conn)));
- } catch (Exception e) {
- String msg = "Creating guest network failed due to " + e.toString();
- s_logger.warn(msg, e);
- return new ExecutionResult(false, msg);
- }
- return new ExecutionResult(true, null);
- }
-
- protected ExecutionResult prepareNetworkElementCommand(IpAssocVpcCommand cmd) {
- Connection conn = getConnection();
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- try {
- IpAddressTO[] ips = cmd.getIpAddresses();
- for (IpAddressTO ip : ips) {
-
- VM router = getVM(conn, routerName);
-
- VIF correctVif = getVifByMac(conn, router, ip.getVifMacAddress());
- setNicDevIdIfCorrectVifIsNotNull(conn, ip, correctVif);
- }
- } catch (Exception e) {
- s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e);
- return new ExecutionResult(false, e.getMessage());
- }
-
- return new ExecutionResult(true, null);
- }
-
- protected void setNicDevIdIfCorrectVifIsNotNull(Connection conn, IpAddressTO ip, VIF correctVif) throws InternalErrorException, BadServerResponse, XenAPIException,
- XmlRpcException {
- if (correctVif == null) {
- if (ip.isAdd()) {
- throw new InternalErrorException("Failed to find DomR VIF to associate IP with.");
- } else {
- s_logger.debug("VIF to deassociate IP with does not exist, return success");
- }
- } else {
- ip.setNicDevId(Integer.valueOf(correctVif.getDevice(conn)));
- }
- }
-
- protected ExecutionResult prepareNetworkElementCommand(SetSourceNatCommand cmd) {
- Connection conn = getConnection();
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- IpAddressTO pubIp = cmd.getIpAddress();
- try {
- VM router = getVM(conn, routerName);
-
- VIF correctVif = getCorrectVif(conn, router, pubIp);
-
- pubIp.setNicDevId(Integer.valueOf(correctVif.getDevice(conn)));
-
- } catch (Exception e) {
- String msg = "Ip SNAT failure due to " + e.toString();
- s_logger.error(msg, e);
- return new ExecutionResult(false, msg);
- }
- return new ExecutionResult(true, null);
- }
-
- protected ExecutionResult prepareNetworkElementCommand(SetNetworkACLCommand cmd) {
- Connection conn = getConnection();
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
-
- try {
- VM router = getVM(conn, routerName);
-
- NicTO nic = cmd.getNic();
- VIF vif = getVifByMac(conn, router, nic.getMac());
-
- nic.setDeviceId(Integer.valueOf(vif.getDevice(conn)));
- } catch (Exception e) {
- String msg = "Prepare SetNetworkACL failed due to " + e.toString();
- s_logger.error(msg, e);
- return new ExecutionResult(false, msg);
- }
- return new ExecutionResult(true, null);
- }
-
- @Override
- public void setName(String name) {
- }
-
- @Override
- public void setConfigParams(Map<String, Object> params) {
- }
-
- @Override
- public Map<String, Object> getConfigParams() {
- return null;
- }
-
- @Override
- public int getRunLevel() {
- return 0;
- }
-
- @Override
- public void setRunLevel(int level) {
- }
-
- private boolean is_xcp() {
- Connection conn = getConnection();
- String result = callHostPlugin(conn, "ovstunnel", "is_xcp");
- if (result.equals("XCP"))
- return true;
- return false;
- }
-
- private String getLabel() {
- Connection conn = getConnection();
- String result = callHostPlugin(conn, "ovstunnel", "getLabel");
- return result;
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
deleted file mode 100644
index 4a69d3a..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
+++ /dev/null
@@ -1,195 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.NetworkUsageAnswer;
-import com.cloud.agent.api.NetworkUsageCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupStorageCommand;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.StopCommand;
-import com.cloud.agent.api.StoragePoolInfo;
-import com.cloud.resource.ServerResource;
-import com.cloud.storage.Storage;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VM;
-
-@Local(value = ServerResource.class)
-public class XcpOssResource extends CitrixResourceBase {
- private final static Logger s_logger = Logger.getLogger(XcpOssResource.class);
- private static final long mem_32m = 33554432L;
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xcposs/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
- @Override
- protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
- super.fillHostInfo(conn, cmd);
- cmd.setCaps(cmd.getCapabilities() + " , hvm");
- }
-
- @Override
- protected boolean launchHeartBeat(Connection conn) {
- return true;
- }
-
- protected StartupStorageCommand initializeLocalSR(Connection conn) {
- SR extsr = getLocalEXTSR(conn);
- if (extsr != null) {
- try {
- String extuuid = extsr.getUuid(conn);
- _host.localSRuuid = extuuid;
- long cap = extsr.getPhysicalSize(conn);
- if (cap > 0) {
- long avail = cap - extsr.getPhysicalUtilisation(conn);
- String name = "Cloud Stack Local EXT Storage Pool for " + _host.uuid;
- extsr.setNameDescription(conn, name);
- Host host = Host.getByUuid(conn, _host.uuid);
- String address = host.getAddress(conn);
- StoragePoolInfo pInfo = new StoragePoolInfo(extsr.getNameLabel(conn), address, SRType.EXT.toString(), SRType.EXT.toString(), Storage.StoragePoolType.EXT, cap, avail);
- StartupStorageCommand cmd = new StartupStorageCommand();
- cmd.setPoolInfo(pInfo);
- cmd.setGuid(_host.uuid);
- cmd.setDataCenter(Long.toString(_dcId));
- cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
- return cmd;
- }
- } catch (XenAPIException e) {
- String msg = "build local EXT info err in host:" + _host.uuid + e.toString();
- s_logger.warn(msg);
- } catch (XmlRpcException e) {
- String msg = "build local EXT info err in host:" + _host.uuid + e.getMessage();
- s_logger.warn(msg);
- }
- }
- return null;
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- if (stdType.equalsIgnoreCase("Debian GNU/Linux 6(64-bit)")) {
- return "Debian Squeeze 6.0 (64-bit)";
- } else if (stdType.equalsIgnoreCase("CentOS 5.6 (64-bit)")) {
- return "CentOS 5 (64-bit)";
- } else {
- return CitrixHelper.getXcpGuestOsType(stdType);
- }
- }
-
- @Override
- protected synchronized VBD createPatchVbd(Connection conn, String vmName, VM vm) throws XmlRpcException, XenAPIException {
- if (_host.localSRuuid != null) {
- //create an iso vdi on it
- String result = callHostPlugin(conn, "vmops", "createISOVHD", "uuid", _host.localSRuuid);
- if (result == null || result.equalsIgnoreCase("Failed")) {
- throw new CloudRuntimeException("can not create systemvm vdi");
- }
-
- Set<VDI> vdis = VDI.getByNameLabel(conn, "systemvm-vdi");
- if (vdis.size() != 1) {
- throw new CloudRuntimeException("can not find systemvmiso");
- }
- VDI systemvmVDI = vdis.iterator().next();
-
- VBD.Record cdromVBDR = new VBD.Record();
- cdromVBDR.VM = vm;
- cdromVBDR.empty = false;
- cdromVBDR.bootable = false;
- cdromVBDR.userdevice = "3";
- cdromVBDR.mode = Types.VbdMode.RO;
- cdromVBDR.type = Types.VbdType.DISK;
- cdromVBDR.VDI = systemvmVDI;
- VBD cdromVBD = VBD.create(conn, cdromVBDR);
- return cdromVBD;
- } else {
- throw new CloudRuntimeException("can not find local sr");
- }
- }
-
- protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) {
- try {
- Connection conn = getConnection();
- if (cmd.getOption() != null && cmd.getOption().equals("create")) {
- String result = networkUsage(conn, cmd.getPrivateIP(), "create", null);
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L, 0L);
- return answer;
- }
- long[] stats = getNetworkStats(conn, cmd.getPrivateIP());
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0], stats[1]);
- return answer;
- } catch (Exception ex) {
- s_logger.warn("Failed to get network usage stats due to ", ex);
- return new NetworkUsageAnswer(cmd, ex);
- }
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- if (cmd instanceof NetworkUsageCommand) {
- return execute((NetworkUsageCommand) cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- @Override
- public StopAnswer execute(StopCommand cmd) {
- StopAnswer answer = super.execute(cmd);
- String vmName = cmd.getVmName();
- if (vmName.startsWith("v-")) {
- Connection conn = getConnection();
- callHostPlugin(conn, "vmops", "setDNATRule", "add", "false");
- }
- return answer;
- }
-
- @Override
- protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException {
- vm.setMemoryLimits(conn, mem_32m, maxMemsize, minMemsize, maxMemsize);
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
deleted file mode 100644
index 8cb7997..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.cloud.hypervisor.xen.resource;
-
-public class XcpServer16Resource extends XcpServerResource {
-
- public XcpServer16Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXcp160GuestOsType(stdType);
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
deleted file mode 100644
index cc623bf..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VM;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.NetworkUsageAnswer;
-import com.cloud.agent.api.NetworkUsageCommand;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-@Local(value = ServerResource.class)
-public class XcpServerResource extends CitrixResourceBase {
- private final static Logger s_logger = Logger.getLogger(XcpServerResource.class);
- private static final long mem_32m = 33554432L;
- private String version;
-
- public XcpServerResource() {
- super();
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- if (cmd instanceof NetworkUsageCommand) {
- return execute((NetworkUsageCommand)cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xcpserver/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXcpGuestOsType(stdType);
- }
-
- protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) {
- try {
- Connection conn = getConnection();
- if (cmd.getOption() != null && cmd.getOption().equals("create")) {
- String result = networkUsage(conn, cmd.getPrivateIP(), "create", null);
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L, 0L);
- return answer;
- }
- long[] stats = getNetworkStats(conn, cmd.getPrivateIP());
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0], stats[1]);
- return answer;
- } catch (Exception ex) {
- s_logger.warn("Failed to get network usage stats due to ", ex);
- return new NetworkUsageAnswer(cmd, ex);
- }
- }
-
- /**
- XCP provides four memory configuration fields through which
- administrators can control this behaviour:
-
- * static-min
- * dynamic-min
- * dynamic-max
- * static-max
-
- The fields static-{min,max} act as *hard* lower and upper
- bounds for a guest's memory. For a running guest:
- * it's not possible to assign the guest more memory than
- static-max without first shutting down the guest.
- * it's not possible to assign the guest less memory than
- static-min without first shutting down the guest.
-
- The fields dynamic-{min,max} act as *soft* lower and upper
- bounds for a guest's memory. It's possible to change these
- fields even when a guest is running.
-
- The dynamic range must lie wholly within the static range. To
- put it another way, XCP at all times ensures that:
-
- static-min <= dynamic-min <= dynamic-max <= static-max
-
- At all times, XCP will attempt to keep a guest's memory usage
- between dynamic-min and dynamic-max.
-
- If dynamic-min = dynamic-max, then XCP will attempt to keep
- a guest's memory allocation at a constant size.
-
- If dynamic-min < dynamic-max, then XCP will attempt to give
- the guest as much memory as possible, while keeping the guest
- within dynamic-min and dynamic-max.
-
- If there is enough memory on a given host to give all resident
- guests dynamic-max, then XCP will attempt do so.
-
- If there is not enough memory to give all guests dynamic-max,
- then XCP will ask each of the guests (on that host) to use
- an amount of memory that is the same *proportional* distance
- between dynamic-min and dynamic-max.
-
- XCP will refuse to start guests if starting those guests would
- cause the sum of all the dynamic-min values to exceed the total
- host memory (taking into account various memory overheads).
-
- cf: http://wiki.xen.org/wiki/XCP_FAQ_Dynamic_Memory_Control
- */
- @Override
- protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException {
- //setMemoryLimits(staticMin, staticMax, dynamicMin, dynamicMax)
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Memory Limits for VM [" + vm.getNameLabel(conn) + "[staticMin:" + mem_32m + ", staticMax:" + maxMemsize + ", dynamicMin: " + minMemsize +
- ", dynamicMax:" + maxMemsize + "]]");
- }
- vm.setMemoryLimits(conn, mem_32m, maxMemsize, minMemsize, maxMemsize);
- }
-
- @Override
- protected boolean isDmcEnabled(Connection conn, Host host) {
- //Dynamic Memory Control (DMC) is a technology provided by Xen Cloud Platform (XCP), starting from the 0.5 release
- //For the supported XCPs dmc is default enabled, XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x;
- return true;
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
deleted file mode 100644
index 3dc527e..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VM;
-
-import com.cloud.agent.api.FenceAnswer;
-import com.cloud.agent.api.FenceCommand;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-@Local(value = ServerResource.class)
-public class XenServer56FP1Resource extends XenServer56Resource {
- private static final long mem_128m = 134217728L;
- private static final Logger s_logger = Logger.getLogger(XenServer56FP1Resource.class);
-
- public XenServer56FP1Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer56FP1GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xenserver56fp1/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
- @Override
- protected FenceAnswer execute(FenceCommand cmd) {
- Connection conn = getConnection();
- try {
- Boolean alive = check_heartbeat(cmd.getHostGuid());
- if ( alive == null ) {
- s_logger.debug("Failed to check heartbeat, so unable to fence");
- return new FenceAnswer(cmd, false, "Failed to check heartbeat, so unable to fence");
- }
- if ( alive ) {
- s_logger.debug("Heart beat is still going so unable to fence");
- return new FenceAnswer(cmd, false, "Heartbeat is still going on unable to fence");
- }
- Set<VM> vms = VM.getByNameLabel(conn, cmd.getVmName());
- for (VM vm : vms) {
- Set<VDI> vdis = new HashSet<VDI>();
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- VDI vdi = vbd.getVDI(conn);
- if (!isRefNull(vdi)) {
- vdis.add(vdi);
- }
- }
- synchronized (_cluster.intern()) {
- s_vms.remove(_cluster, _name, vm.getNameLabel(conn));
- }
- s_logger.info("Fence command for VM " + cmd.getVmName());
- vm.powerStateReset(conn);
- vm.destroy(conn);
- for (VDI vdi : vdis) {
- Map<String, String> smConfig = vdi.getSmConfig(conn);
- for (String key : smConfig.keySet()) {
- if (key.startsWith("host_")) {
- vdi.removeFromSmConfig(conn, key);
- break;
- }
- }
- }
- }
- return new FenceAnswer(cmd);
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to fence", e);
- return new FenceAnswer(cmd, false, e.getMessage());
- } catch (XenAPIException e) {
- s_logger.warn("Unable to fence", e);
- return new FenceAnswer(cmd, false, e.getMessage());
- }
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer56FP1StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
-
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer56FP1StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues.");
- }
- return dynamicMinRam;
- }
-
- /**
- * When Dynamic Memory Control (DMC) is enabled -
- * xen allows scaling the guest memory while the guest is running
- *
- * This is determined by the 'restrict_dmc' option on the host.
- * When false, scaling is allowed hence DMC is enabled
- */
- @Override
- protected boolean isDmcEnabled(Connection conn, Host host) throws XenAPIException, XmlRpcException {
- Map<String, String> hostParams = new HashMap<String, String>();
- hostParams = host.getLicenseParams(conn);
-
- Boolean isDmcEnabled = hostParams.get("restrict_dmc").equalsIgnoreCase("false");
-
- return isDmcEnabled;
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
deleted file mode 100644
index a78ed81..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
+++ /dev/null
@@ -1,328 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.CheckOnHostAnswer;
-import com.cloud.agent.api.CheckOnHostCommand;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.FenceAnswer;
-import com.cloud.agent.api.FenceCommand;
-import com.cloud.agent.api.NetworkUsageAnswer;
-import com.cloud.agent.api.NetworkUsageCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-import com.cloud.utils.ssh.SSHCmdHelper;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Network;
-import com.xensource.xenapi.PIF;
-import com.xensource.xenapi.Types.IpConfigurationMode;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VLAN;
-import com.xensource.xenapi.VM;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import javax.ejb.Local;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-@Local(value = ServerResource.class)
-public class XenServer56Resource extends CitrixResourceBase {
- private final static Logger s_logger = Logger.getLogger(XenServer56Resource.class);
-
- @Override
- public Answer executeRequest(Command cmd) {
- if (cmd instanceof FenceCommand) {
- return execute((FenceCommand)cmd);
- } else if (cmd instanceof NetworkUsageCommand) {
- return execute((NetworkUsageCommand)cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServerGuestOsType(stdType, bootFromCD);
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xenserver56/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
-
- return files;
- }
-
- @Override
- protected void disableVlanNetwork(Connection conn, Network network) {
- try {
- Network.Record networkr = network.getRecord(conn);
- if (!networkr.nameLabel.startsWith("VLAN")) {
- return;
- }
- String bridge = networkr.bridge.trim();
- for (PIF pif : networkr.PIFs) {
- PIF.Record pifr = pif.getRecord(conn);
- if (!pifr.host.getUuid(conn).equalsIgnoreCase(_host.uuid)) {
- continue;
- }
-
- VLAN vlan = pifr.VLANMasterOf;
- if (vlan != null) {
- String vlannum = pifr.VLAN.toString();
- String device = pifr.device.trim();
- if (vlannum.equals("-1")) {
- return;
- }
- try {
- vlan.destroy(conn);
- Host host = Host.getByUuid(conn, _host.uuid);
- host.forgetDataSourceArchives(conn, "pif_" + bridge + "_tx");
- host.forgetDataSourceArchives(conn, "pif_" + bridge + "_rx");
- host.forgetDataSourceArchives(conn, "pif_" + device + "." + vlannum + "_tx");
- host.forgetDataSourceArchives(conn, "pif_" + device + "." + vlannum + "_rx");
- } catch (XenAPIException e) {
- s_logger.info("Catch " + e.getClass().getName() + ": failed to destory VLAN " + device + " on host " + _host.uuid + " due to " + e.toString());
- }
- }
- return;
- }
- } catch (XenAPIException e) {
- String msg = "Unable to disable VLAN network due to " + e.toString();
- s_logger.warn(msg, e);
- } catch (Exception e) {
- String msg = "Unable to disable VLAN network due to " + e.getMessage();
- s_logger.warn(msg, e);
- }
- }
-
- @Override
- protected String networkUsage(Connection conn, final String privateIpAddress, final String option, final String vif) {
- String args = "";
- if (option.equals("get")) {
- args += "-g";
- } else if (option.equals("create")) {
- args += "-c";
- } else if (option.equals("reset")) {
- args += "-r";
- } else if (option.equals("addVif")) {
- args += "-a ";
- args += vif;
- } else if (option.equals("deleteVif")) {
- args += "-d ";
- args += vif;
- }
-
- return executeInVR(privateIpAddress, "netusage.sh", args).getDetails();
- }
-
- protected NetworkUsageAnswer VPCNetworkUsage(NetworkUsageCommand cmd) {
- try {
- Connection conn = getConnection();
- String option = cmd.getOption();
- String publicIp = cmd.getGatewayIP();
-
- String args = " -l " + publicIp + " ";
- if (option.equals("get")) {
- args += "-g";
- } else if (option.equals("create")) {
- args += "-c";
- String vpcCIDR = cmd.getVpcCIDR();
- args += " -v " + vpcCIDR;
- } else if (option.equals("reset")) {
- args += "-r";
- } else if (option.equals("vpn")) {
- args += "-n";
- } else if (option.equals("remove")) {
- args += "-d";
- } else {
- return new NetworkUsageAnswer(cmd, "success", 0L, 0L);
- }
-
- String result = executeInVR(cmd.getPrivateIP(), "vpc_netusage.sh", args).getDetails();
- if (option.equals("get") || option.equals("vpn")) {
- long[] stats = new long[2];
- if (result != null) {
- String[] splitResult = result.split(":");
- int i = 0;
- while (i < splitResult.length - 1) {
- stats[0] += (new Long(splitResult[i++])).longValue();
- stats[1] += (new Long(splitResult[i++])).longValue();
- }
- return new NetworkUsageAnswer(cmd, "success", stats[0], stats[1]);
- }
- }
- if (result == null || result.isEmpty()) {
- throw new Exception(" vpc network usage plugin call failed ");
- }
- return new NetworkUsageAnswer(cmd, "success", 0L, 0L);
- } catch (Exception ex) {
- s_logger.warn("Failed to get network usage stats due to ", ex);
- return new NetworkUsageAnswer(cmd, ex);
- }
- }
-
- protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) {
- if (cmd.isForVpc()) {
- return VPCNetworkUsage(cmd);
- }
- try {
- Connection conn = getConnection();
- if (cmd.getOption() != null && cmd.getOption().equals("create")) {
- String result = networkUsage(conn, cmd.getPrivateIP(), "create", null);
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L, 0L);
- return answer;
- }
- long[] stats = getNetworkStats(conn, cmd.getPrivateIP());
- NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0], stats[1]);
- return answer;
- } catch (Exception ex) {
- s_logger.warn("Failed to get network usage stats due to ", ex);
- return new NetworkUsageAnswer(cmd, ex);
- }
- }
-
- protected Boolean check_heartbeat(String hostuuid) {
- com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.ip, 22);
- try {
- sshConnection.connect(null, 60000, 60000);
- if (!sshConnection.authenticateWithPassword(_username, _password.peek())) {
- throw new CloudRuntimeException("Unable to authenticate");
- }
-
- String shcmd = "/opt/cloud/bin/check_heartbeat.sh " + hostuuid + " "
- + Integer.toString(_heartbeatInterval * 2);
- if (!SSHCmdHelper.sshExecuteCmd(sshConnection, shcmd)) {
- s_logger.debug("Heart beat is gone so dead.");
- return false;
- }
- s_logger.debug("Heart beat is still going");
- return true;
- } catch (Exception e) {
- s_logger.debug("health check failed due to catch exception " + e.toString());
- return null;
- } finally {
- sshConnection.close();
- }
- }
-
- protected FenceAnswer execute(FenceCommand cmd) {
- Connection conn = getConnection();
- try {
- Boolean alive = check_heartbeat(cmd.getHostGuid());
- if ( alive == null ) {
- s_logger.debug("Failed to check heartbeat, so unable to fence");
- return new FenceAnswer(cmd, false, "Failed to check heartbeat, so unable to fence");
- }
- if ( alive ) {
- s_logger.debug("Heart beat is still going so unable to fence");
- return new FenceAnswer(cmd, false, "Heartbeat is still going on unable to fence");
- }
- Set<VM> vms = VM.getByNameLabel(conn, cmd.getVmName());
- for (VM vm : vms) {
- synchronized (_cluster.intern()) {
- s_vms.remove(_cluster, _name, vm.getNameLabel(conn));
- }
- s_logger.info("Fence command for VM " + cmd.getVmName());
- vm.powerStateReset(conn);
- vm.destroy(conn);
- }
- return new FenceAnswer(cmd);
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to fence", e);
- return new FenceAnswer(cmd, false, e.getMessage());
- } catch (XenAPIException e) {
- s_logger.warn("Unable to fence", e);
- return new FenceAnswer(cmd, false, e.getMessage());
- }
- }
-
-
- @Override
- protected boolean transferManagementNetwork(Connection conn, Host host, PIF src, PIF.Record spr, PIF dest) throws XmlRpcException, XenAPIException {
- dest.reconfigureIp(conn, spr.ipConfigurationMode, spr.IP, spr.netmask, spr.gateway, spr.DNS);
- Host.managementReconfigure(conn, dest);
- String hostUuid = null;
- int count = 0;
- while (count < 10) {
- try {
- Thread.sleep(10000);
- hostUuid = host.getUuid(conn);
- if (hostUuid != null) {
- break;
- }
- } catch (XmlRpcException e) {
- s_logger.debug("Waiting for host to come back: " + e.getMessage());
- } catch (XenAPIException e) {
- s_logger.debug("Waiting for host to come back: " + e.getMessage());
- } catch (InterruptedException e) {
- s_logger.debug("Gotta run");
- return false;
- }
- }
- if (hostUuid == null) {
- s_logger.warn("Unable to transfer the management network from " + spr.uuid);
- return false;
- }
-
- src.reconfigureIp(conn, IpConfigurationMode.NONE, null, null, null, null);
- return true;
- }
-
- @Override
- public StartupCommand[] initialize() {
- pingXAPI();
- StartupCommand[] cmds = super.initialize();
- return cmds;
- }
-
-
- @Override
- protected CheckOnHostAnswer execute(CheckOnHostCommand cmd) {
- Boolean alive = check_heartbeat(cmd.getHost().getGuid());
- String msg = "";
- if (alive == null) {
- msg = " cannot determine ";
- } else if ( alive == true) {
- msg = "Heart beat is still going";
- } else {
- msg = "Heart beat is gone so dead.";
- }
- s_logger.debug(msg);
- return new CheckOnHostAnswer(cmd, alive, msg);
-
- }
-
-
- public XenServer56Resource() {
- super();
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
deleted file mode 100644
index 9e7d5dd..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-@Local(value = ServerResource.class)
-public class XenServer56SP2Resource extends XenServer56FP1Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer56SP2Resource.class);
-
- public XenServer56SP2Resource() {
- super();
- _xsMemoryUsed = 128 * 1024 * 1024L;
- _xsVirtualizationFactor = 62.0 / 64.0;
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer56SP2GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xenserver56fp1/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer56SP2StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer56SP2StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
deleted file mode 100644
index 021b9cb..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-@Local(value = ServerResource.class)
-public class XenServer600Resource extends XenServer56SP2Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer600Resource.class);
-
- public XenServer600Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer600GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer600StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer600StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xenserver60/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
deleted file mode 100644
index 5c9bfbb..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-import javax.ejb.Local;
-import org.apache.log4j.Logger;
-import com.cloud.resource.ServerResource;
-
-@Local(value = ServerResource.class)
-public class XenServer602Resource extends XenServer600Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer602Resource.class);
-
- public XenServer602Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer602GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer602StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer602StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
deleted file mode 100644
index 3be8c3b..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
+++ /dev/null
@@ -1,434 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Network;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VIF;
-import com.xensource.xenapi.VM;
-
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.MigrateWithStorageAnswer;
-import com.cloud.agent.api.MigrateWithStorageCommand;
-import com.cloud.agent.api.MigrateWithStorageCompleteAnswer;
-import com.cloud.agent.api.MigrateWithStorageCompleteCommand;
-import com.cloud.agent.api.MigrateWithStorageReceiveAnswer;
-import com.cloud.agent.api.MigrateWithStorageReceiveCommand;
-import com.cloud.agent.api.MigrateWithStorageSendAnswer;
-import com.cloud.agent.api.MigrateWithStorageSendCommand;
-import com.cloud.agent.api.storage.MigrateVolumeAnswer;
-import com.cloud.agent.api.storage.MigrateVolumeCommand;
-import com.cloud.agent.api.to.DiskTO;
-import com.cloud.agent.api.to.NicTO;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VirtualMachine.State;
-
-@Local(value = ServerResource.class)
-public class XenServer610Resource extends XenServer602Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer610Resource.class);
-
- public XenServer610Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer610GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- if (cmd instanceof MigrateWithStorageCommand) {
- return execute((MigrateWithStorageCommand)cmd);
- } else if (cmd instanceof MigrateWithStorageReceiveCommand) {
- return execute((MigrateWithStorageReceiveCommand)cmd);
- } else if (cmd instanceof MigrateWithStorageSendCommand) {
- return execute((MigrateWithStorageSendCommand)cmd);
- } else if (cmd instanceof MigrateWithStorageCompleteCommand) {
- return execute((MigrateWithStorageCompleteCommand)cmd);
- } else if (cmd instanceof MigrateVolumeCommand) {
- return execute((MigrateVolumeCommand)cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- private List<VolumeObjectTO> getUpdatedVolumePathsOfMigratedVm(Connection connection, VM migratedVm, DiskTO[] volumes) throws CloudRuntimeException {
- List<VolumeObjectTO> volumeToList = new ArrayList<VolumeObjectTO>();
-
- try {
- // Volume paths would have changed. Return that information.
- Set<VBD> vbds = migratedVm.getVBDs(connection);
- Map<String, VDI> deviceIdToVdiMap = new HashMap<String, VDI>();
- // get vdi:vbdr to a map
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(connection);
- if (vbdr.type == Types.VbdType.DISK) {
- VDI vdi = vbdr.VDI;
- deviceIdToVdiMap.put(vbdr.userdevice, vdi);
- }
- }
-
- for (DiskTO volumeTo : volumes) {
- VolumeObjectTO vol = (VolumeObjectTO)volumeTo.getData();
- Long deviceId = volumeTo.getDiskSeq();
- VDI vdi = deviceIdToVdiMap.get(deviceId.toString());
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(vdi.getUuid(connection));
- newVol.setId(vol.getId());
- volumeToList.add(newVol);
- }
- } catch (Exception e) {
- s_logger.error("Unable to get the updated VDI paths of the migrated vm " + e.toString(), e);
- throw new CloudRuntimeException("Unable to get the updated VDI paths of the migrated vm " + e.toString(), e);
- }
-
- return volumeToList;
- }
-
- protected MigrateWithStorageAnswer execute(MigrateWithStorageCommand cmd) {
- Connection connection = getConnection();
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- Map<VolumeTO, StorageFilerTO> volumeToFiler = cmd.getVolumeToFiler();
- final String vmName = vmSpec.getName();
- State state = s_vms.getState(_cluster, vmName);
- Task task = null;
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
-
- try {
- prepareISO(connection, vmSpec.getName());
- Map<String, String> other = new HashMap<String, String>();
- other.put("live", "true");
- Network networkForSm = getNativeNetworkForTraffic(connection, TrafficType.Storage, null).getNetwork();
- Host host = Host.getByUuid(connection, _host.uuid);
- Map<String, String> token = host.migrateReceive(connection, networkForSm, other);
-
- // Get the vm to migrate.
- Set<VM> vms = VM.getByNameLabel(connection, vmSpec.getName());
- VM vmToMigrate = vms.iterator().next();
-
- // Create the vif map. The vm stays in the same cluster so we have to pass an empty vif map.
- Map<VIF, Network> vifMap = new HashMap<VIF, Network>();
- Map<VDI, SR> vdiMap = new HashMap<VDI, SR>();
- for (Map.Entry<VolumeTO, StorageFilerTO> entry : volumeToFiler.entrySet()) {
- vdiMap.put(getVDIbyUuid(connection, entry.getKey().getPath()), getStorageRepository(connection, entry.getValue().getUuid()));
- }
-
- // Check migration with storage is possible.
- task = vmToMigrate.assertCanMigrateAsync(connection, token, true, vdiMap, vifMap, other);
- try {
- // poll every 1 seconds
- long timeout = (_migratewait) * 1000L;
- waitForTask(connection, task, 1000, timeout);
- checkForSuccess(connection, task);
- } catch (Types.HandleInvalid e) {
- s_logger.error("Error while checking if vm " + vmName + " can be migrated to the destination host " + host, e);
- throw new CloudRuntimeException("Error while checking if vm " + vmName + " can be migrated to the " + "destination host " + host, e);
- }
-
- // Migrate now.
- task = vmToMigrate.migrateSendAsync(connection, token, true, vdiMap, vifMap, other);
- try {
- // poll every 1 seconds.
- long timeout = (_migratewait) * 1000L;
- waitForTask(connection, task, 1000, timeout);
- checkForSuccess(connection, task);
- } catch (Types.HandleInvalid e) {
- s_logger.error("Error while migrating vm " + vmName + " to the destination host " + host, e);
- throw new CloudRuntimeException("Error while migrating vm " + vmName + " to the destination host " + host, e);
- }
-
- // Volume paths would have changed. Return that information.
- List<VolumeObjectTO> volumeToList = getUpdatedVolumePathsOfMigratedVm(connection, vmToMigrate, vmSpec.getDisks());
- vmToMigrate.setAffinity(connection, host);
- state = State.Stopping;
-
- return new MigrateWithStorageAnswer(cmd, volumeToList);
- } catch (Exception e) {
- s_logger.warn("Catch Exception " + e.getClass().getName() + ". Storage motion failed due to " + e.toString(), e);
- return new MigrateWithStorageAnswer(cmd, e);
- } finally {
- if (task != null) {
- try {
- task.destroy(connection);
- } catch (Exception e) {
- s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString());
- }
- }
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
- }
- }
-
- protected MigrateWithStorageReceiveAnswer execute(MigrateWithStorageReceiveCommand cmd) {
- Connection connection = getConnection();
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- Map<VolumeTO, StorageFilerTO> volumeToFiler = cmd.getVolumeToFiler();
-
- try {
- // Get a map of all the SRs to which the vdis will be migrated.
- Map<VolumeTO, Object> volumeToSr = new HashMap<VolumeTO, Object>();
- for (Map.Entry<VolumeTO, StorageFilerTO> entry : volumeToFiler.entrySet()) {
- SR sr = getStorageRepository(connection, entry.getValue().getUuid());
- volumeToSr.put(entry.getKey(), sr);
- }
-
- // Get the list of networks to which the vifs will attach.
- Map<NicTO, Object> nicToNetwork = new HashMap<NicTO, Object>();
- for (NicTO nicTo : vmSpec.getNics()) {
- Network network = getNetwork(connection, nicTo);
- nicToNetwork.put(nicTo, network);
- }
-
- Map<String, String> other = new HashMap<String, String>();
- other.put("live", "true");
- Network network = getNativeNetworkForTraffic(connection, TrafficType.Storage, null).getNetwork();
- Host host = Host.getByUuid(connection, _host.uuid);
- Map<String, String> token = host.migrateReceive(connection, network, other);
-
- return new MigrateWithStorageReceiveAnswer(cmd, volumeToSr, nicToNetwork, token);
- } catch (CloudRuntimeException e) {
- s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageReceiveAnswer(cmd, e);
- } catch (Exception e) {
- s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageReceiveAnswer(cmd, e);
- }
- }
-
- protected MigrateWithStorageSendAnswer execute(MigrateWithStorageSendCommand cmd) {
- Connection connection = getConnection();
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
- Map<VolumeTO, Object> volumeToSr = cmd.getVolumeToSr();
- Map<NicTO, Object> nicToNetwork = cmd.getNicToNetwork();
- Map<String, String> token = cmd.getToken();
- final String vmName = vmSpec.getName();
- State state = s_vms.getState(_cluster, vmName);
- Set<VolumeTO> volumeToSet = null;
- boolean migrated = false;
- Task task = null;
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
-
- try {
- Set<VM> vms = VM.getByNameLabel(connection, vmSpec.getName());
- VM vmToMigrate = vms.iterator().next();
- Map<String, String> other = new HashMap<String, String>();
- other.put("live", "true");
-
- // Create the vdi map which tells what volumes of the vm need to go on which sr on the destination.
- Map<VDI, SR> vdiMap = new HashMap<VDI, SR>();
- for (Map.Entry<VolumeTO, Object> entry : volumeToSr.entrySet()) {
- if (entry.getValue() instanceof SR) {
- SR sr = (SR)entry.getValue();
- VDI vdi = getVDIbyUuid(connection, entry.getKey().getPath());
- vdiMap.put(vdi, sr);
- } else {
- throw new CloudRuntimeException("The object " + entry.getValue() + " passed is not of type SR.");
- }
- }
-
- // Create the vif map.
- Map<VIF, Network> vifMap = new HashMap<VIF, Network>();
- for (Map.Entry<NicTO, Object> entry : nicToNetwork.entrySet()) {
- if (entry.getValue() instanceof Network) {
- Network network = (Network)entry.getValue();
- VIF vif = getVifByMac(connection, vmToMigrate, entry.getKey().getMac());
- vifMap.put(vif, network);
- } else {
- throw new CloudRuntimeException("The object " + entry.getValue() + " passed is not of type Network.");
- }
- }
-
- // Check migration with storage is possible.
- task = vmToMigrate.assertCanMigrateAsync(connection, token, true, vdiMap, vifMap, other);
- try {
- // poll every 1 seconds.
- long timeout = (_migratewait) * 1000L;
- waitForTask(connection, task, 1000, timeout);
- checkForSuccess(connection, task);
- } catch (Types.HandleInvalid e) {
- s_logger.error("Error while checking if vm " + vmName + " can be migrated.", e);
- throw new CloudRuntimeException("Error while checking if vm " + vmName + " can be migrated.", e);
- }
-
- // Migrate now.
- task = vmToMigrate.migrateSendAsync(connection, token, true, vdiMap, vifMap, other);
- try {
- // poll every 1 seconds.
- long timeout = (_migratewait) * 1000L;
- waitForTask(connection, task, 1000, timeout);
- checkForSuccess(connection, task);
- } catch (Types.HandleInvalid e) {
- s_logger.error("Error while migrating vm " + vmName, e);
- throw new CloudRuntimeException("Error while migrating vm " + vmName, e);
- }
-
- migrated = true;
- return new MigrateWithStorageSendAnswer(cmd, volumeToSet);
- } catch (CloudRuntimeException e) {
- s_logger.error("Migration of vm " + vmName + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageSendAnswer(cmd, e);
- } catch (Exception e) {
- s_logger.error("Migration of vm " + vmName + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageSendAnswer(cmd, e);
- } finally {
- if (task != null) {
- try {
- task.destroy(connection);
- } catch (Exception e) {
- s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString());
- }
- }
-
- // Keep cluster/vm sync happy.
- synchronized (_cluster.intern()) {
- if (migrated) {
- s_vms.remove(_cluster, _name, vmName);
- } else {
- s_vms.put(_cluster, _name, vmName, state);
- }
- }
- }
- }
-
- protected MigrateWithStorageCompleteAnswer execute(MigrateWithStorageCompleteCommand cmd) {
- Connection connection = getConnection();
- VirtualMachineTO vmSpec = cmd.getVirtualMachine();
-
- try {
- Host host = Host.getByUuid(connection, _host.uuid);
- Set<VM> vms = VM.getByNameLabel(connection, vmSpec.getName());
- VM migratedVm = vms.iterator().next();
-
- // Check the vm is present on the new host.
- if (migratedVm == null) {
- throw new CloudRuntimeException("Couldn't find the migrated vm " + vmSpec.getName() + " on the destination host.");
- }
-
- // Volume paths would have changed. Return that information.
- List<VolumeObjectTO> volumeToSet = getUpdatedVolumePathsOfMigratedVm(connection, migratedVm, vmSpec.getDisks());
- migratedVm.setAffinity(connection, host);
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmSpec.getName(), State.Running);
- }
-
- return new MigrateWithStorageCompleteAnswer(cmd, volumeToSet);
- } catch (CloudRuntimeException e) {
- s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageCompleteAnswer(cmd, e);
- } catch (Exception e) {
- s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e);
- return new MigrateWithStorageCompleteAnswer(cmd, e);
- }
- }
-
- protected MigrateVolumeAnswer execute(MigrateVolumeCommand cmd) {
- Connection connection = getConnection();
- String volumeUUID = cmd.getVolumePath();
- StorageFilerTO poolTO = cmd.getPool();
-
- try {
- SR destinationPool = getStorageRepository(connection, poolTO.getUuid());
- VDI srcVolume = getVDIbyUuid(connection, volumeUUID);
- Map<String, String> other = new HashMap<String, String>();
- other.put("live", "true");
-
- // Live migrate the vdi across pool.
- Task task = srcVolume.poolMigrateAsync(connection, destinationPool, other);
- long timeout = (_migratewait) * 1000L;
- waitForTask(connection, task, 1000, timeout);
- checkForSuccess(connection, task);
- VDI dvdi = Types.toVDI(task, connection);
-
- return new MigrateVolumeAnswer(cmd, true, null, dvdi.getUuid(connection));
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
- s_logger.error(msg, e);
- return new MigrateVolumeAnswer(cmd, false, msg, null);
- }
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer610StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer610StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
- @Override
- protected void plugDom0Vif(Connection conn, VIF dom0Vif) throws XmlRpcException, XenAPIException {
- // do nothing. In xenserver 6.1 and beyond this step isn't needed.
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
deleted file mode 100644
index f8b9919..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.HostPatch;
-import com.xensource.xenapi.PoolPatch;
-import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.resource.ServerResource;
-
-@Local(value = ServerResource.class)
-public class XenServer620Resource extends XenServer610Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer620Resource.class);
-
- public XenServer620Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer620GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer620StaticMax(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax +
- ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam) {
- long recommendedValue = CitrixHelper.getXenServer620StaticMin(os, b);
- if (recommendedValue == 0) {
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if (dynamicMinRam < recommendedValue) { // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
- protected boolean hostHasHotFix(Connection conn, String hotFixUuid) {
- try {
- Host host = Host.getByUuid(conn, _host.uuid);
- Host.Record re = host.getRecord(conn);
- Set<HostPatch> patches = re.patches;
- PoolPatch poolPatch = PoolPatch.getByUuid(conn, hotFixUuid);
- for(HostPatch patch : patches) {
- PoolPatch pp = patch.getPoolPatch(conn);
- if (pp.equals(poolPatch) && patch.getApplied(conn)) {
- return true;
- }
- }
- } catch (Exception e) {
- s_logger.debug("can't get patches information for hotFix: " + hotFixUuid);
- }
- return false;
- }
-
- protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
- super.fillHostInfo(conn, cmd);
- Map<String, String> details = cmd.getHostDetails();
- Boolean hotFix62ESP1004 = hostHasHotFix(conn, XenserverConfigs.XSHotFix62ESP1004);
- if( hotFix62ESP1004 != null && hotFix62ESP1004 ) {
- details.put(XenserverConfigs.XS620HotFix , XenserverConfigs.XSHotFix62ESP1004);
- } else {
- Boolean hotFix62ESP1 = hostHasHotFix(conn, XenserverConfigs.XSHotFix62ESP1);
- if( hotFix62ESP1 != null && hotFix62ESP1 ) {
- details.put(XenserverConfigs.XS620HotFix , XenserverConfigs.XSHotFix62ESP1);
- }
- }
- cmd.setHostDetails(details);
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
deleted file mode 100644
index 4f04961..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.GetGPUStatsAnswer;
-import com.cloud.agent.api.GetGPUStatsCommand;
-import com.cloud.agent.api.StartCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.VgpuTypesInfo;
-import com.cloud.agent.api.to.GPUDeviceTO;
-import com.cloud.resource.ServerResource;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.GPUGroup;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.PGPU;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VGPU;
-import com.xensource.xenapi.VGPUType;
-import com.xensource.xenapi.VGPUType.Record;
-import com.xensource.xenapi.VM;
-
-@Local(value=ServerResource.class)
-public class XenServer620SP1Resource extends XenServer620Resource {
- private static final Logger s_logger = Logger.getLogger(XenServer620SP1Resource.class);
-
- public XenServer620SP1Resource() {
- super();
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
- Class<? extends Command> clazz = cmd.getClass();
- if (clazz == GetGPUStatsCommand.class) {
- return execute((GetGPUStatsCommand) cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- protected GetGPUStatsAnswer execute(GetGPUStatsCommand cmd) {
- Connection conn = getConnection();
- HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = new HashMap<String, HashMap<String, VgpuTypesInfo>>();
- try {
- groupDetails = getGPUGroupDetails(conn);
- } catch (Exception e) {
- String msg = "Unable to get GPU stats" + e.toString();
- s_logger.warn(msg, e);
- }
- return new GetGPUStatsAnswer(cmd, groupDetails);
- }
-
- @Override
- protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
- super.fillHostInfo(conn, cmd);
- try {
- HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = getGPUGroupDetails(conn);
- cmd.setGpuGroupDetails(groupDetails);
- } catch (Exception e) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Error while getting GPU device info from host " + cmd.getName(), e);
- }
- }
- }
-
- @Override
- protected HashMap<String, HashMap<String, VgpuTypesInfo>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
- HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = new HashMap<String, HashMap<String, VgpuTypesInfo>>();
- Host host = Host.getByUuid(conn, _host.uuid);
- Set<PGPU> pgpus = host.getPGPUs(conn);
- Iterator<PGPU> iter = pgpus.iterator();
- while (iter.hasNext()) {
- PGPU pgpu = iter.next();
- GPUGroup gpuGroup = pgpu.getGPUGroup(conn);
- Set<VGPUType> enabledVGPUTypes = gpuGroup.getEnabledVGPUTypes(conn);
- String groupName = gpuGroup.getNameLabel(conn);
- HashMap<String, VgpuTypesInfo> gpuCapacity = new HashMap<String, VgpuTypesInfo>();
- if (groupDetails.get(groupName) != null) {
- gpuCapacity = groupDetails.get(groupName);
- }
- // Get remaining capacity of all the enabled VGPU in a PGPU
- if(enabledVGPUTypes != null) {
- Iterator<VGPUType> it = enabledVGPUTypes.iterator();
- while (it.hasNext()) {
- VGPUType type = it.next();
- Record record = type.getRecord(conn);
- Long remainingCapacity = pgpu.getRemainingCapacity(conn, type);
- Long maxCapacity = pgpu.getSupportedVGPUMaxCapacities(conn).get(type);
- VgpuTypesInfo entry;
- if ((entry = gpuCapacity.get(record.modelName)) != null) {
- remainingCapacity += entry.getRemainingCapacity();
- maxCapacity += entry.getMaxCapacity();
- entry.setRemainingCapacity(remainingCapacity);
- entry.setMaxVmCapacity(maxCapacity);
- gpuCapacity.put(record.modelName, entry);
- } else {
- VgpuTypesInfo vgpuTypeRecord = new VgpuTypesInfo(record.modelName, record.framebufferSize, record.maxHeads,
- record.maxResolutionX, record.maxResolutionY, maxCapacity, remainingCapacity, maxCapacity);
- gpuCapacity.put(record.modelName, vgpuTypeRecord);
- }
- }
- }
- groupDetails.put(groupName, gpuCapacity);
- }
- return groupDetails;
- }
-
- @Override
- protected void createVGPU(Connection conn, StartCommand cmd, VM vm, GPUDeviceTO gpuDevice) throws XenAPIException, XmlRpcException {
- Set<GPUGroup> groups = GPUGroup.getByNameLabel(conn, gpuDevice.getGpuGroup());
- assert groups.size() == 1 : "Should only have 1 group but found " + groups.size();
- GPUGroup gpuGroup = groups.iterator().next();
-
- Set<VGPUType> vgpuTypes = gpuGroup.getEnabledVGPUTypes(conn);
- Iterator<VGPUType> iter = vgpuTypes.iterator();
- VGPUType vgpuType = null;
- while (iter.hasNext()) {
- VGPUType entry = iter.next();
- if (entry.getModelName(conn).equals(gpuDevice.getVgpuType())) {
- vgpuType = entry;
- }
- }
- String device = "0"; // Only allow device = "0" for now, as XenServer supports just a single vGPU per VM.
- Map<String, String> other_config = new HashMap<String, String>();
- VGPU.create(conn, vm, gpuGroup, device, other_config, vgpuType);
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Created VGPU of VGPU type [ " + gpuDevice.getVgpuType() + " ] for VM " + cmd.getVirtualMachine().getName());
- }
- // Calculate and set remaining GPU capacity in the host.
- cmd.getVirtualMachine().getGpuDevice().setGroupDetails(getGPUGroupDetails(conn));
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer620SP1GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
- long recommendedValue = CitrixHelper.getXenServer620SP1StaticMax(os, b);
- if(recommendedValue == 0){
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax){ // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax + ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
- long recommendedValue = CitrixHelper.getXenServer620SP1StaticMin(os, b);
- if(recommendedValue == 0){
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if(dynamicMinRam < recommendedValue){ // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java
deleted file mode 100644
index ca04673..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java
+++ /dev/null
@@ -1,503 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Queue;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSession;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClientException;
-
-import com.xensource.xenapi.APIVersion;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.Session;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.BadServerResponse;
-import com.xensource.xenapi.Types.XenAPIException;
-
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.PropertiesUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class XenServerConnectionPool {
- private static final Logger s_logger = Logger.getLogger(XenServerConnectionPool.class);
- protected HashMap<String /* poolUuid */, XenServerConnection> _conns = new HashMap<String, XenServerConnection>();
- protected int _retries;
- protected int _interval;
- protected int _connWait = 5;
- protected static long s_sleepOnError = 10 * 1000; // in ms
- static {
- File file = PropertiesUtil.findConfigFile("environment.properties");
- if (file == null) {
- s_logger.debug("Unable to find environment.properties");
- } else {
- FileInputStream finputstream;
- try {
- finputstream = new FileInputStream(file);
- final Properties props = new Properties();
- props.load(finputstream);
- finputstream.close();
- String search = props.getProperty("sleep.interval.on.error");
- if (search != null) {
- s_sleepOnError = NumbersUtil.parseInterval(search, 10) * 1000;
- }
- s_logger.info("XenServer Connection Pool Configs: sleep.interval.on.error=" + s_sleepOnError);
- } catch (FileNotFoundException e) {
- s_logger.debug("File is not found", e);
- } catch (IOException e) {
- s_logger.debug("IO Exception while reading file", e);
- }
- }
- try {
- javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
- javax.net.ssl.TrustManager tm = new TrustAllManager();
- trustAllCerts[0] = tm;
- javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("TLS");
- sc.init(null, trustAllCerts, null);
- javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
- HostnameVerifier hv = new HostnameVerifier() {
- @Override
- public boolean verify(String hostName, SSLSession session) {
- return true;
- }
- };
- HttpsURLConnection.setDefaultHostnameVerifier(hv);
- } catch (Exception e) {
- }
- }
-
- protected XenServerConnectionPool() {
- _retries = 1;
- _interval = 3;
- }
-
- private void addConnect(String poolUuid, XenServerConnection conn) {
- if (poolUuid == null)
- return;
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Add master connection through " + conn.getIp() + " for pool(" + conn.getPoolUuid() + ")");
- }
- synchronized (_conns) {
- _conns.put(poolUuid, conn);
- }
- }
-
- private XenServerConnection getConnect(String poolUuid) {
- if (poolUuid == null)
- return null;
- synchronized (_conns) {
- return _conns.get(poolUuid);
- }
- }
-
- private void removeConnect(String poolUuid) {
- if (poolUuid == null) {
- return;
- }
- XenServerConnection conn = null;
- synchronized (_conns) {
- conn = _conns.remove(poolUuid);
- }
- if (conn != null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Remove master connection through " + conn.getIp() + " for pool(" + conn.getPoolUuid() + ")");
- }
-
- }
- }
-
- static void forceSleep(long sec) {
- long firetime = System.currentTimeMillis() + (sec * 1000);
- long msec = sec * 1000;
- while (true) {
- if (msec < 100)
- break;
- try {
- Thread.sleep(msec);
- return;
- } catch (InterruptedException e) {
- msec = firetime - System.currentTimeMillis();
- }
- }
- }
-
- public Connection getConnect(String ip, String username, Queue<String> password) {
- Connection conn = new Connection(getURL(ip), 10, _connWait);
- try {
- loginWithPassword(conn, username, password, APIVersion.latest().toString());
- } catch (Types.HostIsSlave e) {
- String maddress = e.masterIPAddress;
- conn = new Connection(getURL(maddress), 10, _connWait);
- try {
- loginWithPassword(conn, username, password, APIVersion.latest().toString());
- } catch (Exception e1) {
- String msg = "Unable to create master connection to host(" + maddress +") , due to " + e1.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e1);
- }
- } catch (Exception e) {
- String msg = "Unable to create master connection to host(" + ip +") , due to " + e.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e);
- }
- return conn;
- }
-
- public URL getURL(String ip) {
- try {
- return new URL("https://" + ip);
- } catch (Exception e) {
- String msg = "Unable to convert IP " + ip + " to URL due to " + e.toString();
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(msg);
- }
- throw new CloudRuntimeException(msg, e);
- }
- }
-
- public Connection connect(String hostUuid, String poolUuid, String ipAddress,
- String username, Queue<String> password, int wait) {
- XenServerConnection mConn = null;
- if (hostUuid == null || poolUuid == null || ipAddress == null || username == null || password == null) {
- String msg = "Connect some parameter are null hostUuid:" + hostUuid + " ,poolUuid:" + poolUuid
- + " ,ipAddress:" + ipAddress;
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg);
- }
- synchronized (poolUuid.intern()) {
- mConn = getConnect(poolUuid);
- if (mConn != null){
- try{
- Host host = Host.getByUuid(mConn, hostUuid);
- if (!host.getEnabled(mConn)) {
- String msg = "Cannot connect this host " + ipAddress + " due to the host is not enabled";
- s_logger.debug(msg);
- if (mConn.getIp().equalsIgnoreCase(ipAddress)) {
- removeConnect(poolUuid);
- mConn = null;
- }
- throw new CloudRuntimeException(msg);
- }
- return mConn;
- } catch (CloudRuntimeException e) {
- throw e;
- } catch (Exception e) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("connect through IP(" + mConn.getIp() + " for pool(" + poolUuid + ") is broken due to " + e.toString());
- }
- removeConnect(poolUuid);
- mConn = null;
- }
- }
-
- if ( mConn == null ) {
- try {
- Connection conn = new Connection(getURL(ipAddress), 5, _connWait);
- Session sess = loginWithPassword(conn, username, password, APIVersion.latest().toString());
- Host host = sess.getThisHost(conn);
- Boolean hostenabled = host.getEnabled(conn);
- if( sess != null ){
- try{
- Session.logout(conn);
- } catch (Exception e) {
- }
- conn.dispose();
- }
- if (!hostenabled) {
- String msg = "Unable to create master connection, due to master Host " + ipAddress + " is not enabled";
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg);
- }
- mConn = new XenServerConnection(getURL(ipAddress), ipAddress, username, password, _retries, _interval, wait, _connWait);
- loginWithPassword(mConn, username, password, APIVersion.latest().toString());
- } catch (Types.HostIsSlave e) {
- String maddress = e.masterIPAddress;
- mConn = new XenServerConnection(getURL(maddress), maddress, username, password, _retries, _interval, wait, _connWait);
- try {
- Session session = loginWithPassword(mConn, username, password, APIVersion.latest().toString());
- Host host = session.getThisHost(mConn);
- if (!host.getEnabled(mConn)) {
- String msg = "Unable to create master connection, due to master Host " + maddress + " is not enabled";
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg);
- }
- } catch (Exception e1) {
- String msg = "Unable to create master connection to host(" + maddress +") , due to " + e1.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e1);
-
- }
- } catch (CloudRuntimeException e) {
- throw e;
- } catch (Exception e) {
- String msg = "Unable to create master connection to host(" + ipAddress +") , due to " + e.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e);
- }
- addConnect(poolUuid, mConn);
- }
- }
- return mConn;
- }
-
-
-
- protected Session slaveLocalLoginWithPassword(Connection conn, String username, Queue<String> password) throws BadServerResponse, XenAPIException, XmlRpcException {
- Session s = null;
- boolean logged_in = false;
- Exception ex = null;
- while (!logged_in) {
- try {
- s = Session.slaveLocalLoginWithPassword(conn, username, password.peek());
- logged_in = true;
- } catch (BadServerResponse e) {
- logged_in = false;
- ex = e;
- } catch (XenAPIException e) {
- logged_in = false;
- ex = e;
- } catch (XmlRpcException e) {
- logged_in = false;
- ex = e;
- }
- if (logged_in && conn != null) {
- break;
- } else {
- if (password.size() > 1) {
- password.remove();
- continue;
- } else {
- // the last password did not work leave it and flag error
- if (ex instanceof BadServerResponse) {
- throw (BadServerResponse)ex;
- } else if (ex instanceof XmlRpcException) {
- throw (XmlRpcException)ex;
- } else if (ex instanceof Types.SessionAuthenticationFailed) {
- throw (Types.SessionAuthenticationFailed)ex;
- } else if (ex instanceof XenAPIException) {
- throw (XenAPIException)ex;
- }
- break;
- }
- }
- }
- return s;
- }
-
- protected Session loginWithPassword(Connection conn, String username, Queue<String> password, String version) throws BadServerResponse, XenAPIException,
- XmlRpcException {
- Session s = null;
- boolean logged_in = false;
- Exception ex = null;
- while (!logged_in) {
- try {
- s = Session.loginWithPassword(conn, username, password.peek(), APIVersion.latest().toString());
- logged_in = true;
- } catch (BadServerResponse e) {
- logged_in = false;
- ex = e;
- } catch (XenAPIException e) {
- logged_in = false;
- ex = e;
- } catch (XmlRpcException e) {
- logged_in = false;
- ex = e;
- }
-
- if (logged_in && conn != null) {
- break;
- } else {
- if (password.size() > 1) {
- password.remove();
- continue;
- } else {
- // the last password did not work leave it and flag error
- if (ex instanceof BadServerResponse) {
- throw (BadServerResponse)ex;
- } else if (ex instanceof XmlRpcException) {
- throw (XmlRpcException)ex;
- } else if (ex instanceof Types.SessionAuthenticationFailed) {
- throw (Types.SessionAuthenticationFailed)ex;
- } else if (ex instanceof XenAPIException) {
- throw (XenAPIException)ex;
- }
- }
- }
- }
- return s;
- }
-
- protected void join(Connection conn, String masterIp, String username, Queue<String> password) throws BadServerResponse, XenAPIException, XmlRpcException,
- Types.JoiningHostCannotContainSharedSrs {
-
- boolean logged_in = false;
- Exception ex = null;
- while (!logged_in) {
- try {
- Pool.join(conn, masterIp, username, password.peek());
- logged_in = true;
- } catch (BadServerResponse e) {
- logged_in = false;
- ex = e;
- } catch (XenAPIException e) {
- logged_in = false;
- ex = e;
- } catch (XmlRpcException e) {
- logged_in = false;
- ex = e;
- }
- if (logged_in && conn != null) {
- break;
- } else {
- if (password.size() > 1) {
- password.remove();
- continue;
- } else {
- // the last password did not work leave it and flag error
- if (ex instanceof BadServerResponse) {
- throw (BadServerResponse)ex;
- } else if (ex instanceof XmlRpcException) {
- throw (XmlRpcException)ex;
- } else if (ex instanceof Types.SessionAuthenticationFailed) {
- throw (Types.SessionAuthenticationFailed)ex;
- } else if (ex instanceof XenAPIException) {
- throw (XenAPIException)ex;
- }
- break;
- }
- }
- }
- }
-
- static public Pool.Record getPoolRecord(Connection conn) throws XmlRpcException, XenAPIException {
- Map<Pool, Pool.Record> pools = Pool.getAllRecords(conn);
- assert pools.size() == 1 : "Pool size is not one....hmmm....wth? " + pools.size();
-
- return pools.values().iterator().next();
- }
-
- private static final XenServerConnectionPool s_instance = new XenServerConnectionPool();
-
- public static XenServerConnectionPool getInstance() {
- return s_instance;
- }
-
- public class XenServerConnection extends Connection {
- long _interval;
- int _retries;
- String _ip;
- String _username;
- Queue<String> _password;
- String _poolUuid;
-
- public XenServerConnection(URL url, String ip, String username, Queue<String> password, int retries, int interval, int wait, int connwait) {
- super(url, wait, connwait);
- _ip = ip;
- _retries = retries;
- _username = username;
- _password = password;
- _interval = (long)interval * 1000;
-
- }
-
- public String getPoolUuid() {
- return _poolUuid;
- }
-
- public String getUsername() {
- return _username;
- }
-
- public Queue<String> getPassword() {
- return _password;
- }
-
- public String getIp() {
- return _ip;
- }
-
- @Override
- protected Map dispatch(String methodcall, Object[] methodparams) throws XmlRpcException, XenAPIException {
- if (methodcall.equals("session.local_logout")
- || methodcall.equals("session.slave_local_login_with_password")
- || methodcall.equals("session.logout")
- || methodcall.equals("session.login_with_password")) {
- return super.dispatch(methodcall, methodparams);
- }
-
- try {
- return super.dispatch(methodcall, methodparams);
- } catch (Types.SessionInvalid e) {
- s_logger.debug("Session is invalid for method: " + methodcall + " due to " + e.toString());
- removeConnect(_poolUuid);
- throw e;
- } catch (XmlRpcClientException e) {
- s_logger.debug("XmlRpcClientException for method: " + methodcall + " due to " + e.toString());
- removeConnect(_poolUuid);
- throw e;
- } catch (XmlRpcException e) {
- s_logger.debug("XmlRpcException for method: " + methodcall + " due to " + e.toString());
- removeConnect(_poolUuid);
- throw e;
- } catch (Types.HostIsSlave e) {
- s_logger.debug("HostIsSlave Exception for method: " + methodcall + " due to " + e.toString());
- removeConnect(_poolUuid);
- throw e;
- }
- }
- }
-
- public static class TrustAllManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return null;
- }
-
- public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
- return true;
- }
-
- public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
- return true;
- }
-
- @Override
- public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException {
- return;
- }
-
- @Override
- public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException {
- return;
- }
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java
deleted file mode 100644
index 488acec..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
-
-public class XenServerPoolVms {
- private static final Logger s_logger = Logger.getLogger(XenServerPoolVms.class);
- private final Map<String/* clusterId */, HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>>> _clusterVms =
- new ConcurrentHashMap<String, HashMap<String, Pair<String, State>>>();
-
- public HashMap<String, Pair<String, State>> getClusterVmState(String clusterId) {
- HashMap<String, Pair<String, State>> _vms = _clusterVms.get(clusterId);
- if (_vms == null) {
- HashMap<String, Pair<String, State>> vmStates = new HashMap<String, Pair<String, State>>();
- _clusterVms.put(clusterId, vmStates);
- return vmStates;
- } else
- return _vms;
- }
-
- public void clear(String clusterId) {
- HashMap<String, Pair<String, State>> _vms = getClusterVmState(clusterId);
- _vms.clear();
- }
-
- public State getState(String clusterId, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- Pair<String, State> pv = vms.get(name);
- return pv == null ? State.Stopped : pv.second(); // if a VM is absent on the cluster, it is effectively in stopped state.
- }
-
- public Pair<String, State> get(String clusterId, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- return vms.get(name);
- }
-
- public void put(String clusterId, String hostUuid, String name, State state) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.put(name, new Pair<String, State>(hostUuid, state));
- }
-
- public void remove(String clusterId, String hostUuid, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.remove(name);
- }
-
- public void putAll(String clusterId, HashMap<String, Pair<String, State>> newVms) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.putAll(newVms);
- }
-
- public int size(String clusterId) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- return vms.size();
- }
-
- @Override
- public String toString() {
- StringBuilder sbuf = new StringBuilder("PoolVms=");
- for (HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>> clusterVM : _clusterVms.values()) {
- for (String vmname : clusterVM.keySet()) {
- sbuf.append(vmname).append("-").append(clusterVM.get(vmname).second()).append(",");
- }
- }
- return sbuf.toString();
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java
deleted file mode 100644
index e326770..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java
+++ /dev/null
@@ -1,1699 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import static com.cloud.utils.ReflectUtil.flattenProperties;
-import static com.google.common.collect.Lists.newArrayList;
-
-import java.io.File;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-import org.apache.cloudstack.storage.command.AttachAnswer;
-import org.apache.cloudstack.storage.command.AttachCommand;
-import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreAnswer;
-import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd;
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.CreateObjectAnswer;
-import org.apache.cloudstack.storage.command.CreateObjectCommand;
-import org.apache.cloudstack.storage.command.DeleteCommand;
-import org.apache.cloudstack.storage.command.DettachAnswer;
-import org.apache.cloudstack.storage.command.DettachCommand;
-import org.apache.cloudstack.storage.command.ForgetObjectCmd;
-import org.apache.cloudstack.storage.command.IntroduceObjectAnswer;
-import org.apache.cloudstack.storage.command.IntroduceObjectCmd;
-import org.apache.cloudstack.storage.datastore.protocol.DataStoreProtocol;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.CreateStoragePoolCommand;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.DiskTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.S3TO;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.agent.api.to.SwiftTO;
-import com.cloud.exception.InternalErrorException;
-import com.cloud.hypervisor.xen.resource.CitrixResourceBase.SRType;
-import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.resource.StorageProcessor;
-import com.cloud.utils.S3Utils;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.storage.encoding.DecodedDataObject;
-import com.cloud.utils.storage.encoding.DecodedDataStore;
-import com.cloud.utils.storage.encoding.Decoder;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.PBD;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.BadServerResponse;
-import com.xensource.xenapi.Types.VmPowerState;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VM;
-import com.xensource.xenapi.VMGuestMetrics;
-
-public class XenServerStorageProcessor implements StorageProcessor {
- private static final Logger s_logger = Logger.getLogger(XenServerStorageProcessor.class);
- protected CitrixResourceBase hypervisorResource;
- protected String BaseMountPointOnHost = "/var/run/cloud_mount";
-
- public XenServerStorageProcessor(CitrixResourceBase resource) {
- hypervisorResource = resource;
- }
-
- @Override
- public AttachAnswer attachIso(AttachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- DataTO data = disk.getData();
- DataStoreTO store = data.getDataStore();
-
- String isoURL = null;
- if (store == null) {
- TemplateObjectTO iso = (TemplateObjectTO) disk.getData();
- isoURL = iso.getName();
- } else {
- if (!(store instanceof NfsTO)) {
- s_logger.debug("Can't attach a iso which is not created on nfs: ");
- return new AttachAnswer("Can't attach a iso which is not created on nfs: ");
- }
- NfsTO nfsStore = (NfsTO) store;
- isoURL = nfsStore.getUrl() + File.separator + data.getPath();
- }
-
- String vmName = cmd.getVmName();
- try {
- Connection conn = hypervisorResource.getConnection();
-
- VBD isoVBD = null;
-
- // Find the VM
- VM vm = hypervisorResource.getVM(conn, vmName);
- // Find the ISO VDI
- VDI isoVDI = hypervisorResource.getIsoVDIByURL(conn, vmName, isoURL);
-
- // Find the VM's CD-ROM VBD
- Set<VBD> vbds = vm.getVBDs(conn);
- for (VBD vbd : vbds) {
- String userDevice = vbd.getUserdevice(conn);
- Types.VbdType type = vbd.getType(conn);
-
- if (userDevice.equals("3") && type == Types.VbdType.CD) {
- isoVBD = vbd;
- break;
- }
- }
-
- if (isoVBD == null) {
- throw new CloudRuntimeException("Unable to find CD-ROM VBD for VM: " + vmName);
- } else {
- // If an ISO is already inserted, eject it
- if (!isoVBD.getEmpty(conn)) {
- isoVBD.eject(conn);
- }
-
- // Insert the new ISO
- isoVBD.insert(conn, isoVDI);
- }
-
- return new AttachAnswer(disk);
-
- } catch (XenAPIException e) {
- s_logger.warn("Failed to attach iso" + ": " + e.toString(), e);
- return new AttachAnswer(e.toString());
- } catch (Exception e) {
- s_logger.warn("Failed to attach iso" + ": " + e.toString(), e);
- return new AttachAnswer(e.toString());
- }
- }
-
- @Override
- public AttachAnswer attachVolume(AttachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- DataTO data = disk.getData();
-
- try {
- String vmName = cmd.getVmName();
- String vdiNameLabel = vmName + "-DATA";
-
- Connection conn = this.hypervisorResource.getConnection();
- VM vm = null;
-
- boolean vmNotRunning = true;
-
- try {
- vm = this.hypervisorResource.getVM(conn, vmName);
-
- VM.Record vmr = vm.getRecord(conn);
-
- vmNotRunning = vmr.powerState != VmPowerState.RUNNING;
- } catch (CloudRuntimeException ex) {
- }
-
- Map<String, String> details = disk.getDetails();
- boolean isManaged = Boolean.parseBoolean(details.get(DiskTO.MANAGED));
-
- // if the VM is not running and we're not dealing with managed storage, just return success (nothing to do here)
- // this should probably never actually happen
- if (vmNotRunning && !isManaged) {
- return new AttachAnswer(disk);
- }
-
- VDI vdi = null;
-
- if (isManaged) {
- vdi = hypervisorResource.prepareManagedStorage(conn, details, data.getPath(), vdiNameLabel);
-
- if (vmNotRunning) {
- DiskTO newDisk = new DiskTO(disk.getData(), disk.getDiskSeq(), vdi.getUuid(conn), disk.getType());
-
- return new AttachAnswer(newDisk);
- }
- } else {
- vdi = hypervisorResource.mount(conn, null, null, data.getPath());
- }
-
- /* For HVM guest, if no pv driver installed, no attach/detach */
- boolean isHVM = vm.getPVBootloader(conn).equalsIgnoreCase("");
-
- VMGuestMetrics vgm = vm.getGuestMetrics(conn);
- boolean pvDrvInstalled = false;
-
- if (!this.hypervisorResource.isRefNull(vgm) && vgm.getPVDriversUpToDate(conn)) {
- pvDrvInstalled = true;
- }
-
- if (isHVM && !pvDrvInstalled) {
- s_logger.warn(": You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected");
-
- return new AttachAnswer("You attempted an operation that requires PV drivers to be installed on the VM. Please install them by inserting xen-pv-drv.iso.");
- }
-
- // Figure out the disk number to attach the VM to
- String diskNumber = null;
- Long deviceId = disk.getDiskSeq();
-
- if (deviceId != null) {
- if (deviceId.longValue() == 3) {
- String msg = "Device 3 is reserved for CD-ROM, choose other device";
-
- return new AttachAnswer(msg);
- }
-
- if (hypervisorResource.isDeviceUsed(conn, vm, deviceId)) {
- String msg = "Device " + deviceId + " is used in VM " + vmName;
-
- return new AttachAnswer(msg);
- }
-
- diskNumber = deviceId.toString();
- } else {
- diskNumber = hypervisorResource.getUnusedDeviceNum(conn, vm);
- }
-
- VBD.Record vbdr = new VBD.Record();
-
- vbdr.VM = vm;
- vbdr.VDI = vdi;
- vbdr.bootable = false;
- vbdr.userdevice = diskNumber;
- vbdr.mode = Types.VbdMode.RW;
- vbdr.type = Types.VbdType.DISK;
- vbdr.unpluggable = true;
-
- VBD vbd = VBD.create(conn, vbdr);
-
- // Attach the VBD to the VM
- vbd.plug(conn);
-
- // Update the VDI's label to include the VM name
- vdi.setNameLabel(conn, vdiNameLabel);
-
- DiskTO newDisk = new DiskTO(disk.getData(), Long.parseLong(diskNumber), vdi.getUuid(conn), disk.getType());
-
- return new AttachAnswer(newDisk);
- } catch (XenAPIException e) {
- String msg = "Failed to attach volume" + " for uuid: " + data.getPath() + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new AttachAnswer(msg);
- } catch (Exception e) {
- String msg = "Failed to attach volume" + " for uuid: " + data.getPath() + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new AttachAnswer(msg);
- }
- }
-
- @Override
- public Answer dettachIso(DettachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- DataTO data = disk.getData();
- DataStoreTO store = data.getDataStore();
-
- String isoURL = null;
- if (store == null) {
- TemplateObjectTO iso = (TemplateObjectTO) disk.getData();
- isoURL = iso.getName();
- } else {
- if (!(store instanceof NfsTO)) {
- s_logger.debug("Can't attach a iso which is not created on nfs: ");
- return new AttachAnswer("Can't attach a iso which is not created on nfs: ");
- }
- NfsTO nfsStore = (NfsTO) store;
- isoURL = nfsStore.getUrl() + File.separator + data.getPath();
- }
-
- try {
- Connection conn = hypervisorResource.getConnection();
- // Find the VM
- VM vm = hypervisorResource.getVM(conn, cmd.getVmName());
- String vmUUID = vm.getUuid(conn);
-
- // Find the ISO VDI
- VDI isoVDI = hypervisorResource.getIsoVDIByURL(conn, cmd.getVmName(), isoURL);
-
- SR sr = isoVDI.getSR(conn);
-
- // Look up all VBDs for this VDI
- Set<VBD> vbds = isoVDI.getVBDs(conn);
-
- // Iterate through VBDs, and if the VBD belongs the VM, eject
- // the ISO from it
- for (VBD vbd : vbds) {
- VM vbdVM = vbd.getVM(conn);
- String vbdVmUUID = vbdVM.getUuid(conn);
-
- if (vbdVmUUID.equals(vmUUID)) {
- // If an ISO is already inserted, eject it
- if (!vbd.getEmpty(conn)) {
- vbd.eject(conn);
- }
- break;
- }
- }
-
- if (!sr.getNameLabel(conn).startsWith("XenServer Tools")) {
- hypervisorResource.removeSR(conn, sr);
- }
-
- return new DettachAnswer(disk);
- } catch (XenAPIException e) {
- String msg = "Failed to dettach volume" + " for uuid: " + data.getPath() + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new DettachAnswer(msg);
- } catch (Exception e) {
- String msg = "Failed to dettach volume" + " for uuid: " + data.getPath() + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new DettachAnswer(msg);
- }
- }
-
- @Override
- public Answer dettachVolume(DettachCommand cmd) {
- DiskTO disk = cmd.getDisk();
- DataTO data = disk.getData();
-
- try {
- Connection conn = this.hypervisorResource.getConnection();
-
- String vmName = cmd.getVmName();
- VM vm = null;
-
- boolean vmNotRunning = true;
-
- try {
- vm = this.hypervisorResource.getVM(conn, vmName);
-
- VM.Record vmr = vm.getRecord(conn);
-
- vmNotRunning = vmr.powerState != VmPowerState.RUNNING;
- } catch (CloudRuntimeException ex) {
- }
-
- // if the VM is not running and we're not dealing with managed storage, just return success (nothing to do here)
- // this should probably never actually happen
- if (vmNotRunning && !cmd.isManaged()) {
- return new DettachAnswer(disk);
- }
-
- if (!vmNotRunning) {
- /* For HVM guest, if no pv driver installed, no attach/detach */
- boolean isHVM = vm.getPVBootloader(conn).equalsIgnoreCase("");
-
- VMGuestMetrics vgm = vm.getGuestMetrics(conn);
- boolean pvDrvInstalled = false;
-
- if (!this.hypervisorResource.isRefNull(vgm) && vgm.getPVDriversUpToDate(conn)) {
- pvDrvInstalled = true;
- }
-
- if (isHVM && !pvDrvInstalled) {
- s_logger.warn(": You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected");
- return new DettachAnswer("You attempted an operation that requires PV drivers to be installed on the VM. Please install them by inserting xen-pv-drv.iso.");
- }
-
- VDI vdi = this.hypervisorResource.mount(conn, null, null, data.getPath());
-
- // Look up all VBDs for this VDI
- Set<VBD> vbds = vdi.getVBDs(conn);
-
- // Detach each VBD from its VM, and then destroy it
- for (VBD vbd : vbds) {
- VBD.Record vbdr = vbd.getRecord(conn);
-
- if (vbdr.currentlyAttached) {
- vbd.unplug(conn);
- }
-
- vbd.destroy(conn);
- }
-
- // Update the VDI's label to be "detached"
- vdi.setNameLabel(conn, "detached");
-
- this.hypervisorResource.umount(conn, vdi);
- }
-
- if (cmd.isManaged()) {
- hypervisorResource.handleSrAndVdiDetach(cmd.get_iScsiName(), conn);
- }
-
- return new DettachAnswer(disk);
- } catch (Exception e) {
- s_logger.warn("Failed dettach volume: " + data.getPath());
- return new DettachAnswer("Failed dettach volume: " + data.getPath() + ", due to " + e.toString());
- }
- }
-
- protected SR getSRByNameLabel(Connection conn, String nameLabel) throws BadServerResponse, XenAPIException, XmlRpcException {
- Set<SR> srs = SR.getByNameLabel(conn, nameLabel);
- if (srs.size() != 1) {
- throw new CloudRuntimeException("storage uuid: " + nameLabel + " is not unique");
- }
- SR poolsr = srs.iterator().next();
- return poolsr;
- }
-
- protected VDI createVdi(Connection conn, String vdiName, SR sr, long size) throws BadServerResponse, XenAPIException, XmlRpcException {
- VDI.Record vdir = new VDI.Record();
- vdir.nameLabel = vdiName;
- vdir.SR = sr;
- vdir.type = Types.VdiType.USER;
-
- vdir.virtualSize = size;
- VDI vdi = VDI.create(conn, vdir);
- return vdi;
- }
-
- protected void deleteVDI(Connection conn, VDI vdi) throws BadServerResponse, XenAPIException, XmlRpcException {
- vdi.destroy(conn);
- }
-
- @Override
- public Answer createSnapshot(CreateObjectCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- SnapshotObjectTO snapshotTO = (SnapshotObjectTO) cmd.getData();
- long snapshotId = snapshotTO.getId();
- String snapshotName = snapshotTO.getName();
- String details = "create snapshot operation Failed for snapshotId: " + snapshotId;
- String snapshotUUID = null;
-
- try {
- String volumeUUID = snapshotTO.getVolume().getPath();
- VDI volume = VDI.getByUuid(conn, volumeUUID);
-
- VDI snapshot = volume.snapshot(conn, new HashMap<String, String>());
-
- if (snapshotName != null) {
- snapshot.setNameLabel(conn, snapshotName);
- }
-
- snapshotUUID = snapshot.getUuid(conn);
- String preSnapshotUUID = snapshotTO.getParentSnapshotPath();
- //check if it is a empty snapshot
- if (preSnapshotUUID != null) {
- SR sr = volume.getSR(conn);
- String srUUID = sr.getUuid(conn);
- String type = sr.getType(conn);
- Boolean isISCSI = IsISCSI(type);
- String snapshotParentUUID = getVhdParent(conn, srUUID, snapshotUUID, isISCSI);
-
- try {
- String preSnapshotParentUUID = getVhdParent(conn, srUUID, preSnapshotUUID, isISCSI);
- if (snapshotParentUUID != null && snapshotParentUUID.equals(preSnapshotParentUUID)) {
- // this is empty snapshot, remove it
- snapshot.destroy(conn);
- snapshotUUID = preSnapshotUUID;
- }
- } catch (Exception e) {
- s_logger.debug("Failed to get parent snapshot", e);
- }
- }
- SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
- newSnapshot.setPath(snapshotUUID);
- return new CreateObjectAnswer(newSnapshot);
- } catch (XenAPIException e) {
- details += ", reason: " + e.toString();
- s_logger.warn(details, e);
- } catch (Exception e) {
- details += ", reason: " + e.toString();
- s_logger.warn(details, e);
- }
-
- return new CreateObjectAnswer(details);
- }
-
- @Override
- public Answer deleteVolume(DeleteCommand cmd) {
- DataTO volume = cmd.getData();
- Connection conn = hypervisorResource.getConnection();
- String errorMsg = null;
- try {
- VDI vdi = VDI.getByUuid(conn, volume.getPath());
- deleteVDI(conn, vdi);
- return new Answer(null);
- } catch (BadServerResponse e) {
- s_logger.debug("Failed to delete volume", e);
- errorMsg = e.toString();
- } catch (XenAPIException e) {
- s_logger.debug("Failed to delete volume", e);
- errorMsg = e.toString();
- } catch (XmlRpcException e) {
- s_logger.debug("Failed to delete volume", e);
- errorMsg = e.toString();
- }
- return new Answer(null, false, errorMsg);
- }
-
- protected SR getNfsSR(Connection conn, StorageFilerTO pool) {
- Map<String, String> deviceConfig = new HashMap<String, String>();
- try {
- String server = pool.getHost();
- String serverpath = pool.getPath();
- serverpath = serverpath.replace("//", "/");
- Set<SR> srs = SR.getAll(conn);
- for (SR sr : srs) {
- if (!SRType.NFS.equals(sr.getType(conn))) {
- continue;
- }
-
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds.isEmpty()) {
- continue;
- }
-
- PBD pbd = pbds.iterator().next();
-
- Map<String, String> dc = pbd.getDeviceConfig(conn);
-
- if (dc == null) {
- continue;
- }
-
- if (dc.get("server") == null) {
- continue;
- }
-
- if (dc.get("serverpath") == null) {
- continue;
- }
-
- if (server.equals(dc.get("server")) && serverpath.equals(dc.get("serverpath"))) {
- throw new CloudRuntimeException("There is a SR using the same configuration server:" + dc.get("server") + ", serverpath:" + dc.get("serverpath") +
- " for pool " + pool.getUuid() + "on host:" + hypervisorResource.getHost().uuid);
- }
-
- }
- deviceConfig.put("server", server);
- deviceConfig.put("serverpath", serverpath);
- Host host = Host.getByUuid(conn, hypervisorResource.getHost().uuid);
- Map<String, String> smConfig = new HashMap<String, String>();
- smConfig.put("nosubdir", "true");
- SR sr = SR.create(conn, host, deviceConfig, new Long(0), pool.getUuid(), Long.toString(pool.getId()), SRType.NFS.toString(), "user", true, smConfig);
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
- } catch (XmlRpcException e) {
- throw new CloudRuntimeException("Unable to create NFS SR " + pool.toString(), e);
- }
- }
-
- protected SR getIscsiSR(Connection conn, StorageFilerTO pool) {
- synchronized (pool.getUuid().intern()) {
- Map<String, String> deviceConfig = new HashMap<String, String>();
- try {
- String target = pool.getHost();
- String path = pool.getPath();
- if (path.endsWith("/")) {
- path = path.substring(0, path.length() - 1);
- }
-
- String tmp[] = path.split("/");
- if (tmp.length != 3) {
- String msg = "Wrong iscsi path " + pool.getPath() + " it should be /targetIQN/LUN";
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- String targetiqn = tmp[1].trim();
- String lunid = tmp[2].trim();
- String scsiid = "";
-
- Set<SR> srs = SR.getByNameLabel(conn, pool.getUuid());
- for (SR sr : srs) {
- if (!SRType.LVMOISCSI.equals(sr.getType(conn))) {
- continue;
- }
- Set<PBD> pbds = sr.getPBDs(conn);
- if (pbds.isEmpty()) {
- continue;
- }
- PBD pbd = pbds.iterator().next();
- Map<String, String> dc = pbd.getDeviceConfig(conn);
- if (dc == null) {
- continue;
- }
- if (dc.get("target") == null) {
- continue;
- }
- if (dc.get("targetIQN") == null) {
- continue;
- }
- if (dc.get("lunid") == null) {
- continue;
- }
- if (target.equals(dc.get("target")) && targetiqn.equals(dc.get("targetIQN")) && lunid.equals(dc.get("lunid"))) {
- throw new CloudRuntimeException("There is a SR using the same configuration target:" + dc.get("target") + ", targetIQN:" + dc.get("targetIQN") +
- ", lunid:" + dc.get("lunid") + " for pool " + pool.getUuid() + "on host:" + hypervisorResource.getHost().uuid);
- }
- }
- deviceConfig.put("target", target);
- deviceConfig.put("targetIQN", targetiqn);
-
- Host host = Host.getByUuid(conn, hypervisorResource.getHost().uuid);
- Map<String, String> smConfig = new HashMap<String, String>();
- String type = SRType.LVMOISCSI.toString();
- String poolId = Long.toString(pool.getId());
- SR sr = null;
- try {
- sr = SR.create(conn, host, deviceConfig, new Long(0), pool.getUuid(), poolId, type, "user", true, smConfig);
- } catch (XenAPIException e) {
- String errmsg = e.toString();
- if (errmsg.contains("SR_BACKEND_FAILURE_107")) {
- String lun[] = errmsg.split("<LUN>");
- boolean found = false;
- for (int i = 1; i < lun.length; i++) {
- int blunindex = lun[i].indexOf("<LUNid>") + 7;
- int elunindex = lun[i].indexOf("</LUNid>");
- String ilun = lun[i].substring(blunindex, elunindex);
- ilun = ilun.trim();
- if (ilun.equals(lunid)) {
- int bscsiindex = lun[i].indexOf("<SCSIid>") + 8;
- int escsiindex = lun[i].indexOf("</SCSIid>");
- scsiid = lun[i].substring(bscsiindex, escsiindex);
- scsiid = scsiid.trim();
- found = true;
- break;
- }
- }
- if (!found) {
- String msg = "can not find LUN " + lunid + " in " + errmsg;
- s_logger.warn(msg);
- throw new CloudRuntimeException(msg);
- }
- } else {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
- deviceConfig.put("SCSIid", scsiid);
-
- String result = SR.probe(conn, host, deviceConfig, type, smConfig);
- String pooluuid = null;
- if (result.indexOf("<UUID>") != -1) {
- pooluuid = result.substring(result.indexOf("<UUID>") + 6, result.indexOf("</UUID>")).trim();
- }
- if (pooluuid == null || pooluuid.length() != 36) {
- sr = SR.create(conn, host, deviceConfig, new Long(0), pool.getUuid(), poolId, type, "user", true, smConfig);
- } else {
- sr = SR.introduce(conn, pooluuid, pool.getUuid(), poolId, type, "user", true, smConfig);
- Pool.Record pRec = XenServerConnectionPool.getPoolRecord(conn);
- PBD.Record rec = new PBD.Record();
- rec.deviceConfig = deviceConfig;
- rec.host = pRec.master;
- rec.SR = sr;
- PBD pbd = PBD.create(conn, rec);
- pbd.plug(conn);
- }
- sr.scan(conn);
- return sr;
- } catch (XenAPIException e) {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- } catch (Exception e) {
- String msg = "Unable to create Iscsi SR " + deviceConfig + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
- }
-
- protected Answer execute(CreateStoragePoolCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- StorageFilerTO pool = cmd.getPool();
- try {
- if (pool.getType() == StoragePoolType.NetworkFilesystem) {
- getNfsSR(conn, pool);
- } else if (pool.getType() == StoragePoolType.IscsiLUN) {
- getIscsiSR(conn, pool);
- } else if (pool.getType() == StoragePoolType.PreSetup) {
- } else {
- return new Answer(cmd, false, "The pool type: " + pool.getType().name() + " is not supported.");
- }
- return new Answer(cmd, true, "success");
- } catch (Exception e) {
- String msg =
- "Catch Exception " + e.getClass().getName() + ", create StoragePool failed due to " + e.toString() + " on host:" +
- hypervisorResource.getHost().uuid + " pool: " + pool.getHost() + pool.getPath();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
-
- }
-
- protected Answer directDownloadHttpTemplate(CopyCommand cmd, DecodedDataObject srcObj, DecodedDataObject destObj) {
- Connection conn = hypervisorResource.getConnection();
- SR poolsr = null;
- VDI vdi = null;
- boolean result = false;
- try {
- if (destObj.getPath() == null) {
- //need to create volume at first
-
- }
- vdi = VDI.getByUuid(conn, destObj.getPath());
- if (vdi == null) {
- throw new CloudRuntimeException("can't find volume: " + destObj.getPath());
- }
- String destStoreUuid = destObj.getStore().getUuid();
- Set<SR> srs = SR.getByNameLabel(conn, destStoreUuid);
- if (srs.size() != 1) {
- throw new CloudRuntimeException("storage uuid: " + destStoreUuid + " is not unique");
- }
- poolsr = srs.iterator().next();
- VDI.Record vdir = vdi.getRecord(conn);
- String vdiLocation = vdir.location;
- String pbdLocation = null;
- if (destObj.getStore().getScheme().equalsIgnoreCase(DataStoreProtocol.NFS.toString())) {
- pbdLocation = "/run/sr-mount/" + poolsr.getUuid(conn);
- } else {
- Set<PBD> pbds = poolsr.getPBDs(conn);
- if (pbds.size() != 1) {
- throw new CloudRuntimeException("Don't how to handle multiple pbds:" + pbds.size() + " for sr: " + poolsr.getUuid(conn));
- }
- PBD pbd = pbds.iterator().next();
- Map<String, String> deviceCfg = pbd.getDeviceConfig(conn);
- pbdLocation = deviceCfg.get("location");
- }
- if (pbdLocation == null) {
- throw new CloudRuntimeException("Can't get pbd location");
- }
-
- String vdiPath = pbdLocation + "/" + vdiLocation + ".vhd";
- //download a url into vdipath
- //downloadHttpToLocalFile(vdiPath, template.getPath());
- hypervisorResource.callHostPlugin(conn, "storagePlugin", "downloadTemplateFromUrl", "destPath", vdiPath, "srcUrl", srcObj.getPath());
- result = true;
- //return new CopyCmdAnswer(cmd, vdi.getUuid(conn));
- } catch (BadServerResponse e) {
- s_logger.debug("Failed to download template", e);
- } catch (XenAPIException e) {
- s_logger.debug("Failed to download template", e);
- } catch (XmlRpcException e) {
- s_logger.debug("Failed to download template", e);
- } catch (Exception e) {
- s_logger.debug("Failed to download template", e);
- } finally {
- if (!result && vdi != null) {
- try {
- vdi.destroy(conn);
- } catch (BadServerResponse e) {
- s_logger.debug("Failed to cleanup newly created vdi");
- } catch (XenAPIException e) {
- s_logger.debug("Failed to cleanup newly created vdi");
- } catch (XmlRpcException e) {
- s_logger.debug("Failed to cleanup newly created vdi");
- }
- }
- }
- return new Answer(cmd, false, "Failed to download template");
- }
-
- protected Answer execute(AttachPrimaryDataStoreCmd cmd) {
- String dataStoreUri = cmd.getDataStore();
- Connection conn = hypervisorResource.getConnection();
- try {
- DecodedDataObject obj = Decoder.decode(dataStoreUri);
-
- DecodedDataStore store = obj.getStore();
-
- SR sr = hypervisorResource.getStorageRepository(conn, store.getUuid());
- hypervisorResource.setupHeartbeatSr(conn, sr, false);
- long capacity = sr.getPhysicalSize(conn);
- long available = capacity - sr.getPhysicalUtilisation(conn);
- if (capacity == -1) {
- String msg = "Pool capacity is -1! pool: ";
- s_logger.warn(msg);
- return new Answer(cmd, false, msg);
- }
- AttachPrimaryDataStoreAnswer answer = new AttachPrimaryDataStoreAnswer(cmd);
- answer.setCapacity(capacity);
- answer.setUuid(sr.getUuid(conn));
- answer.setAvailable(available);
- return answer;
- } catch (XenAPIException e) {
- String msg = "AttachPrimaryDataStoreCmd add XenAPIException:" + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- } catch (Exception e) {
- String msg = "AttachPrimaryDataStoreCmd failed:" + e.getMessage();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
- }
-
- protected boolean IsISCSI(String type) {
- return SRType.LVMOHBA.equals(type) || SRType.LVMOISCSI.equals(type) || SRType.LVM.equals(type);
- }
-
- private String copy_vhd_from_secondarystorage(Connection conn, String mountpoint, String sruuid, int wait) {
- String nameLabel = "cloud-" + UUID.randomUUID().toString();
- String results =
- hypervisorResource.callHostPluginAsync(conn, "vmopspremium", "copy_vhd_from_secondarystorage", wait, "mountpoint", mountpoint, "sruuid", sruuid, "namelabel",
- nameLabel);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg = "copy_vhd_from_secondarystorage return null";
- } else {
- String[] tmp = results.split("#");
- String status = tmp[0];
- if (status.equals("0")) {
- return tmp[1];
- } else {
- errMsg = tmp[1];
- }
- }
- String source = mountpoint.substring(mountpoint.lastIndexOf('/') + 1);
- if (hypervisorResource.killCopyProcess(conn, source)) {
- destroyVDIbyNameLabel(conn, nameLabel);
- }
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
- private void destroyVDIbyNameLabel(Connection conn, String nameLabel) {
- try {
- Set<VDI> vdis = VDI.getByNameLabel(conn, nameLabel);
- if (vdis.size() != 1) {
- s_logger.warn("destoryVDIbyNameLabel failed due to there are " + vdis.size() + " VDIs with name " + nameLabel);
- return;
- }
- for (VDI vdi : vdis) {
- try {
- vdi.destroy(conn);
- } catch (Exception e) {
- }
- }
- } catch (Exception e) {
- }
- }
-
- protected VDI getVDIbyUuid(Connection conn, String uuid) {
- try {
- return VDI.getByUuid(conn, uuid);
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " :VDI getByUuid for uuid: " + uuid + " failed due to " + e.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e);
- }
- }
-
- protected String getVhdParent(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI) {
- String parentUuid =
- hypervisorResource.callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid,
- "isISCSI", isISCSI.toString());
-
- if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
- s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
- // errString is already logged.
- return null;
- }
- return parentUuid;
- }
-
- @Override
- public Answer copyTemplateToPrimaryStorage(CopyCommand cmd) {
- DataTO srcDataTo = cmd.getSrcTO();
- DataTO destDataTo = cmd.getDestTO();
- int wait = cmd.getWait();
- DataStoreTO srcDataStoreTo = srcDataTo.getDataStore();
-
- try {
- if ((srcDataStoreTo instanceof NfsTO) && (srcDataTo.getObjectType() == DataObjectType.TEMPLATE)) {
- NfsTO srcImageStore = (NfsTO) srcDataStoreTo;
- TemplateObjectTO srcTemplateObjectTo = (TemplateObjectTO) srcDataTo;
- String storeUrl = srcImageStore.getUrl();
- URI uri = new URI(storeUrl);
- String tmplPath = uri.getHost() + ":" + uri.getPath() + "/" + srcDataTo.getPath();
- DataStoreTO destDataStoreTo = destDataTo.getDataStore();
-
- boolean managed = false;
- String storageHost = null;
- String managedStoragePoolName = null;
- String managedStoragePoolRootVolumeName = null;
- String managedStoragePoolRootVolumeSize = null;
- String chapInitiatorUsername = null;
- String chapInitiatorSecret = null;
-
- if (destDataStoreTo instanceof PrimaryDataStoreTO) {
- PrimaryDataStoreTO destPrimaryDataStoreTo = (PrimaryDataStoreTO)destDataStoreTo;
-
- Map<String, String> details = destPrimaryDataStoreTo.getDetails();
-
- if (details != null) {
- managed = Boolean.parseBoolean(details.get(PrimaryDataStoreTO.MANAGED));
-
- if (managed) {
- storageHost = details.get(PrimaryDataStoreTO.STORAGE_HOST);
- managedStoragePoolName = details.get(PrimaryDataStoreTO.MANAGED_STORE_TARGET);
- managedStoragePoolRootVolumeName = details.get(PrimaryDataStoreTO.MANAGED_STORE_TARGET_ROOT_VOLUME);
- managedStoragePoolRootVolumeSize = details.get(PrimaryDataStoreTO.VOLUME_SIZE);
- chapInitiatorUsername = details.get(PrimaryDataStoreTO.CHAP_INITIATOR_USERNAME);
- chapInitiatorSecret = details.get(PrimaryDataStoreTO.CHAP_INITIATOR_SECRET);
- }
- }
- }
-
- Connection conn = hypervisorResource.getConnection();
-
- final SR sr;
-
- if (managed) {
- Map<String, String> details = new HashMap<String, String>();
-
- details.put(DiskTO.STORAGE_HOST, storageHost);
- details.put(DiskTO.IQN, managedStoragePoolName);
- details.put(DiskTO.VOLUME_SIZE, managedStoragePoolRootVolumeSize);
- details.put(DiskTO.CHAP_INITIATOR_USERNAME, chapInitiatorUsername);
- details.put(DiskTO.CHAP_INITIATOR_SECRET, chapInitiatorSecret);
-
- sr = hypervisorResource.prepareManagedSr(conn, details);
- } else {
- String srName = destDataStoreTo.getUuid();
- Set<SR> srs = SR.getByNameLabel(conn, srName);
-
- if (srs.size() != 1) {
- String msg = "There are " + srs.size() + " SRs with same name: " + srName;
-
- s_logger.warn(msg);
-
- return new CopyCmdAnswer(msg);
- } else {
- sr = srs.iterator().next();
- }
- }
-
- String srUuid = sr.getUuid(conn);
- String tmplUuid = copy_vhd_from_secondarystorage(conn, tmplPath, srUuid, wait);
- VDI tmplVdi = getVDIbyUuid(conn, tmplUuid);
-
- final String uuidToReturn;
-
- if (managed) {
- uuidToReturn = tmplUuid;
-
- tmplVdi.setNameLabel(conn, managedStoragePoolRootVolumeName);
- } else {
- VDI snapshotVdi = tmplVdi.snapshot(conn, new HashMap<String, String>());
-
- uuidToReturn = snapshotVdi.getUuid(conn);
-
- snapshotVdi.setNameLabel(conn, "Template " + srcTemplateObjectTo.getName());
-
- tmplVdi.destroy(conn);
- }
-
- sr.scan(conn);
-
- try {
- Thread.sleep(5000);
- } catch (Exception e) {
- }
-
- TemplateObjectTO newVol = new TemplateObjectTO();
-
- newVol.setUuid(uuidToReturn);
- newVol.setPath(uuidToReturn);
- newVol.setFormat(ImageFormat.VHD);
-
- return new CopyCmdAnswer(newVol);
- }
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " for template + " + " due to " + e.toString();
-
- s_logger.warn(msg, e);
-
- return new CopyCmdAnswer(msg);
- }
-
- return new CopyCmdAnswer("not implemented yet");
- }
-
- @Override
- public Answer createVolume(CreateObjectCommand cmd) {
- DataTO data = cmd.getData();
- VolumeObjectTO volume = (VolumeObjectTO) data;
-
- try {
- Connection conn = hypervisorResource.getConnection();
- SR poolSr = hypervisorResource.getStorageRepository(conn, data.getDataStore().getUuid());
- VDI.Record vdir = new VDI.Record();
- vdir.nameLabel = volume.getName();
- vdir.SR = poolSr;
- vdir.type = Types.VdiType.USER;
-
- vdir.virtualSize = volume.getSize();
- VDI vdi;
-
- vdi = VDI.create(conn, vdir);
- vdir = vdi.getRecord(conn);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setName(vdir.nameLabel);
- newVol.setSize(vdir.virtualSize);
- newVol.setPath(vdir.uuid);
-
- return new CreateObjectAnswer(newVol);
- } catch (Exception e) {
- s_logger.debug("create volume failed: " + e.toString());
- return new CreateObjectAnswer(e.toString());
- }
- }
-
- @Override
- public Answer cloneVolumeFromBaseTemplate(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- VolumeObjectTO volume = (VolumeObjectTO) destData;
- VDI vdi = null;
- try {
- VDI tmpltvdi = null;
-
- tmpltvdi = getVDIbyUuid(conn, srcData.getPath());
- vdi = tmpltvdi.createClone(conn, new HashMap<String, String>());
- vdi.setNameLabel(conn, volume.getName());
-
- VDI.Record vdir;
- vdir = vdi.getRecord(conn);
- s_logger.debug("Succesfully created VDI: Uuid = " + vdir.uuid);
-
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setName(vdir.nameLabel);
- newVol.setSize(vdir.virtualSize);
- newVol.setPath(vdir.uuid);
-
- return new CopyCmdAnswer(newVol);
- } catch (Exception e) {
- s_logger.warn("Unable to create volume; Pool=" + destData + "; Disk: ", e);
- return new CopyCmdAnswer(e.toString());
- }
- }
-
- @Override
- public Answer copyVolumeFromImageCacheToPrimary(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- VolumeObjectTO srcVolume = (VolumeObjectTO) srcData;
- VolumeObjectTO destVolume = (VolumeObjectTO) destData;
- DataStoreTO srcStore = srcVolume.getDataStore();
-
- if (srcStore instanceof NfsTO) {
- NfsTO nfsStore = (NfsTO) srcStore;
- try {
- SR primaryStoragePool = hypervisorResource.getStorageRepository(conn, destVolume.getDataStore().getUuid());
- String srUuid = primaryStoragePool.getUuid(conn);
- URI uri = new URI(nfsStore.getUrl());
- String volumePath = uri.getHost() + ":" + uri.getPath() + File.separator + srcVolume.getPath();
- String uuid = copy_vhd_from_secondarystorage(conn, volumePath, srUuid, wait);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(uuid);
- newVol.setSize(srcVolume.getSize());
-
- return new CopyCmdAnswer(newVol);
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new CopyCmdAnswer(e.toString());
- }
- }
-
- s_logger.debug("unsupported protocol");
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- @Override
- public Answer copyVolumeFromPrimaryToSecondary(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- VolumeObjectTO srcVolume = (VolumeObjectTO) cmd.getSrcTO();
- VolumeObjectTO destVolume = (VolumeObjectTO) cmd.getDestTO();
- int wait = cmd.getWait();
- DataStoreTO destStore = destVolume.getDataStore();
-
- if (destStore instanceof NfsTO) {
- SR secondaryStorage = null;
- try {
- NfsTO nfsStore = (NfsTO) destStore;
- URI uri = new URI(nfsStore.getUrl());
- // Create the volume folder
- if (!hypervisorResource.createSecondaryStorageFolder(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath())) {
- throw new InternalErrorException("Failed to create the volume folder.");
- }
-
- // Create a SR for the volume UUID folder
- secondaryStorage = hypervisorResource.createNfsSRbyURI(conn, new URI(nfsStore.getUrl() + File.separator + destVolume.getPath()), false);
- // Look up the volume on the source primary storage pool
- VDI srcVdi = getVDIbyUuid(conn, srcVolume.getPath());
- // Copy the volume to secondary storage
- VDI destVdi = hypervisorResource.cloudVDIcopy(conn, srcVdi, secondaryStorage, wait);
- String destVolumeUUID = destVdi.getUuid(conn);
-
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(destVolume.getPath() + File.separator + destVolumeUUID + ".vhd");
- newVol.setSize(srcVolume.getSize());
- return new CopyCmdAnswer(newVol);
- } catch (Exception e) {
- s_logger.debug("Failed to copy volume to secondary: " + e.toString());
- return new CopyCmdAnswer("Failed to copy volume to secondary: " + e.toString());
- } finally {
- hypervisorResource.removeSR(conn, secondaryStorage);
- }
- }
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- boolean swiftUpload(Connection conn, SwiftTO swift, String container, String ldir, String lfilename, Boolean isISCSI, int wait) {
- String result = null;
- try {
- result =
- hypervisorResource.callHostPluginAsync(conn, "swiftxen", "swift", wait, "op", "upload", "url", swift.getUrl(), "account", swift.getAccount(), "username",
- swift.getUserName(), "key", swift.getKey(), "container", container, "ldir", ldir, "lfilename", lfilename, "isISCSI", isISCSI.toString());
- if (result != null && result.equals("true")) {
- return true;
- }
- } catch (Exception e) {
- s_logger.warn("swift upload failed due to " + e.toString(), e);
- }
- return false;
- }
-
- protected String deleteSnapshotBackup(Connection conn, String localMountPoint, String path, String secondaryStorageMountPath, String backupUUID) {
-
- // If anybody modifies the formatting below again, I'll skin them
- String result =
- hypervisorResource.callHostPlugin(conn, "vmopsSnapshot", "deleteSnapshotBackup", "backupUUID", backupUUID, "path", path, "secondaryStorageMountPath",
- secondaryStorageMountPath, "localMountPoint", localMountPoint);
-
- return result;
- }
-
- public String swiftBackupSnapshot(Connection conn, SwiftTO swift, String srUuid, String snapshotUuid, String container, Boolean isISCSI, int wait) {
- String lfilename;
- String ldir;
- if (isISCSI) {
- ldir = "/dev/VG_XenStorage-" + srUuid;
- lfilename = "VHD-" + snapshotUuid;
- } else {
- ldir = "/var/run/sr-mount/" + srUuid;
- lfilename = snapshotUuid + ".vhd";
- }
- swiftUpload(conn, swift, container, ldir, lfilename, isISCSI, wait);
- return lfilename;
- }
-
- protected String backupSnapshotToS3(final Connection connection, final S3TO s3, final String srUuid, final String folder, final String snapshotUuid,
- final Boolean iSCSIFlag, final int wait) {
-
- final String filename = iSCSIFlag ? "VHD-" + snapshotUuid : snapshotUuid + ".vhd";
- final String dir = (iSCSIFlag ? "/dev/VG_XenStorage-" : "/var/run/sr-mount/") + srUuid;
- final String key = folder + "/" + filename; // String.format("/snapshots/%1$s", snapshotUuid);
-
- try {
-
- final List<String> parameters = newArrayList(flattenProperties(s3, S3Utils.ClientOptions.class));
- // https workaround for Introspector bug that does not
- // recognize Boolean accessor methods ...
-
- parameters.addAll(Arrays.asList("operation", "put", "filename", dir + "/" + filename, "iSCSIFlag", iSCSIFlag.toString(), "bucket", s3.getBucketName(), "key",
- key, "https", s3.isHttps() != null ? s3.isHttps().toString() : "null", "maxSingleUploadSizeInBytes", String.valueOf(s3.getMaxSingleUploadSizeInBytes())));
- final String result = hypervisorResource.callHostPluginAsync(connection, "s3xen", "s3", wait, parameters.toArray(new String[parameters.size()]));
-
- if (result != null && result.equals("true")) {
- return key;
- }
- return null;
-
- } catch (Exception e) {
- s_logger.error(String.format("S3 upload failed of snapshot %1$s due to %2$s.", snapshotUuid, e.toString()), e);
- }
-
- return null;
-
- }
-
- protected Long getSnapshotSize(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI, int wait) {
- String physicalSize = hypervisorResource.callHostPluginAsync(conn, "vmopsSnapshot", "getSnapshotSize", wait,
- "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI", isISCSI.toString());
- if (physicalSize == null || physicalSize.isEmpty()) {
- return (long) 0;
- } else {
- return Long.parseLong(physicalSize);
- }
- }
-
- protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, String localMountPoint, String path, String secondaryStorageMountPath,
- String snapshotUuid, String prevBackupUuid, Boolean isISCSI, int wait) {
- String backupSnapshotUuid = null;
-
- if (prevBackupUuid == null) {
- prevBackupUuid = "";
- }
-
- // Each argument is put in a separate line for readability.
- // Using more lines does not harm the environment.
- String backupUuid = UUID.randomUUID().toString();
- String results =
- hypervisorResource.callHostPluginAsync(conn, "vmopsSnapshot", "backupSnapshot", wait, "primaryStorageSRUuid", primaryStorageSRUuid, "path", path,
- "secondaryStorageMountPath", secondaryStorageMountPath, "snapshotUuid", snapshotUuid, "prevBackupUuid", prevBackupUuid, "backupUuid", backupUuid,
- "isISCSI", isISCSI.toString(), "localMountPoint", localMountPoint);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg =
- "Could not copy backupUuid: " + backupSnapshotUuid + " from primary storage " + primaryStorageSRUuid + " to secondary storage " +
- secondaryStorageMountPath + " due to null";
- } else {
-
- String[] tmp = results.split("#");
- String status = tmp[0];
- backupSnapshotUuid = tmp[1];
- // status == "1" if and only if backupSnapshotUuid != null
- // So we don't rely on status value but return backupSnapshotUuid as an
- // indicator of success.
- if (status != null && status.equalsIgnoreCase("1") && backupSnapshotUuid != null) {
- s_logger.debug("Successfully copied backupUuid: " + backupSnapshotUuid + " to secondary storage");
- return results;
- } else {
- errMsg =
- "Could not copy backupUuid: " + backupSnapshotUuid + " from primary storage " + primaryStorageSRUuid + " to secondary storage " +
- secondaryStorageMountPath + " due to " + tmp[1];
- }
- }
- String source = backupUuid + ".vhd";
- hypervisorResource.killCopyProcess(conn, source);
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
- protected boolean destroySnapshotOnPrimaryStorageExceptThis(Connection conn, String volumeUuid, String avoidSnapshotUuid) {
- try {
- VDI volume = getVDIbyUuid(conn, volumeUuid);
- if (volume == null) {
- throw new InternalErrorException("Could not destroy snapshot on volume " + volumeUuid + " due to can not find it");
- }
- Set<VDI> snapshots = volume.getSnapshots(conn);
- for (VDI snapshot : snapshots) {
- try {
- if (!snapshot.getUuid(conn).equals(avoidSnapshotUuid)) {
- snapshot.destroy(conn);
- }
- } catch (Exception e) {
- String msg = "Destroying snapshot: " + snapshot + " on primary storage failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- }
- s_logger.debug("Successfully destroyed snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid);
- return true;
- } catch (XenAPIException e) {
- String msg = "Destroying snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid + " failed due to " + e.toString();
- s_logger.error(msg, e);
- } catch (Exception e) {
- String msg = "Destroying snapshot on volume: " + volumeUuid + " execept this current snapshot " + avoidSnapshotUuid + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
-
- return false;
- }
-
- private boolean destroySnapshotOnPrimaryStorage(Connection conn, String lastSnapshotUuid) {
- try {
- VDI snapshot = getVDIbyUuid(conn, lastSnapshotUuid);
- if (snapshot == null) {
- // since this is just used to cleanup leftover bad snapshots, no need to throw exception
- s_logger.warn("Could not destroy snapshot " + lastSnapshotUuid + " due to can not find it");
- return false;
- }
- snapshot.destroy(conn);
- return true;
- } catch (XenAPIException e) {
- String msg = "Destroying snapshot: " + lastSnapshotUuid + " failed due to " + e.toString();
- s_logger.error(msg, e);
- } catch (Exception e) {
- String msg = "Destroying snapshot: " + lastSnapshotUuid + " failed due to " + e.toString();
- s_logger.warn(msg, e);
- }
- return false;
- }
-
- @Override
- public Answer backupSnapshot(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO cacheData = cmd.getCacheTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- String primaryStorageNameLabel = srcData.getDataStore().getUuid();
- String secondaryStorageUrl = null;
- NfsTO cacheStore = null;
- String destPath = null;
- if (cacheData != null) {
- cacheStore = (NfsTO) cacheData.getDataStore();
- secondaryStorageUrl = cacheStore.getUrl();
- destPath = cacheData.getPath();
- } else {
- cacheStore = (NfsTO) destData.getDataStore();
- secondaryStorageUrl = cacheStore.getUrl();
- destPath = destData.getPath();
- }
-
- SnapshotObjectTO snapshotTO = (SnapshotObjectTO) srcData;
- SnapshotObjectTO snapshotOnImage = (SnapshotObjectTO) destData;
- String snapshotUuid = snapshotTO.getPath();
- String volumeUuid = snapshotTO.getVolume().getPath();
-
- String prevBackupUuid = snapshotOnImage.getParentSnapshotPath();
- String prevSnapshotUuid = snapshotTO.getParentSnapshotPath();
-
- // By default assume failure
- String details = null;
- String snapshotBackupUuid = null;
- Long physicalSize = null;
- Map<String, String> options = cmd.getOptions();
- boolean fullbackup = Boolean.parseBoolean(options.get("fullSnapshot"));
- boolean result = false;
- try {
- SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
- if (primaryStorageSR == null) {
- throw new InternalErrorException("Could not backup snapshot because the primary Storage SR could not be created from the name label: " +
- primaryStorageNameLabel);
- }
- String psUuid = primaryStorageSR.getUuid(conn);
- Boolean isISCSI = IsISCSI(primaryStorageSR.getType(conn));
-
- VDI snapshotVdi = getVDIbyUuid(conn, snapshotUuid);
- String snapshotPaUuid = null;
-
- if (prevSnapshotUuid != null && !fullbackup) {
- try {
- snapshotPaUuid = getVhdParent(conn, psUuid, snapshotUuid, isISCSI);
- if (snapshotPaUuid != null) {
- String snashotPaPaPaUuid = getVhdParent(conn, psUuid, snapshotPaUuid, isISCSI);
- String prevSnashotPaUuid = getVhdParent(conn, psUuid, prevSnapshotUuid, isISCSI);
- if (snashotPaPaPaUuid != null && prevSnashotPaUuid != null && prevSnashotPaUuid.equals(snashotPaPaPaUuid)) {
- fullbackup = false;
- } else {
- fullbackup = true;
- }
- }
- } catch (Exception e) {
- s_logger.debug("Failed to get parent snapshots, take full snapshot", e);
- fullbackup = true;
- }
- }
-
- URI uri = new URI(secondaryStorageUrl);
- String secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
- DataStoreTO destStore = destData.getDataStore();
- String folder = destPath;
- String finalPath = null;
-
- String localMountPoint = BaseMountPointOnHost + File.separator + UUID.nameUUIDFromBytes(secondaryStorageUrl.getBytes()).toString();
- if (fullbackup) {
- // the first snapshot is always a full snapshot
-
- if (!hypervisorResource.createSecondaryStorageFolder(conn, secondaryStorageMountPath, folder)) {
- details = " Filed to create folder " + folder + " in secondary storage";
- s_logger.warn(details);
- return new CopyCmdAnswer(details);
- }
- String snapshotMountpoint = secondaryStorageUrl + "/" + folder;
- SR snapshotSr = null;
- try {
- snapshotSr = hypervisorResource.createNfsSRbyURI(conn, new URI(snapshotMountpoint), false);
- VDI backedVdi = hypervisorResource.cloudVDIcopy(conn, snapshotVdi, snapshotSr, wait);
- snapshotBackupUuid = backedVdi.getUuid(conn);
- String primarySRuuid = snapshotSr.getUuid(conn);
- physicalSize = getSnapshotSize(conn, primarySRuuid, snapshotBackupUuid, isISCSI, wait);
-
- if (destStore instanceof SwiftTO) {
- try {
- String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
- String destSnapshotName = swiftBackupSnapshot(conn, (SwiftTO) destStore, snapshotSr.getUuid(conn), snapshotBackupUuid, container, false, wait);
- String swiftPath = container + File.separator + destSnapshotName;
- finalPath = swiftPath;
- } finally {
- try {
- deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
- } catch (Exception e) {
- s_logger.debug("Failed to delete snapshot on cache storages", e);
- }
- }
-
- } else if (destStore instanceof S3TO) {
- try {
- finalPath = backupSnapshotToS3(conn, (S3TO) destStore, snapshotSr.getUuid(conn), folder, snapshotBackupUuid, isISCSI, wait);
- if (finalPath == null) {
- throw new CloudRuntimeException("S3 upload of snapshots " + snapshotBackupUuid + " failed");
- }
- } finally {
- try {
- deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
- } catch (Exception e) {
- s_logger.debug("Failed to delete snapshot on cache storages", e);
- }
- }
- // finalPath = folder + File.separator + snapshotBackupUuid;
- } else {
- finalPath = folder + File.separator + snapshotBackupUuid;
- }
-
- } finally {
- if (snapshotSr != null) {
- hypervisorResource.removeSR(conn, snapshotSr);
- }
- }
- } else {
- String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
- if (destStore instanceof SwiftTO) {
- String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
- snapshotBackupUuid =
- swiftBackupSnapshot(conn, (SwiftTO) destStore, primaryStorageSRUuid, snapshotPaUuid, "S-" + snapshotTO.getVolume().getVolumeId().toString(),
- isISCSI, wait);
- finalPath = container + File.separator + snapshotBackupUuid;
- } else if (destStore instanceof S3TO) {
- finalPath = backupSnapshotToS3(conn, (S3TO) destStore, primaryStorageSRUuid, folder, snapshotPaUuid, isISCSI, wait);
- if (finalPath == null) {
- throw new CloudRuntimeException("S3 upload of snapshots " + snapshotPaUuid + " failed");
- }
- } else {
- String results =
- backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder, secondaryStorageMountPath, snapshotUuid, prevBackupUuid, isISCSI, wait);
-
- String[] tmp = results.split("#");
- snapshotBackupUuid = tmp[1];
- physicalSize = Long.parseLong(tmp[2]);
- finalPath = folder + File.separator + snapshotBackupUuid;
- }
- }
- // delete primary snapshots with only the last one left
- destroySnapshotOnPrimaryStorageExceptThis(conn, volumeUuid, snapshotUuid);
-
- SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
- newSnapshot.setPath(finalPath);
- newSnapshot.setPhysicalSize(physicalSize);
- if (fullbackup) {
- newSnapshot.setParentSnapshotPath(null);
- } else {
- newSnapshot.setParentSnapshotPath(prevBackupUuid);
- }
- result = true;
- return new CopyCmdAnswer(newSnapshot);
- } catch (XenAPIException e) {
- details = "BackupSnapshot Failed due to " + e.toString();
- s_logger.warn(details, e);
- } catch (Exception e) {
- details = "BackupSnapshot Failed due to " + e.getMessage();
- s_logger.warn(details, e);
- } finally {
- if (!result) {
- // remove last bad primary snapshot when exception happens
- try {
- destroySnapshotOnPrimaryStorage(conn, snapshotUuid);
- } catch (Exception e) {
- s_logger.debug("clean up snapshot failed", e);
- }
- }
- }
-
- return new CopyCmdAnswer(details);
- }
-
- @Override
- public Answer createTemplateFromVolume(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- VolumeObjectTO volume = (VolumeObjectTO) cmd.getSrcTO();
- TemplateObjectTO template = (TemplateObjectTO) cmd.getDestTO();
- NfsTO destStore = (NfsTO) cmd.getDestTO().getDataStore();
- int wait = cmd.getWait();
-
- String secondaryStoragePoolURL = destStore.getUrl();
- String volumeUUID = volume.getPath();
-
- String userSpecifiedName = template.getName();
-
- String details = null;
- SR tmpltSR = null;
- boolean result = false;
- String secondaryStorageMountPath = null;
- String installPath = null;
- try {
- URI uri = new URI(secondaryStoragePoolURL);
- secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
- installPath = template.getPath();
- if (!hypervisorResource.createSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath)) {
- details = " Filed to create folder " + installPath + " in secondary storage";
- s_logger.warn(details);
- return new CopyCmdAnswer(details);
- }
-
- VDI vol = getVDIbyUuid(conn, volumeUUID);
- // create template SR
- URI tmpltURI = new URI(secondaryStoragePoolURL + "/" + installPath);
- tmpltSR = hypervisorResource.createNfsSRbyURI(conn, tmpltURI, false);
-
- // copy volume to template SR
- VDI tmpltVDI = hypervisorResource.cloudVDIcopy(conn, vol, tmpltSR, wait);
- // scan makes XenServer pick up VDI physicalSize
- tmpltSR.scan(conn);
- if (userSpecifiedName != null) {
- tmpltVDI.setNameLabel(conn, userSpecifiedName);
- }
-
- String tmpltUUID = tmpltVDI.getUuid(conn);
- String tmpltFilename = tmpltUUID + ".vhd";
- long virtualSize = tmpltVDI.getVirtualSize(conn);
- long physicalSize = tmpltVDI.getPhysicalUtilisation(conn);
- // create the template.properties file
- String templatePath = secondaryStorageMountPath + "/" + installPath;
- result =
- hypervisorResource.postCreatePrivateTemplate(conn, templatePath, tmpltFilename, tmpltUUID, userSpecifiedName, null, physicalSize, virtualSize,
- template.getId());
- if (!result) {
- throw new CloudRuntimeException("Could not create the template.properties file on secondary storage dir: " + tmpltURI);
- }
- installPath = installPath + "/" + tmpltFilename;
- hypervisorResource.removeSR(conn, tmpltSR);
- tmpltSR = null;
- TemplateObjectTO newTemplate = new TemplateObjectTO();
- newTemplate.setPath(installPath);
- newTemplate.setFormat(ImageFormat.VHD);
- newTemplate.setSize(virtualSize);
- newTemplate.setPhysicalSize(physicalSize);
- newTemplate.setName(tmpltUUID);
- CopyCmdAnswer answer = new CopyCmdAnswer(newTemplate);
- return answer;
- } catch (Exception e) {
- if (tmpltSR != null) {
- hypervisorResource.removeSR(conn, tmpltSR);
- }
- if (secondaryStorageMountPath != null) {
- hypervisorResource.deleteSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath);
- }
- details = "Creating template from volume " + volumeUUID + " failed due to " + e.toString();
- s_logger.error(details, e);
- }
- return new CopyCmdAnswer(details);
- }
-
- @Override
- public Answer createTemplateFromSnapshot(CopyCommand cmd) {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public Answer createVolumeFromSnapshot(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- SnapshotObjectTO snapshot = (SnapshotObjectTO) srcData;
- DataTO destData = cmd.getDestTO();
- DataStoreTO imageStore = srcData.getDataStore();
-
- if (!(imageStore instanceof NfsTO)) {
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- NfsTO nfsImageStore = (NfsTO) imageStore;
- String primaryStorageNameLabel = destData.getDataStore().getUuid();
- String secondaryStorageUrl = nfsImageStore.getUrl();
- int wait = cmd.getWait();
- boolean result = false;
- // Generic error message.
- String details = null;
- String volumeUUID = null;
-
- if (secondaryStorageUrl == null) {
- details += " because the URL passed: " + secondaryStorageUrl + " is invalid.";
- return new CopyCmdAnswer(details);
- }
- try {
- SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
- if (primaryStorageSR == null) {
- throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: " +
- primaryStorageNameLabel);
- }
- // Get the absolute path of the snapshot on the secondary storage.
- String snapshotInstallPath = snapshot.getPath();
- int index = snapshotInstallPath.lastIndexOf(File.separator);
- String snapshotName = snapshotInstallPath.substring(index + 1);
-
- if (!snapshotName.startsWith("VHD-") && !snapshotName.endsWith(".vhd")) {
- snapshotInstallPath = snapshotInstallPath + ".vhd";
- }
- URI snapshotURI = new URI(secondaryStorageUrl + File.separator + snapshotInstallPath);
- String snapshotPath = snapshotURI.getHost() + ":" + snapshotURI.getPath();
- String srUuid = primaryStorageSR.getUuid(conn);
- volumeUUID = copy_vhd_from_secondarystorage(conn, snapshotPath, srUuid, wait);
- result = true;
- VDI volume = VDI.getByUuid(conn, volumeUUID);
- VDI.Record vdir = volume.getRecord(conn);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(volumeUUID);
- newVol.setSize(vdir.virtualSize);
- return new CopyCmdAnswer(newVol);
- } catch (XenAPIException e) {
- details += " due to " + e.toString();
- s_logger.warn(details, e);
- } catch (Exception e) {
- details += " due to " + e.getMessage();
- s_logger.warn(details, e);
- }
- if (!result) {
- // Is this logged at a higher level?
- s_logger.error(details);
- }
-
- // In all cases return something.
- return new CopyCmdAnswer(details);
- }
-
- @Override
- public Answer deleteSnapshot(DeleteCommand cmd) {
- SnapshotObjectTO snapshot = (SnapshotObjectTO) cmd.getData();
- DataStoreTO store = snapshot.getDataStore();
- if (store.getRole() == DataStoreRole.Primary) {
- Connection conn = hypervisorResource.getConnection();
- VDI snapshotVdi = getVDIbyUuid(conn, snapshot.getPath());
- if (snapshotVdi == null) {
- return new Answer(null);
- }
- String errMsg = null;
- try {
- deleteVDI(conn, snapshotVdi);
- } catch (BadServerResponse e) {
- s_logger.debug("delete snapshot failed:" + e.toString());
- errMsg = e.toString();
- } catch (XenAPIException e) {
- s_logger.debug("delete snapshot failed:" + e.toString());
- errMsg = e.toString();
- } catch (XmlRpcException e) {
- s_logger.debug("delete snapshot failed:" + e.toString());
- errMsg = e.toString();
- }
- return new Answer(cmd, false, errMsg);
- }
- return new Answer(cmd, false, "unsupported storage type");
- }
-
- @Override
- public Answer introduceObject(IntroduceObjectCmd cmd) {
- try {
- Connection conn = hypervisorResource.getConnection();
- DataStoreTO store = cmd.getDataTO().getDataStore();
- SR poolSr = hypervisorResource.getStorageRepository(conn, store.getUuid());
- poolSr.scan(conn);
- return new IntroduceObjectAnswer(cmd.getDataTO());
- } catch (Exception e) {
- s_logger.debug("Failed to introduce object", e);
- return new Answer(cmd, false, e.toString());
- }
- }
-
- @Override
- public Answer forgetObject(ForgetObjectCmd cmd) {
- try {
- Connection conn = hypervisorResource.getConnection();
- DataTO data = cmd.getDataTO();
- VDI vdi = VDI.getByUuid(conn, data.getPath());
- vdi.forget(conn);
- return new IntroduceObjectAnswer(cmd.getDataTO());
- } catch (Exception e) {
- s_logger.debug("Failed to introduce object", e);
- return new Answer(cmd, false, e.toString());
- }
- }
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
deleted file mode 100644
index b1442de..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.VM;
-
-import org.apache.cloudstack.hypervisor.xenserver.XenServerResourceNewBase;
-
-import com.cloud.resource.ServerResource;
-import com.cloud.storage.resource.StorageSubsystemCommandHandler;
-import com.cloud.storage.resource.StorageSubsystemCommandHandlerBase;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-import com.cloud.utils.ssh.SSHCmdHelper;
-
-@Local(value=ServerResource.class)
-public class Xenserver625Resource extends XenServerResourceNewBase {
- private static final Logger s_logger = Logger.getLogger(Xenserver625Resource.class);
-
- public Xenserver625Resource() {
- super();
- }
-
- @Override
- protected String getGuestOsType(String stdType, boolean bootFromCD) {
- return CitrixHelper.getXenServer625GuestOsType(stdType, bootFromCD);
- }
-
- @Override
- protected List<File> getPatchFiles() {
- List<File> files = new ArrayList<File>();
- String patch = "scripts/vm/hypervisor/xenserver/xenserver62/patch";
- String patchfilePath = Script.findScript("", patch);
- if (patchfilePath == null) {
- throw new CloudRuntimeException("Unable to find patch file " + patch);
- }
- File file = new File(patchfilePath);
- files.add(file);
- return files;
- }
-
- @Override
- public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
- long recommendedValue = CitrixHelper.getXenServer625StaticMax(os, b);
- if(recommendedValue == 0){
- s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
- return dynamicMaxRam;
- }
- long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam); // XS constraint for stability
- if (dynamicMaxRam > staticMax){ // XS contraint that dynamic max <= static max
- s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax + ", can lead to stability issues. Setting static max as much as dynamic max ");
- return dynamicMaxRam;
- }
- return staticMax;
- }
-
- @Override
- public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
- long recommendedValue = CitrixHelper.getXenServer625StaticMin(os, b);
- if(recommendedValue == 0){
- s_logger.warn("No recommended value found for dynamic min");
- return dynamicMinRam;
- }
-
- if(dynamicMinRam < recommendedValue){ // XS contraint that dynamic min > static min
- s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
- }
- return dynamicMinRam;
- }
-
- @Override
- protected StorageSubsystemCommandHandler getStorageHandler() {
- XenServerStorageProcessor processor = new Xenserver625StorageProcessor(this);
- return new StorageSubsystemCommandHandlerBase(processor);
- }
-
- @Override
- protected void umountSnapshotDir(Connection conn, Long dcId) {
-
- }
-
- @Override
- protected boolean setupServer(Connection conn) {
- com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.ip, 22);
- try {
- sshConnection.connect(null, 60000, 60000);
- if (!sshConnection.authenticateWithPassword(_username, _password.peek())) {
- throw new CloudRuntimeException("Unable to authenticate");
- }
-
- String cmd = "rm -f /opt/xensource/sm/hostvmstats.py " +
- "/opt/xensource/bin/copy_vhd_to_secondarystorage.sh " +
- "/opt/xensource/bin/copy_vhd_from_secondarystorage.sh " +
- "/opt/xensource/bin/create_privatetemplate_from_snapshot.sh " +
- "/opt/xensource/bin/vhd-util " +
- "/opt/cloud/bin/copy_vhd_to_secondarystorage.sh " +
- "/opt/cloud/bin/copy_vhd_from_secondarystorage.sh " +
- "/opt/cloud/bin/create_privatetemplate_from_snapshot.sh " +
- "/opt/cloud/bin/vhd-util";
-
- SSHCmdHelper.sshExecuteCmd(sshConnection, cmd);
- } catch (Exception e) {
- s_logger.debug("Catch exception " + e.toString(), e);
- } finally {
- sshConnection.close();
- }
- return super.setupServer(conn);
- }
-
- @Override
- protected String revertToSnapshot(Connection conn, VM vmSnapshot,
- String vmName, String oldVmUuid, Boolean snapshotMemory, String hostUUID)
- throws Types.XenAPIException, XmlRpcException {
-
- String results = callHostPluginAsync(conn, "cloud-plugin-storage",
- "revert_memory_snapshot", 10 * 60 * 1000, "snapshotUUID",
- vmSnapshot.getUuid(conn), "vmName", vmName, "oldVmUuid",
- oldVmUuid, "snapshotMemory", snapshotMemory.toString(), "hostUUID", hostUUID);
- String errMsg = null;
- if (results == null || results.isEmpty()) {
- errMsg = "revert_memory_snapshot return null";
- } else {
- if (results.equals("0")) {
- return results;
- } else {
- errMsg = "revert_memory_snapshot exception";
- }
- }
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625StorageProcessor.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625StorageProcessor.java
deleted file mode 100644
index 4906c35..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625StorageProcessor.java
+++ /dev/null
@@ -1,822 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.S3TO;
-import com.cloud.agent.api.to.SwiftTO;
-import com.cloud.exception.InternalErrorException;
-import com.cloud.storage.Storage;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.PBD;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.VDI;
-
-public class Xenserver625StorageProcessor extends XenServerStorageProcessor {
- private static final Logger s_logger = Logger.getLogger(XenServerStorageProcessor.class);
-
- public Xenserver625StorageProcessor(CitrixResourceBase resource) {
- super(resource);
- }
- protected boolean mountNfs(Connection conn, String remoteDir, String localDir) {
- if (localDir == null) {
- localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remoteDir.getBytes());
- }
- String results = hypervisorResource.callHostPluginAsync(conn, "cloud-plugin-storage", "mountNfsSecondaryStorage", 100 * 1000,
- "localDir", localDir, "remoteDir", remoteDir);
- if (results == null || results.isEmpty()) {
- String errMsg = "Could not mount secondary storage " + remoteDir + " on host ";
- s_logger.warn(errMsg);
- throw new CloudRuntimeException(errMsg);
- }
- return true;
- }
-
- protected boolean makeDirectory(Connection conn, String path) {
- String result = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "makeDirectory", "path", path);
- if (result == null || result.isEmpty()) {
- return false;
- }
- return true;
- }
-
- protected SR createFileSR(Connection conn, String path) {
- SR sr = null;
- PBD pbd = null;
- try {
- Map<String, String> smConfig = new HashMap<String, String>();
- Host host = Host.getByUuid(conn, hypervisorResource.getHost().uuid);
- String uuid = UUID.randomUUID().toString();
-
- sr = SR.introduce(conn,uuid, uuid, uuid, "file", "file", false, smConfig);
- PBD.Record record = new PBD.Record();
- record.host = host;
- record.SR = sr;
- smConfig.put("location", path);
- record.deviceConfig = smConfig;
- pbd = PBD.create(conn, record);
- pbd.plug(conn);
- sr.scan(conn);
- return sr;
- } catch (Exception e) {
- try {
- if (pbd != null) {
- pbd.destroy(conn);
- }
- } catch (Exception e1) {
- s_logger.debug("Failed to destroy pbd", e);
- }
- try {
- if (sr != null) {
- sr.forget(conn);
- }
- } catch (Exception e2) {
- s_logger.error("Failed to forget sr", e);
- }
- String msg = "createFileSR failed! due to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg, e);
- }
- }
-
- protected SR createFileSr(Connection conn, String remotePath, String dir) {
- String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remotePath.getBytes());
- mountNfs(conn, remotePath, localDir);
- SR sr = createFileSR(conn, localDir + "/" + dir);
- return sr;
- }
-
- @Override
- public Answer copyTemplateToPrimaryStorage(CopyCommand cmd) {
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- DataStoreTO srcStore = srcData.getDataStore();
- Connection conn = hypervisorResource.getConnection();
- SR srcSr = null;
- try {
- if ((srcStore instanceof NfsTO) && (srcData.getObjectType() == DataObjectType.TEMPLATE)) {
- NfsTO srcImageStore = (NfsTO)srcStore;
- TemplateObjectTO srcTemplate = (TemplateObjectTO)srcData;
- String storeUrl = srcImageStore.getUrl();
- URI uri = new URI(storeUrl);
- String volumePath = srcData.getPath();
- volumePath = StringUtils.stripEnd(volumePath, "/");
- String[] splits = volumePath.split("/");
- String volumeDirectory = volumePath;
- if (splits.length > 4) {
- //"template/tmpl/dcid/templateId/templatename"
- int index = volumePath.lastIndexOf("/");
- volumeDirectory = volumePath.substring(0, index);
- }
- srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), volumeDirectory);
- Set<VDI> vdis = srcSr.getVDIs(conn);
- if (vdis.size() != 1) {
- return new CopyCmdAnswer("Can't find template VDI under: " + uri.getHost() + ":" + uri.getPath() + "/" + volumeDirectory);
- }
-
- VDI srcVdi = vdis.iterator().next();
-
- PrimaryDataStoreTO destStore = (PrimaryDataStoreTO)destData.getDataStore();
- String poolName = destStore.getUuid();
-
-
- SR poolsr = null;
- Set<SR> srs = SR.getByNameLabel(conn, poolName);
- if (srs.size() != 1) {
- String msg = "There are " + srs.size() + " SRs with same name: " + poolName;
- s_logger.warn(msg);
- return new CopyCmdAnswer(msg);
- } else {
- poolsr = srs.iterator().next();
- }
- String pUuid = poolsr.getUuid(conn);
- boolean isISCSI = IsISCSI(poolsr.getType(conn));
- Task task = srcVdi.copyAsync(conn, poolsr, null, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- VDI tmpl = Types.toVDI(task, conn);
- VDI snapshotvdi = tmpl.snapshot(conn, new HashMap<String, String>());
- snapshotvdi.setNameLabel(conn, "Template " + srcTemplate.getName());
- tmpl.destroy(conn);
- poolsr.scan(conn);
- try{
- Thread.sleep(5000);
- } catch (Exception e) {
- }
-
- TemplateObjectTO newVol = new TemplateObjectTO();
- newVol.setUuid(snapshotvdi.getUuid(conn));
- newVol.setPath(newVol.getUuid());
- newVol.setFormat(Storage.ImageFormat.VHD);
- return new CopyCmdAnswer(newVol);
- }
- }catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " for template + " + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new CopyCmdAnswer(msg);
- } finally {
- if (srcSr != null) {
- hypervisorResource.removeSR(conn, srcSr);
- }
- }
- return new CopyCmdAnswer("not implemented yet");
- }
-
- protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, String localMountPoint, String path, String secondaryStorageMountPath, String snapshotUuid, String prevBackupUuid, String prevSnapshotUuid, Boolean isISCSI, int wait) {
- String errMsg = null;
- boolean mounted = false;
- boolean filesrcreated = false;
- boolean copied = false;
- if (prevBackupUuid == null) {
- prevBackupUuid = "";
- }
- SR ssSR = null;
-
- String remoteDir = secondaryStorageMountPath;
-
- try {
- ssSR = createFileSr(conn, remoteDir, path);
- filesrcreated = true;
-
- VDI snapshotvdi = VDI.getByUuid(conn, snapshotUuid);
- Task task = null;
- if (wait == 0) {
- wait = 2 * 60 * 60;
- }
- VDI dvdi = null;
- try {
- VDI previousSnapshotVdi = null;
- if (prevSnapshotUuid != null) {
- previousSnapshotVdi = VDI.getByUuid(conn,prevSnapshotUuid);
- }
- task = snapshotvdi.copyAsync(conn, ssSR, previousSnapshotVdi, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- dvdi = Types.toVDI(task, conn);
- copied = true;
- } finally {
- if (task != null) {
- try {
- task.destroy(conn);
- } catch (Exception e1) {
- s_logger.warn("unable to destroy task(" + task.toString() + ") on host("
- + ") due to ", e1);
- }
- }
- }
- String backupUuid = dvdi.getUuid(conn);
- return backupUuid;
- } catch (Exception e) {
- String msg = "Exception in backupsnapshot stage due to " + e.toString();
- s_logger.debug(msg);
- throw new CloudRuntimeException(msg, e);
- } finally {
- try {
- if (filesrcreated && ssSR != null) {
- hypervisorResource.removeSR(conn, ssSR);
- }
- } catch (Exception e) {
- s_logger.debug("Exception in backupsnapshot cleanup stage due to " + e.toString());
- }
- }
- }
-
- @Override
- protected String getVhdParent(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI) {
- String parentUuid = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid,
- "snapshotUuid", snapshotUuid, "isISCSI", isISCSI.toString());
-
- if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
- s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
- // errString is already logged.
- return null;
- }
- return parentUuid;
- }
-
- @Override
- public Answer backupSnapshot(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO cacheData = cmd.getCacheTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)srcData.getDataStore();
- String primaryStorageNameLabel = primaryStore.getUuid();
- String secondaryStorageUrl = null;
- NfsTO cacheStore = null;
- String destPath = null;
- if (cacheData != null) {
- cacheStore = (NfsTO)cacheData.getDataStore();
- secondaryStorageUrl = cacheStore.getUrl();
- destPath = cacheData.getPath();
- } else {
- cacheStore = (NfsTO)destData.getDataStore();
- secondaryStorageUrl = cacheStore.getUrl();
- destPath = destData.getPath();
- }
-
- SnapshotObjectTO snapshotTO = (SnapshotObjectTO)srcData;
- SnapshotObjectTO snapshotOnImage = (SnapshotObjectTO)destData;
- String snapshotUuid = snapshotTO.getPath();
-
- String prevBackupUuid = snapshotOnImage.getParentSnapshotPath();
- String prevSnapshotUuid = snapshotTO.getParentSnapshotPath();
- Map<String, String> options = cmd.getOptions();
- // By default assume failure
- String details = null;
- String snapshotBackupUuid = null;
- boolean fullbackup = Boolean.parseBoolean(options.get("fullSnapshot"));
- try {
- SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
- if (primaryStorageSR == null) {
- throw new InternalErrorException("Could not backup snapshot because the primary Storage SR could not be created from the name label: " + primaryStorageNameLabel);
- }
- String psUuid = primaryStorageSR.getUuid(conn);
- Boolean isISCSI = IsISCSI(primaryStorageSR.getType(conn));
-
- VDI snapshotVdi = getVDIbyUuid(conn, snapshotUuid);
- String snapshotPaUuid = null;
-
- URI uri = new URI(secondaryStorageUrl);
- String secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
- DataStoreTO destStore = destData.getDataStore();
- String folder = destPath;
- String finalPath = null;
-
- String localMountPoint = BaseMountPointOnHost + File.separator + UUID.nameUUIDFromBytes(secondaryStorageUrl.getBytes()).toString();
- if (fullbackup) {
- SR snapshotSr = null;
- try {
- String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(secondaryStorageMountPath.getBytes());
- mountNfs(conn, secondaryStorageMountPath, localDir);
- boolean result = makeDirectory(conn, localDir + "/" + folder);
- if (!result) {
- details = " Filed to create folder " + folder + " in secondary storage";
- s_logger.warn(details);
- return new CopyCmdAnswer(details);
- }
-
- snapshotSr = createFileSr(conn, secondaryStorageMountPath, folder);
-
- Task task = snapshotVdi.copyAsync(conn, snapshotSr, null, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- VDI backedVdi = Types.toVDI(task, conn);
- snapshotBackupUuid = backedVdi.getUuid(conn);
-
- if( destStore instanceof SwiftTO) {
- try {
- String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
- String destSnapshotName = swiftBackupSnapshot(conn, (SwiftTO)destStore, snapshotSr.getUuid(conn), snapshotBackupUuid, container, false, wait);
- String swiftPath = container + File.separator + destSnapshotName;
- finalPath = swiftPath;
- } finally {
- try {
- deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
- } catch (Exception e) {
- s_logger.debug("Failed to delete snapshot on cache storages" ,e);
- }
- }
-
- } else if (destStore instanceof S3TO) {
- try {
- finalPath = backupSnapshotToS3(conn, (S3TO) destStore, snapshotSr.getUuid(conn), folder, snapshotBackupUuid, isISCSI, wait);
- if (finalPath == null) {
- throw new CloudRuntimeException("S3 upload of snapshots " + snapshotBackupUuid + " failed");
- }
- } finally {
- try {
- deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
- } catch (Exception e) {
- s_logger.debug("Failed to delete snapshot on cache storages" ,e);
- }
- }
- // finalPath = folder + File.separator + snapshotBackupUuid;
- } else {
- finalPath = folder + File.separator + snapshotBackupUuid;
- }
-
- } finally {
- if( snapshotSr != null) {
- hypervisorResource.removeSR(conn, snapshotSr);
- }
- }
- } else {
- String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
- if( destStore instanceof SwiftTO ) {
- String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
- snapshotBackupUuid = swiftBackupSnapshot(conn, (SwiftTO)destStore, primaryStorageSRUuid, snapshotPaUuid, "S-" + snapshotTO.getVolume().getVolumeId().toString(), isISCSI, wait);
- finalPath = container + File.separator + snapshotBackupUuid;
- } else if (destStore instanceof S3TO ) {
- finalPath = backupSnapshotToS3(conn, (S3TO) destStore, primaryStorageSRUuid, folder, snapshotPaUuid, isISCSI, wait);
- if (finalPath == null) {
- throw new CloudRuntimeException("S3 upload of snapshots " + snapshotPaUuid + " failed");
- }
- } else {
- snapshotBackupUuid = backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder,
- secondaryStorageMountPath, snapshotUuid, prevBackupUuid, prevSnapshotUuid, isISCSI, wait);
-
- finalPath = folder + File.separator + snapshotBackupUuid;
- }
- }
- String volumeUuid = snapshotTO.getVolume().getPath();
- destroySnapshotOnPrimaryStorageExceptThis(conn, volumeUuid, snapshotUuid);
-
- SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
- newSnapshot.setPath(finalPath);
- if (fullbackup) {
- newSnapshot.setParentSnapshotPath(null);
- } else {
- newSnapshot.setParentSnapshotPath(prevBackupUuid);
- }
- return new CopyCmdAnswer(newSnapshot);
- } catch (Types.XenAPIException e) {
- details = "BackupSnapshot Failed due to " + e.toString();
- s_logger.warn(details, e);
- } catch (Exception e) {
- details = "BackupSnapshot Failed due to " + e.getMessage();
- s_logger.warn(details, e);
- }
-
- return new CopyCmdAnswer(details);
- }
-
- @Override
- public Answer createTemplateFromVolume(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- VolumeObjectTO volume = (VolumeObjectTO)cmd.getSrcTO();
- TemplateObjectTO template = (TemplateObjectTO)cmd.getDestTO();
- NfsTO destStore = (NfsTO)cmd.getDestTO().getDataStore();
- int wait = cmd.getWait();
-
- String secondaryStoragePoolURL = destStore.getUrl();
- String volumeUUID = volume.getPath();
-
- String userSpecifiedName = template.getName();
-
-
- String details = null;
- SR tmpltSR = null;
- boolean result = false;
- String secondaryStorageMountPath = null;
- String installPath = null;
- try {
- URI uri = new URI(secondaryStoragePoolURL);
- secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
- installPath = template.getPath();
- if( !hypervisorResource.createSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath)) {
- details = " Filed to create folder " + installPath + " in secondary storage";
- s_logger.warn(details);
- return new CopyCmdAnswer(details);
- }
-
- VDI vol = getVDIbyUuid(conn, volumeUUID);
- // create template SR
- tmpltSR = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), installPath);
-
- // copy volume to template SR
- Task task = vol.copyAsync(conn, tmpltSR, null, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- VDI tmpltVDI = Types.toVDI(task, conn);
- // scan makes XenServer pick up VDI physicalSize
- tmpltSR.scan(conn);
- if (userSpecifiedName != null) {
- tmpltVDI.setNameLabel(conn, userSpecifiedName);
- }
-
- String tmpltUUID = tmpltVDI.getUuid(conn);
- String tmpltFilename = tmpltUUID + ".vhd";
- long virtualSize = tmpltVDI.getVirtualSize(conn);
- long physicalSize = tmpltVDI.getPhysicalUtilisation(conn);
- // create the template.properties file
- String templatePath = secondaryStorageMountPath + "/" + installPath;
- result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, tmpltFilename, tmpltUUID, userSpecifiedName, null, physicalSize, virtualSize, template.getId());
- if (!result) {
- throw new CloudRuntimeException("Could not create the template.properties file on secondary storage dir");
- }
- installPath = installPath + "/" + tmpltFilename;
- hypervisorResource.removeSR(conn, tmpltSR);
- tmpltSR = null;
- TemplateObjectTO newTemplate = new TemplateObjectTO();
- newTemplate.setPath(installPath);
- newTemplate.setFormat(Storage.ImageFormat.VHD);
- newTemplate.setSize(virtualSize);
- newTemplate.setPhysicalSize(physicalSize);
- newTemplate.setName(tmpltUUID);
- CopyCmdAnswer answer = new CopyCmdAnswer(newTemplate);
- return answer;
- } catch (Exception e) {
- if (tmpltSR != null) {
- hypervisorResource.removeSR(conn, tmpltSR);
- }
- if ( secondaryStorageMountPath != null) {
- hypervisorResource.deleteSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath);
- }
- details = "Creating template from volume " + volumeUUID + " failed due to " + e.toString();
- s_logger.error(details, e);
- }
- return new CopyCmdAnswer(details);
- }
-
- protected String getSnapshotUuid(String snapshotPath) {
- int index = snapshotPath.lastIndexOf(File.separator);
- String snapshotUuid = snapshotPath.substring(index + 1);
- index = snapshotUuid.lastIndexOf(".");
- if (index != -1) {
- snapshotUuid = snapshotUuid.substring(0, index);
- }
- return snapshotUuid;
- }
-
- @Override
- public Answer createVolumeFromSnapshot(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
- DataTO destData = cmd.getDestTO();
- PrimaryDataStoreTO pool = (PrimaryDataStoreTO)destData.getDataStore();
- VolumeObjectTO volume = (VolumeObjectTO)destData;
- DataStoreTO imageStore = srcData.getDataStore();
-
- if (!(imageStore instanceof NfsTO)) {
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- NfsTO nfsImageStore = (NfsTO)imageStore;
- String primaryStorageNameLabel = pool.getUuid();
- String secondaryStorageUrl = nfsImageStore.getUrl();
- int wait = cmd.getWait();
- boolean result = false;
- // Generic error message.
- String details = null;
- String volumeUUID = null;
-
- if (secondaryStorageUrl == null) {
- details += " because the URL passed: " + secondaryStorageUrl + " is invalid.";
- return new CopyCmdAnswer(details);
- }
- SR srcSr = null;
- VDI destVdi = null;
- try {
- SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
- if (primaryStorageSR == null) {
- throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: "
- + primaryStorageNameLabel);
- }
- String nameLabel = "cloud-" + UUID.randomUUID().toString();
- destVdi = createVdi(conn, nameLabel, primaryStorageSR, volume.getSize());
- volumeUUID = destVdi.getUuid(conn);
- String snapshotInstallPath = snapshot.getPath();
- int index = snapshotInstallPath.lastIndexOf(File.separator);
- String snapshotDirectory = snapshotInstallPath.substring(0, index);
- String snapshotUuid = getSnapshotUuid(snapshotInstallPath);
-
- URI uri = new URI(secondaryStorageUrl);
- srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), snapshotDirectory);
-
- String[] parents = snapshot.getParents();
- List<VDI> snapshotChains = new ArrayList<VDI>();
- if (parents != null) {
- for(int i = 0; i < parents.length; i++) {
- String snChainPath = parents[i];
- String uuid = getSnapshotUuid(snChainPath);
- VDI chain = VDI.getByUuid(conn, uuid);
- snapshotChains.add(chain);
- }
- }
-
- VDI snapshotVdi = VDI.getByUuid(conn, snapshotUuid);
- snapshotChains.add(snapshotVdi);
-
- for(VDI snapChain : snapshotChains) {
- Task task = snapChain.copyAsync(conn, null, null, destVdi);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- }
-
- result = true;
- destVdi = VDI.getByUuid(conn, volumeUUID);
- VDI.Record vdir = destVdi.getRecord(conn);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(volumeUUID);
- newVol.setSize(vdir.virtualSize);
- return new CopyCmdAnswer(newVol);
- } catch (Types.XenAPIException e) {
- details += " due to " + e.toString();
- s_logger.warn(details, e);
- } catch (Exception e) {
- details += " due to " + e.getMessage();
- s_logger.warn(details, e);
- } finally {
- if (srcSr != null) {
- hypervisorResource.removeSR(conn, srcSr);
- }
- if (!result && destVdi != null) {
- try {
- destVdi.destroy(conn);
- } catch (Exception e) {
- s_logger.debug("destroy dest vdi failed", e);
- }
- }
- }
- if (!result) {
- // Is this logged at a higher level?
- s_logger.error(details);
- }
-
- // In all cases return something.
- return new CopyCmdAnswer(details);
- }
-
- @Override
- public Answer copyVolumeFromPrimaryToSecondary(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- VolumeObjectTO srcVolume = (VolumeObjectTO)cmd.getSrcTO();
- VolumeObjectTO destVolume = (VolumeObjectTO)cmd.getDestTO();
- int wait = cmd.getWait();
- DataStoreTO destStore = destVolume.getDataStore();
-
- if (destStore instanceof NfsTO) {
- SR secondaryStorage = null;
- try {
- NfsTO nfsStore = (NfsTO)destStore;
- URI uri = new URI(nfsStore.getUrl());
- // Create the volume folder
- if (!hypervisorResource.createSecondaryStorageFolder(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath())) {
- throw new InternalErrorException("Failed to create the volume folder.");
- }
-
- // Create a SR for the volume UUID folder
- secondaryStorage = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath());
- // Look up the volume on the source primary storage pool
- VDI srcVdi = getVDIbyUuid(conn, srcVolume.getPath());
- // Copy the volume to secondary storage
- Task task = srcVdi.copyAsync(conn, secondaryStorage, null, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- VDI destVdi = Types.toVDI(task, conn);
- String destVolumeUUID = destVdi.getUuid(conn);
-
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(destVolume.getPath() + File.separator + destVolumeUUID + ".vhd");
- newVol.setSize(srcVolume.getSize());
- return new CopyCmdAnswer(newVol);
- } catch (Exception e) {
- s_logger.debug("Failed to copy volume to secondary: " + e.toString());
- return new CopyCmdAnswer("Failed to copy volume to secondary: " + e.toString());
- } finally {
- hypervisorResource.removeSR(conn, secondaryStorage);
- }
- }
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- @Override
- public Answer copyVolumeFromImageCacheToPrimary(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- VolumeObjectTO srcVolume = (VolumeObjectTO)srcData;
- VolumeObjectTO destVolume = (VolumeObjectTO)destData;
- PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)destVolume.getDataStore();
- DataStoreTO srcStore = srcVolume.getDataStore();
-
- if (srcStore instanceof NfsTO) {
- NfsTO nfsStore = (NfsTO)srcStore;
- String volumePath = srcVolume.getPath();
- int index = volumePath.lastIndexOf("/");
- String volumeDirectory = volumePath.substring(0, index);
- String volumeUuid = volumePath.substring(index + 1);
- index = volumeUuid.indexOf(".");
- if (index != -1) {
- volumeUuid = volumeUuid.substring(0, index);
- }
- URI uri = null;
- try {
- uri = new URI(nfsStore.getUrl());
- } catch (Exception e) {
- return new CopyCmdAnswer(e.toString());
- }
- SR srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), volumeDirectory);
- try {
- SR primaryStoragePool = hypervisorResource.getStorageRepository(conn, primaryStore.getUuid());
- VDI srcVdi = VDI.getByUuid(conn, volumeUuid);
- Task task = srcVdi.copyAsync(conn, primaryStoragePool, null, null);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- VDI destVdi = Types.toVDI(task, conn);
- VolumeObjectTO newVol = new VolumeObjectTO();
- newVol.setPath(destVdi.getUuid(conn));
- newVol.setSize(srcVolume.getSize());
-
- return new CopyCmdAnswer(newVol);
- } catch (Exception e) {
- String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new CopyCmdAnswer(e.toString());
- } finally {
- if (srcSr != null) {
- hypervisorResource.removeSR(conn, srcSr);
- }
- }
- }
-
- s_logger.debug("unsupported protocol");
- return new CopyCmdAnswer("unsupported protocol");
- }
-
- @Override
- public Answer createTemplateFromSnapshot(CopyCommand cmd) {
- Connection conn = hypervisorResource.getConnection();
- DataTO srcData = cmd.getSrcTO();
- DataTO destData = cmd.getDestTO();
- int wait = cmd.getWait();
- SnapshotObjectTO srcObj = (SnapshotObjectTO)srcData;
- TemplateObjectTO destObj = (TemplateObjectTO)destData;
- NfsTO srcStore = (NfsTO)srcObj.getDataStore();
- NfsTO destStore = (NfsTO)destObj.getDataStore();
-
- URI srcUri = null;
- URI destUri = null;
- try {
- srcUri = new URI(srcStore.getUrl());
- destUri = new URI(destStore.getUrl());
- } catch (Exception e) {
- s_logger.debug("incorrect url", e);
- return new CopyCmdAnswer("incorrect url" + e.toString());
- }
-
- String srcPath = srcObj.getPath();
- int index = srcPath.lastIndexOf("/");
- String srcDir = srcPath.substring(0, index);
- String destDir = destObj.getPath();
- SR srcSr = null;
- SR destSr = null;
- VDI destVdi = null;
- boolean result = false;
- try {
- srcSr = createFileSr(conn, srcUri.getHost() + ":" + srcUri.getPath(), srcDir);
-
- String destNfsPath = destUri.getHost() + ":" + destUri.getPath();
- String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(destNfsPath.getBytes());
- mountNfs(conn, destUri.getHost() + ":" + destUri.getPath(), localDir);
- makeDirectory(conn, localDir + "/" + destDir);
- destSr = createFileSR(conn, localDir + "/" + destDir);
-
- String nameLabel = "cloud-" + UUID.randomUUID().toString();
-
- String[] parents = srcObj.getParents();
- List<VDI> snapshotChains = new ArrayList<VDI>();
- if (parents != null) {
- for(int i = 0; i < parents.length; i++) {
- String snChainPath = parents[i];
- String uuid = getSnapshotUuid(snChainPath);
- VDI chain = VDI.getByUuid(conn, uuid);
- snapshotChains.add(chain);
- }
- }
- String snapshotUuid = getSnapshotUuid(srcPath);
- VDI snapshotVdi = VDI.getByUuid(conn, snapshotUuid);
- snapshotChains.add(snapshotVdi);
-
- long templateVirtualSize = snapshotChains.get(0).getVirtualSize(conn);
- destVdi = createVdi(conn, nameLabel, destSr, templateVirtualSize);
- String destVdiUuid = destVdi.getUuid(conn);
-
- for(VDI snapChain : snapshotChains) {
- Task task = snapChain.copyAsync(conn, null, null, destVdi);
- // poll every 1 seconds ,
- hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
- hypervisorResource.checkForSuccess(conn, task);
- }
-
- destVdi = VDI.getByUuid(conn, destVdiUuid);
- String templatePath = destDir + "/" + destVdiUuid + ".vhd";
- templatePath = templatePath.replaceAll("//","/");
- TemplateObjectTO newTemplate = new TemplateObjectTO();
- newTemplate.setPath(templatePath);
- newTemplate.setFormat(Storage.ImageFormat.VHD);
- newTemplate.setSize(destVdi.getVirtualSize(conn));
- newTemplate.setPhysicalSize(destVdi.getPhysicalUtilisation(conn));
- newTemplate.setName(destVdiUuid);
-
- result = true;
- return new CopyCmdAnswer(newTemplate);
- } catch (Exception e) {
- s_logger.error("Failed create template from snapshot", e);
- return new CopyCmdAnswer("Failed create template from snapshot " + e.toString());
- } finally {
- if (!result) {
- if (destVdi != null) {
- try {
- destVdi.destroy(conn);
- } catch (Exception e) {
- s_logger.debug("Clean up left over on dest storage failed: ", e);
- }
- }
- }
-
- if (destSr != null) {
- hypervisorResource.removeSR(conn, destSr);
- }
-
- if (srcSr != null) {
- hypervisorResource.removeSR(conn, srcSr);
- }
- }
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java b/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
deleted file mode 100644
index c67fb33..0000000
--- a/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
+++ /dev/null
@@ -1,345 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.hypervisor.xenserver;
-
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.TimeoutException;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Event;
-import com.xensource.xenapi.EventBatch;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VM;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.ClusterSyncAnswer;
-import com.cloud.agent.api.ClusterSyncCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.hypervisor.xen.resource.XenServer620SP1Resource;
-import com.cloud.utils.Pair;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineName;
-
-/**
- *
- * XenServerResourceNewBase is an abstract base class that encapsulates how
- * CloudStack should interact with XenServer after a special XenServer
- * 6.2 hotfix. From here on, every Resource for future versions of
- * XenServer should use this as the base class. This base class lessens
- * the amount of load CloudStack places on Xapi because it doesn't use
- * polling as a means to collect data and figure out task completion.
- *
- * This base class differs from CitrixResourceBase in the following ways:
- * - VM states are detected using Event.from instead of polling. This
- * increases the number of threads CloudStack uses but the threads
- * are mostly idle just waiting for events from XenServer.
- * - stats are collected through the http interface rather than Xapi plugin.
- * This change may be promoted to CitrixResourceBase as it's also possible
- * in previous versions of XenServer.
- * - Asynchronous task completion is done throught Event.from rather than
- * polling.
- *
- */
-public class XenServerResourceNewBase extends XenServer620SP1Resource {
- private static final Logger s_logger = Logger.getLogger(XenServerResourceNewBase.class);
- protected VmEventListener _listener = null;
-
- @Override
- public StartupCommand[] initialize() throws IllegalArgumentException {
- StartupCommand[] cmds = super.initialize();
-
- Connection conn = getConnection();
- Pool pool;
- try {
- pool = Pool.getByUuid(conn, _host.pool);
- Pool.Record poolr = pool.getRecord(conn);
-
- Host.Record masterRecord = poolr.master.getRecord(conn);
- if (_host.uuid.equals(masterRecord.uuid)) {
- _listener = new VmEventListener(true);
-
- //
- // TODO disable event listener for now. Wait until everything else is ready
- //
-
- // _listener.start();
- } else {
- _listener = new VmEventListener(false);
- }
- } catch (XenAPIException e) {
- throw new CloudRuntimeException("Unable to determine who is the master", e);
- } catch (XmlRpcException e) {
- throw new CloudRuntimeException("Unable to determine who is the master", e);
- }
- return cmds;
- }
-
- protected void waitForTask2(Connection c, Task task, long pollInterval, long timeout) throws XenAPIException, XmlRpcException, TimeoutException {
- long beginTime = System.currentTimeMillis();
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getType(c) + ") sent to " + c.getSessionReference() + " is pending completion with a " + timeout +
- "ms timeout");
- }
- Set<String> classes = new HashSet<String>();
- classes.add("Task/" + task.toString());
- String token = "";
- Double t = new Double(timeout / 1000);
- while (true) {
- EventBatch map = Event.from(c, classes, token, t);
- token = map.token;
- @SuppressWarnings("unchecked")
- Set<Event.Record> events = map.events;
- if (events.size() == 0) {
- String msg = "Async " + timeout / 1000 + " seconds timeout for task " + task.toString();
- s_logger.warn(msg);
- task.cancel(c);
- throw new TimeoutException(msg);
- }
- for (Event.Record rec : events) {
- if (!(rec.snapshot instanceof Task.Record)) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Skipping over " + rec);
- }
- continue;
- }
-
- Task.Record taskRecord = (Task.Record)rec.snapshot;
-
- if (taskRecord.status != Types.TaskStatusType.PENDING) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Task is done " + taskRecord.status);
- }
- return;
- } else {
- s_logger.debug("Task is not done " + taskRecord);
- }
- }
- }
- }
-
- @Override
- protected Answer execute(final ClusterSyncCommand cmd) {
- if (!_listener.isListening()) {
- return new Answer(cmd);
- }
-
- HashMap<String, Pair<String, VirtualMachine.State>> newStates = _listener.getChanges();
- return new ClusterSyncAnswer(cmd.getClusterId(), newStates);
- }
-
- protected class VmEventListener extends Thread {
- boolean _stop = false;
- HashMap<String, Pair<String, VirtualMachine.State>> _changes = new HashMap<String, Pair<String, VirtualMachine.State>>();
- boolean _isMaster;
- Set<String> _classes;
- String _token = "";
-
- public VmEventListener(boolean isMaster) {
- _isMaster = isMaster;
- _classes = new HashSet<String>();
- _classes.add("VM");
- }
-
- @Override
- public void run() {
- setName("XS-Listener-" + _host.ip);
- while (!_stop) {
- try {
- Connection conn = getConnection();
- EventBatch results;
- try {
- results = Event.from(conn, _classes, _token, new Double(30));
- } catch (Exception e) {
- s_logger.error("Retrying the waiting on VM events due to: ", e);
- continue;
- }
-
- _token = results.token;
- @SuppressWarnings("unchecked")
- Set<Event.Record> events = results.events;
- for (Event.Record event : events) {
- try {
- if (!(event.snapshot instanceof VM.Record)) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("The snapshot is not a VM: " + event);
- }
- continue;
- }
- VM.Record vm = (VM.Record)event.snapshot;
-
- String hostUuid = null;
- if (vm.residentOn != null && !vm.residentOn.toWireString().contains("OpaqueRef:NULL")) {
- hostUuid = vm.residentOn.getUuid(conn);
- }
- recordChanges(conn, vm, hostUuid);
- } catch (Exception e) {
- s_logger.error("Skipping over " + event, e);
- }
- }
- } catch (Throwable th) {
- s_logger.error("Exception caught in eventlistener thread: ", th);
- }
- }
- }
-
- protected void recordChanges(Connection conn, VM.Record rec, String hostUuid) {
- String vm = rec.nameLabel;
- if (!VirtualMachineName.isValidCloudStackVmName(vm, _instance)) {
- s_logger.debug("Skipping over VMs that does not conform to CloudStack naming convention: " + vm);
- return;
- }
-
- VirtualMachine.State currentState = convertToState(rec.powerState);
- if (vm.startsWith("migrating")) {
- s_logger.warn("Skipping " + vm + " because it is migrating.");
- return;
- }
-
- if (currentState == VirtualMachine.State.Stopped) {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Double check the power state to make sure we got the correct state for " + vm);
- }
- currentState = getRealPowerState(conn, vm);
- }
-
- boolean updateMap = false;
- boolean reportChange = false;
-
- // NOTE: For now we only record change when the VM is stopped. We don't find out any VMs starting for now.
- synchronized (_cluster.intern()) {
- Pair<String, VirtualMachine.State> oldState = s_vms.get(_cluster, vm);
- if (oldState == null) {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Unable to find " + vm + " from previous map. Assuming it was in Stopped state.");
- }
- oldState = new Pair<String, VirtualMachine.State>(null, VirtualMachine.State.Stopped);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace(vm + ": current state=" + currentState + ", previous state=" + oldState);
- }
-
- if (oldState.second() == VirtualMachine.State.Starting) {
- if (currentState == VirtualMachine.State.Running) {
- updateMap = true;
- reportChange = false;
- } else if (currentState == VirtualMachine.State.Stopped) {
- updateMap = false;
- reportChange = false;
- }
- } else if (oldState.second() == VirtualMachine.State.Migrating) {
- updateMap = true;
- reportChange = false;
- } else if (oldState.second() == VirtualMachine.State.Stopping) {
- if (currentState == VirtualMachine.State.Stopped) {
- updateMap = true;
- reportChange = false;
- } else if (currentState == VirtualMachine.State.Running) {
- updateMap = false;
- reportChange = false;
- }
- } else if (oldState.second() != currentState) {
- updateMap = true;
- reportChange = true;
- } else if (hostUuid != null && !hostUuid.equals(oldState.first())) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Detecting " + vm + " moved from " + oldState.first() + " to " + hostUuid);
- }
- reportChange = true;
- updateMap = true;
- }
-
- if (updateMap) {
- s_vms.put(_cluster, hostUuid, vm, currentState);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Updated " + vm + " to [" + hostUuid + ", " + currentState);
- }
- }
- if (reportChange) {
- Pair<String, VirtualMachine.State> change = _changes.get(vm);
- if (hostUuid == null) {
- // This is really strange code. It looks like the sync
- // code wants this to be set, which is extremely weird
- // for VMs that are dead. Why would I want to set the
- // hostUuid if the VM is stopped.
- hostUuid = oldState.first();
- if (hostUuid == null) {
- hostUuid = _host.uuid;
- }
- }
- if (change == null) {
- change = new Pair<String, VirtualMachine.State>(hostUuid, currentState);
- } else {
- change.first(hostUuid);
- change.second(currentState);
- }
- _changes.put(vm, change);
- }
- }
- }
-
- @Override
- public void start() {
- if (_isMaster) {
- // Throw away the initial set of events because they're history
- Connection conn = getConnection();
- EventBatch results;
- try {
- results = Event.from(conn, _classes, _token, new Double(30));
- } catch (Exception e) {
- s_logger.error("Retrying the waiting on VM events due to: ", e);
- throw new CloudRuntimeException("Unable to start a listener thread to listen to VM events", e);
- }
- _token = results.token;
- s_logger.debug("Starting the event listener thread for " + _host.uuid);
- super.start();
- }
- }
-
- public boolean isListening() {
- return _isMaster;
- }
-
- public HashMap<String, Pair<String, VirtualMachine.State>> getChanges() {
- synchronized (_cluster.intern()) {
- if (_changes.size() == 0) {
- return null;
- }
- HashMap<String, Pair<String, VirtualMachine.State>> diff = _changes;
- _changes = new HashMap<String, Pair<String, VirtualMachine.State>>();
- return diff;
- }
- }
-
- public void signalStop() {
- _stop = true;
- interrupt();
- }
- }
-
-}
diff --git a/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java b/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java
deleted file mode 100644
index bec4740..0000000
--- a/plugins/hypervisors/xen/src/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cloudstack.hypervisor.xenserver;
-
-public final class XenserverConfigs {
- public static final String XS620HotFix = "xs620hotfix";
- public static final String XSHotFix62ESP1 = "0850b186-4d47-11e3-a720-001b2151a503";
- public static final String XSHotFix62ESP1004 = "996dd2e7-ad95-49cc-a0be-2c9adc4dfb0b";
-}
diff --git a/plugins/hypervisors/xen/src/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java b/plugins/hypervisors/xen/src/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java
deleted file mode 100644
index 975deec..0000000
--- a/plugins/hypervisors/xen/src/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cloudstack.storage.motion;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataMotionStrategy;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.StrategyPriority;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.MigrateWithStorageAnswer;
-import com.cloud.agent.api.MigrateWithStorageCommand;
-import com.cloud.agent.api.MigrateWithStorageCompleteAnswer;
-import com.cloud.agent.api.MigrateWithStorageCompleteCommand;
-import com.cloud.agent.api.MigrateWithStorageReceiveAnswer;
-import com.cloud.agent.api.MigrateWithStorageReceiveCommand;
-import com.cloud.agent.api.MigrateWithStorageSendAnswer;
-import com.cloud.agent.api.MigrateWithStorageSendCommand;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.host.Host;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.StoragePool;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.dao.VolumeDao;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.dao.VMInstanceDao;
-
-@Component
-public class XenServerStorageMotionStrategy implements DataMotionStrategy {
- private static final Logger s_logger = Logger.getLogger(XenServerStorageMotionStrategy.class);
- @Inject
- AgentManager agentMgr;
- @Inject
- VolumeDao volDao;
- @Inject
- VolumeDataFactory volFactory;
- @Inject
- PrimaryDataStoreDao storagePoolDao;
- @Inject
- VMInstanceDao instanceDao;
-
- @Override
- public StrategyPriority canHandle(DataObject srcData, DataObject destData) {
- return StrategyPriority.CANT_HANDLE;
- }
-
- @Override
- public StrategyPriority canHandle(Map<VolumeInfo, DataStore> volumeMap, Host srcHost, Host destHost) {
- if (srcHost.getHypervisorType() == HypervisorType.XenServer && destHost.getHypervisorType() == HypervisorType.XenServer) {
- return StrategyPriority.HYPERVISOR;
- }
-
- return StrategyPriority.CANT_HANDLE;
- }
-
- @Override
- public Void copyAsync(DataObject srcData, DataObject destData, Host destHost, AsyncCompletionCallback<CopyCommandResult> callback) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Void copyAsync(DataObject srcData, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
- CopyCommandResult result = new CopyCommandResult(null, null);
- result.setResult("Unsupported operation requested for copying data.");
- callback.complete(result);
-
- return null;
- }
-
- @Override
- public Void copyAsync(Map<VolumeInfo, DataStore> volumeMap, VirtualMachineTO vmTo, Host srcHost, Host destHost, AsyncCompletionCallback<CopyCommandResult> callback) {
- Answer answer = null;
- String errMsg = null;
- try {
- VMInstanceVO instance = instanceDao.findById(vmTo.getId());
- if (instance != null) {
- if (srcHost.getClusterId().equals(destHost.getClusterId())) {
- answer = migrateVmWithVolumesWithinCluster(instance, vmTo, srcHost, destHost, volumeMap);
- } else {
- answer = migrateVmWithVolumesAcrossCluster(instance, vmTo, srcHost, destHost, volumeMap);
- }
- } else {
- throw new CloudRuntimeException("Unsupported operation requested for moving data.");
- }
- } catch (Exception e) {
- s_logger.error("copy failed", e);
- errMsg = e.toString();
- }
-
- CopyCommandResult result = new CopyCommandResult(null, answer);
- result.setResult(errMsg);
- callback.complete(result);
- return null;
- }
-
- private Answer migrateVmWithVolumesAcrossCluster(VMInstanceVO vm, VirtualMachineTO to, Host srcHost, Host destHost, Map<VolumeInfo, DataStore> volumeToPool)
- throws AgentUnavailableException {
-
- // Initiate migration of a virtual machine with it's volumes.
- try {
- Map<VolumeTO, StorageFilerTO> volumeToFilerto = new HashMap<VolumeTO, StorageFilerTO>();
- for (Map.Entry<VolumeInfo, DataStore> entry : volumeToPool.entrySet()) {
- VolumeInfo volume = entry.getKey();
- VolumeTO volumeTo = new VolumeTO(volume, storagePoolDao.findById(volume.getPoolId()));
- StorageFilerTO filerTo = new StorageFilerTO((StoragePool)entry.getValue());
- volumeToFilerto.put(volumeTo, filerTo);
- }
-
- // Migration across cluster needs to be done in three phases.
- // 1. Send a migrate receive command to the destination host so that it is ready to receive a vm.
- // 2. Send a migrate send command to the source host. This actually migrates the vm to the destination.
- // 3. Complete the process. Update the volume details.
- MigrateWithStorageReceiveCommand receiveCmd = new MigrateWithStorageReceiveCommand(to, volumeToFilerto);
- MigrateWithStorageReceiveAnswer receiveAnswer = (MigrateWithStorageReceiveAnswer)agentMgr.send(destHost.getId(), receiveCmd);
- if (receiveAnswer == null) {
- s_logger.error("Migration with storage of vm " + vm + " to host " + destHost + " failed.");
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost);
- } else if (!receiveAnswer.getResult()) {
- s_logger.error("Migration with storage of vm " + vm + " failed. Details: " + receiveAnswer.getDetails());
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost + ". " + receiveAnswer.getDetails());
- }
-
- MigrateWithStorageSendCommand sendCmd =
- new MigrateWithStorageSendCommand(to, receiveAnswer.getVolumeToSr(), receiveAnswer.getNicToNetwork(), receiveAnswer.getToken());
- MigrateWithStorageSendAnswer sendAnswer = (MigrateWithStorageSendAnswer)agentMgr.send(srcHost.getId(), sendCmd);
- if (sendAnswer == null) {
- s_logger.error("Migration with storage of vm " + vm + " to host " + destHost + " failed.");
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost);
- } else if (!sendAnswer.getResult()) {
- s_logger.error("Migration with storage of vm " + vm + " failed. Details: " + sendAnswer.getDetails());
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost + ". " + sendAnswer.getDetails());
- }
-
- MigrateWithStorageCompleteCommand command = new MigrateWithStorageCompleteCommand(to);
- MigrateWithStorageCompleteAnswer answer = (MigrateWithStorageCompleteAnswer)agentMgr.send(destHost.getId(), command);
- if (answer == null) {
- s_logger.error("Migration with storage of vm " + vm + " failed.");
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost);
- } else if (!answer.getResult()) {
- s_logger.error("Migration with storage of vm " + vm + " failed. Details: " + answer.getDetails());
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost + ". " + answer.getDetails());
- } else {
- // Update the volume details after migration.
- updateVolumePathsAfterMigration(volumeToPool, answer.getVolumeTos());
- }
-
- return answer;
- } catch (OperationTimedoutException e) {
- s_logger.error("Error while migrating vm " + vm + " to host " + destHost, e);
- throw new AgentUnavailableException("Operation timed out on storage motion for " + vm, destHost.getId());
- }
- }
-
- private Answer migrateVmWithVolumesWithinCluster(VMInstanceVO vm, VirtualMachineTO to, Host srcHost, Host destHost, Map<VolumeInfo, DataStore> volumeToPool)
- throws AgentUnavailableException {
-
- // Initiate migration of a virtual machine with it's volumes.
- try {
- Map<VolumeTO, StorageFilerTO> volumeToFilerto = new HashMap<VolumeTO, StorageFilerTO>();
- for (Map.Entry<VolumeInfo, DataStore> entry : volumeToPool.entrySet()) {
- VolumeInfo volume = entry.getKey();
- VolumeTO volumeTo = new VolumeTO(volume, storagePoolDao.findById(volume.getPoolId()));
- StorageFilerTO filerTo = new StorageFilerTO((StoragePool)entry.getValue());
- volumeToFilerto.put(volumeTo, filerTo);
- }
-
- MigrateWithStorageCommand command = new MigrateWithStorageCommand(to, volumeToFilerto);
- MigrateWithStorageAnswer answer = (MigrateWithStorageAnswer)agentMgr.send(destHost.getId(), command);
- if (answer == null) {
- s_logger.error("Migration with storage of vm " + vm + " failed.");
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost);
- } else if (!answer.getResult()) {
- s_logger.error("Migration with storage of vm " + vm + " failed. Details: " + answer.getDetails());
- throw new CloudRuntimeException("Error while migrating the vm " + vm + " to host " + destHost + ". " + answer.getDetails());
- } else {
- // Update the volume details after migration.
- updateVolumePathsAfterMigration(volumeToPool, answer.getVolumeTos());
- }
-
- return answer;
- } catch (OperationTimedoutException e) {
- s_logger.error("Error while migrating vm " + vm + " to host " + destHost, e);
- throw new AgentUnavailableException("Operation timed out on storage motion for " + vm, destHost.getId());
- }
- }
-
- private void updateVolumePathsAfterMigration(Map<VolumeInfo, DataStore> volumeToPool, List<VolumeObjectTO> volumeTos) {
- for (Map.Entry<VolumeInfo, DataStore> entry : volumeToPool.entrySet()) {
- boolean updated = false;
- VolumeInfo volume = entry.getKey();
- StoragePool pool = (StoragePool)entry.getValue();
- for (VolumeObjectTO volumeTo : volumeTos) {
- if (volume.getId() == volumeTo.getId()) {
- VolumeVO volumeVO = volDao.findById(volume.getId());
- Long oldPoolId = volumeVO.getPoolId();
- volumeVO.setPath(volumeTo.getPath());
- volumeVO.setFolder(pool.getPath());
- volumeVO.setPodId(pool.getPodId());
- volumeVO.setPoolId(pool.getId());
- volumeVO.setLastPoolId(oldPoolId);
- volDao.update(volume.getId(), volumeVO);
- updated = true;
- break;
- }
- }
-
- if (!updated) {
- s_logger.error("Volume path wasn't updated for volume " + volume + " after it was migrated.");
- }
- }
- }
-}
diff --git a/plugins/hypervisors/xen/test/com/cloud/ha/XenServerFencerTest.java b/plugins/hypervisors/xen/test/com/cloud/ha/XenServerFencerTest.java
deleted file mode 100644
index bd1d8f8..0000000
--- a/plugins/hypervisors/xen/test/com/cloud/ha/XenServerFencerTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.ha;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-
-public class XenServerFencerTest {
-
- @Test
- public void testSetAndGetName() throws Exception {
- XenServerFencer xenServerFencer = new XenServerFencer();
- String name = "name";
-
- xenServerFencer.setName(name);
- String actual = xenServerFencer.getName();
-
- assertEquals(name, actual);
-
- }
-
-}
diff --git a/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java b/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java
deleted file mode 100644
index 0920c7f..0000000
--- a/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.cloud.hypervisor.xen.resource;
-
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.xmlrpc.XmlRpcException;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.VIF;
-import com.xensource.xenapi.VM;
-import com.xensource.xenapi.XenAPIObject;
-
-import com.cloud.agent.api.ScaleVmAnswer;
-import com.cloud.agent.api.ScaleVmCommand;
-import com.cloud.agent.api.to.IpAddressTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.hypervisor.xen.resource.CitrixResourceBase.XsHost;
-
-public class CitrixResourceBaseTest {
-
- @Spy
- CitrixResourceBase _resource = new CitrixResourceBase() {
-
- @Override
- public ScaleVmAnswer execute(ScaleVmCommand cmd) {
- return super.execute(cmd);
- }
-
- @Override
- public String callHostPlugin(Connection conn, String plugin, String cmd, String... params) {
- return "Success";
- }
-
- @Override
- protected void scaleVM(Connection conn, VM vm, VirtualMachineTO vmSpec, Host host) throws Types.XenAPIException, XmlRpcException {
- _host.speed = 500;
- super.scaleVM(conn, vm, vmSpec, host);
- }
-
- @Override
- protected boolean isDmcEnabled(Connection conn, Host host) throws Types.XenAPIException, XmlRpcException {
- return true;
- }
- };
- @Mock
- XsHost _host;
- @Mock
- Host host;
- @Mock
- ScaleVmCommand cmd;
- @Mock
- VirtualMachineTO vmSpec;
- @Mock
- Connection conn;
- @Mock
- VM vm;
-
- @Before
- public void setup() {
-
- MockitoAnnotations.initMocks(this);
-
- doReturn(vmSpec).when(cmd).getVirtualMachine();
- doReturn("i-2-3-VM").when(vmSpec).getName();
-
- }
-
- // Expecting XmlRpcException while trying to get the record of vm using connection
- @Test(expected = XmlRpcException.class)
- public void testScaleVMF1() throws Types.BadServerResponse, Types.XenAPIException, XmlRpcException {
- doReturn(conn).when(_resource).getConnection();
- Set<VM> vms = mock(Set.class);
-
- Iterator iter = mock(Iterator.class);
- doReturn(iter).when(vms).iterator();
- when(iter.hasNext()).thenReturn(true).thenReturn(false);
- doReturn(vm).when(iter).next();
- VM.Record vmr = mock(VM.Record.class);
- when(vm.getRecord(conn)).thenThrow(new XmlRpcException("XmlRpcException"));
- when(vm.getRecord(conn)).thenReturn(vmr);
- vmr.powerState = Types.VmPowerState.RUNNING;
- vmr.residentOn = mock(Host.class);
- XenAPIObject object = mock(XenAPIObject.class);
- doReturn(new String("OpaqueRef:NULL")).when(object).toWireString();
- doNothing().when(_resource).scaleVM(conn, vm, vmSpec, host);
-
- _resource.execute(cmd);
- verify(iter, times(2)).hasNext();
- verify(iter, times(2)).next();
-
- }
-
- // Test to scale vm "i-2-3-VM" cpu-cap disabled
- @Test
- public void testScaleVMF2() throws Types.XenAPIException, XmlRpcException {
-
- when(vm.getMemoryStaticMax(conn)).thenReturn(1073741824L);
- when(vm.getMemoryStaticMin(conn)).thenReturn(268435456L);
- doReturn(536870912L).when(vmSpec).getMinRam();
- doReturn(536870912L).when(vmSpec).getMaxRam();
- doNothing().when(vm).setMemoryDynamicRange(conn, 536870912L, 536870912L);
- doReturn(1).when(vmSpec).getCpus();
- doNothing().when(vm).setVCPUsNumberLive(conn, 1L);
- doReturn(500).when(vmSpec).getMinSpeed();
- doReturn(false).when(vmSpec).getLimitCpuUse();
- Map<String, String> args = mock(HashMap.class);
- when(host.callPlugin(conn, "vmops", "add_to_VCPUs_params_live", args)).thenReturn("Success");
- doReturn(null).when(_resource).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM");
-
- _resource.scaleVM(conn, vm, vmSpec, host);
-
- verify(vmSpec, times(1)).getLimitCpuUse();
- verify(_resource, times(1)).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM");
- }
-
- // Test to scale vm "i-2-3-VM" cpu-cap enabled
- @Test
- public void testScaleVMF3() throws Types.XenAPIException, XmlRpcException {
-
- when(vm.getMemoryStaticMax(conn)).thenReturn(1073741824L);
- when(vm.getMemoryStaticMin(conn)).thenReturn(268435456L);
- doReturn(536870912L).when(vmSpec).getMinRam();
- doReturn(536870912L).when(vmSpec).getMaxRam();
- doNothing().when(vm).setMemoryDynamicRange(conn, 536870912L, 536870912L);
- doReturn(1).when(vmSpec).getCpus();
- doNothing().when(vm).setVCPUsNumberLive(conn, 1L);
- doReturn(500).when(vmSpec).getMinSpeed();
- doReturn(500).when(vmSpec).getMaxSpeed();
- doReturn(true).when(vmSpec).getLimitCpuUse();
- doReturn(null).when(_resource).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "cap", "value", "99", "vmname", "i-2-3-VM");
- Map<String, String> args = mock(HashMap.class);
- when(host.callPlugin(conn, "vmops", "add_to_VCPUs_params_live", args)).thenReturn("Success");
- doReturn(null).when(_resource).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM");
-
- _resource.scaleVM(conn, vm, vmSpec, host);
-
- verify(vmSpec, times(1)).getLimitCpuUse();
- verify(_resource, times(1)).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM");
- verify(_resource, times(1)).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "cap", "value", "99", "vmname", "i-2-3-VM");
- }
-
-
- @Test
- public void testSetNicDevIdIfCorrectVifIsNotNull() throws Exception {
- IpAddressTO ip = mock(IpAddressTO.class);
- when(ip.isAdd()).thenReturn(false);
- VIF correctVif = null;
- try {
- _resource.setNicDevIdIfCorrectVifIsNotNull(conn, ip, correctVif);
- } catch (NullPointerException e) {
- fail("this test is meant to show that null pointer is not thrown");
- }
- }
-}
\ No newline at end of file
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
index 630edb5..bf38fa9 100755
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
@@ -291,7 +291,7 @@
if (prodVersion == null) {
prodVersion = record.softwareVersion.get("platform_version");
}
- String xenVersion = record.softwareVersion.get("xenserver");
+ String xenVersion = record.softwareVersion.get("xen");
String hostOS = record.softwareVersion.get("product_brand");
if (hostOS == null) {
hostOS = record.softwareVersion.get("platform_name");
@@ -347,12 +347,12 @@
params.put("wait", Integer.toString(_wait));
details.put("wait", Integer.toString(_wait));
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
- params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString()));
- params.put(Config.XenHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenHeartBeatInterval.toString()));
+ params.put(Config.XenServerMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenServerMaxNics.toString()));
+ params.put(Config.XenServerHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenServerHeartBeatInterval.toString()));
params.put(Config.InstanceName.toString().toLowerCase(), _instance);
details.put(Config.InstanceName.toString().toLowerCase(), _instance);
try {
- resource.configure("Xen Server", params);
+ resource.configure("XenServer", params);
} catch (ConfigurationException e) {
_alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, "Unable to add " + record.address, "Error is " + e.getMessage());
s_logger.warn("Unable to instantiate " + record.address, e);
@@ -455,7 +455,7 @@
}
protected void serverConfig() {
- String value = _params.get(Config.XenSetupMultipath.key());
+ String value = _params.get(Config.XenServerSetupMultipath.key());
_setupMultipath = Boolean.parseBoolean(value);
}
@@ -464,20 +464,20 @@
super.configure(name, params);
serverConfig();
- _publicNic = _params.get(Config.XenPublicNetwork.key());
- _privateNic = _params.get(Config.XenPrivateNetwork.key());
+ _publicNic = _params.get(Config.XenServerPublicNetwork.key());
+ _privateNic = _params.get(Config.XenServerPrivateNetwork.key());
- _storageNic1 = _params.get(Config.XenStorageNetwork1.key());
- _storageNic2 = _params.get(Config.XenStorageNetwork2.key());
+ _storageNic1 = _params.get(Config.XenServerStorageNetwork1.key());
+ _storageNic2 = _params.get(Config.XenServerStorageNetwork2.key());
- _guestNic = _params.get(Config.XenGuestNetwork.key());
+ _guestNic = _params.get(Config.XenServerGuestNetwork.key());
String value = _params.get(Config.XapiWait.toString());
_wait = NumbersUtil.parseInt(value, Integer.parseInt(Config.XapiWait.getDefaultValue()));
_instance = _params.get(Config.InstanceName.key());
- value = _params.get(Config.XenSetupMultipath.key());
+ value = _params.get(Config.XenServerSetupMultipath.key());
Boolean.parseBoolean(value);
value = _params.get("xenserver.check.hvm");
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index 4213508..3c34c1d 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -114,6 +114,7 @@
import com.cloud.agent.api.UnPlugNicCommand;
import com.cloud.agent.api.UpdateHostPasswordCommand;
import com.cloud.agent.api.UpgradeSnapshotCommand;
+import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.agent.api.VmStatsEntry;
import com.cloud.agent.api.check.CheckSshAnswer;
import com.cloud.agent.api.check.CheckSshCommand;
@@ -170,6 +171,7 @@
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.utils.ssh.SSHCmdHelper;
+import com.cloud.utils.ssh.SshHelper;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
@@ -290,10 +292,10 @@
protected int _pollingIntervalInSeconds = 60;
//Hypervisor specific params with generic value, may need to be overridden for specific versions
- long _xsMemoryUsed = 128 * 1024 * 1024L; // xen hypervisor used 128 M
+ long _xsMemoryUsed = 128 * 1024 * 1024L; // xenserver hypervisor used 128 M
double _xsVirtualizationFactor = 63.0 / 64.0; // 1 - virtualization overhead
- //static min values for guests on xen
+ //static min values for guests on xenserver
private static final long mem_128m = 134217728L;
protected boolean _canBridgeFirewall = false;
@@ -558,10 +560,14 @@
@Override
public ExecutionResult executeInVR(String routerIP, String script, String args, int timeout) {
- Connection conn = getConnection();
- String rc = callHostPluginAsync(conn, "vmops", "routerProxy", timeout, "args", script + " " + routerIP + " " + args);
- // Fail case would be start with "fail#"
- return new ExecutionResult(rc.startsWith("succ#"), rc.substring(5));
+ Pair<Boolean, String> result;
+ try {
+ result = SshHelper.sshExecute(_host.ip, 22, _username, null, _password.peek(), "/opt/cloud/bin/router_proxy.sh " + script + " " + routerIP + " " + args,
+ 60000, 60000, timeout * 1000);
+ } catch (Exception e) {
+ return new ExecutionResult(false, e.getMessage());
+ }
+ return new ExecutionResult(result.first(), result.second());
}
@Override
@@ -913,6 +919,7 @@
s_logger.debug("A VIF for dom0 has already been found - No need to create one");
}
}
+
if (dom0vif == null) {
s_logger.debug("Create a vif on dom0 for " + networkDesc);
VIF.Record vifr = new VIF.Record();
@@ -930,14 +937,17 @@
vifr.lockingMode = Types.VifLockingMode.NETWORK_DEFAULT;
dom0vif = VIF.create(conn, vifr);
+ synchronized (_tmpDom0Vif) {
+ _tmpDom0Vif.add(dom0vif);
+ }
}
// At this stage we surely have a VIF
- dom0vif.plug(conn);
- dom0vif.unplug(conn);
- synchronized (_tmpDom0Vif) {
- _tmpDom0Vif.add(dom0vif);
+ try {
+ dom0vif.plug(conn);
+ } catch (Exception e) {
+ // though an exception is thrown here, VIF actually gets plugged-in to dom0, so just ignore the exception
}
-
+ dom0vif.unplug(conn);
}
private synchronized Network setupvSwitchNetwork(Connection conn) {
@@ -989,12 +999,12 @@
rec.otherConfig = otherConfig;
nw = Network.create(conn, rec);
// Plug dom0 vif only when creating network
- if (!is_xcp())
- enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + nwName);
- s_logger.debug("### Xen Server network for tunnels created:" + nwName);
+ enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + nwName);
+ s_logger.debug("### XenServer network for tunnels created:" + nwName);
} else {
nw = networks.iterator().next();
- s_logger.debug("Xen Server network for tunnels found:" + nwName);
+ enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + nwName);
+ s_logger.debug("XenServer network for tunnels found:" + nwName);
}
return nw;
} catch (Exception e) {
@@ -1026,8 +1036,7 @@
}
if (!configured) {
// Plug dom0 vif only if not done before for network and host
- if (!is_xcp())
- enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + bridgeName);
+ enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + bridgeName);
String result;
if (bridgeName.startsWith("OVS-DR-VPC-Bridge")) {
result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge_for_distributed_routing", "bridge", bridge,
@@ -1332,7 +1341,7 @@
return dynamicMinRam;
}
- protected HashMap<String, HashMap<String, Long>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
+ protected HashMap<String, HashMap<String, VgpuTypesInfo>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
return null;
}
@@ -1488,8 +1497,8 @@
vm.setPlatform(conn, platform);
}
}
- String xentoolsversion = details.get("hypervisortoolsversion");
- if (xentoolsversion == null || !xentoolsversion.equalsIgnoreCase("xenserver61")) {
+ String xenservertoolsversion = details.get("hypervisortoolsversion");
+ if (xenservertoolsversion == null || !xenservertoolsversion.equalsIgnoreCase("xenserver61")) {
Map<String, String> platform = vm.getPlatform(conn);
platform.remove("device_id");
vm.setPlatform(conn, platform);
@@ -1665,7 +1674,7 @@
return cmd;
}
- private void cleanUpTmpDomVif(Connection conn) {
+ private void cleanUpTmpDomVif(Connection conn, Network nw) {
List<VIF> vifs;
synchronized (_tmpDom0Vif) {
vifs = _tmpDom0Vif;
@@ -1673,13 +1682,16 @@
}
for (VIF v : vifs) {
- String vifName = "unkown";
+ String vifName = "unknown";
try {
VIF.Record vifr = v.getRecord(conn);
- Map<String, String> config = vifr.otherConfig;
- vifName = config.get("nameLabel");
- v.destroy(conn);
- s_logger.debug("Destroy temp dom0 vif" + vifName + " success");
+ if (v.getNetwork(conn).getUuid(conn).equals(nw.getUuid(conn))) {
+ Map<String, String> config = vifr.otherConfig;
+ vifName = config.get("nameLabel");
+ s_logger.debug("A VIF in dom0 for the network is found - so destroy the vif");
+ v.destroy(conn);
+ s_logger.debug("Destroy temp dom0 vif" + vifName + " success");
+ }
} catch (Exception e) {
s_logger.warn("Destroy temp dom0 vif " + vifName + "failed", e);
}
@@ -1817,7 +1829,6 @@
}
}
}
- cleanUpTmpDomVif(conn);
if (_canBridgeFirewall) {
String result = null;
@@ -3617,6 +3628,12 @@
return new StopAnswer(cmd, msg, platformstring, false);
}
+ if (cmd.checkBeforeCleanup() && vmr.powerState == VmPowerState.RUNNING) {
+ String msg = "Vm " + vmName + " is running on host and checkBeforeCleanup flag is set, so bailing out";
+ s_logger.debug(msg);
+ return new StopAnswer(cmd, msg, false);
+ }
+
State state = s_vms.getState(_cluster, vmName);
synchronized (_cluster.intern()) {
@@ -3655,7 +3672,7 @@
s_logger.debug("VM " + vmName + " does not have GPU support.");
}
if (vGPUs != null && !vGPUs.isEmpty()) {
- HashMap<String, HashMap<String, Long>> groupDetails = getGPUGroupDetails(conn);
+ HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = getGPUGroupDetails(conn);
cmd.setGpuDevice(new GPUDeviceTO(null, null, groupDetails));
}
@@ -3937,6 +3954,13 @@
while (vifIter.hasNext()) {
VIF vif = vifIter.next();
try {
+ String deviceId = vif.getDevice(conn);
+ if(vm.getIsControlDomain(conn) || vif.getCurrentlyAttached(conn)) {
+ usedDeviceNums.add(Integer.valueOf(deviceId));
+ } else {
+ s_logger.debug("Found unplugged VIF " + deviceId + " in VM " + vmName + " destroy it");
+ vif.destroy(conn);
+ }
usedDeviceNums.add(Integer.valueOf(vif.getDevice(conn)));
} catch (NumberFormatException e) {
String msg = "Obtained an invalid value for an allocated VIF device number for VM: " + vmName;
@@ -4886,11 +4910,11 @@
host.setTags(conn, hr.tags);
return true;
} catch (XenAPIException e) {
- String msg = "Xen setup failed due to " + e.toString();
+ String msg = "XenServer setup failed due to " + e.toString();
s_logger.warn(msg, e);
throw new CloudRuntimeException("Unable to get host information " + e.toString(), e);
} catch (XmlRpcException e) {
- String msg = "Xen setup failed due to " + e.getMessage();
+ String msg = "XenServer setup failed due to " + e.getMessage();
s_logger.warn(msg, e);
throw new CloudRuntimeException("Unable to get host information ", e);
}
@@ -5245,6 +5269,8 @@
private Answer execute(OvsDestroyBridgeCommand cmd) {
Connection conn = getConnection();
+ Network nw = findOrCreateTunnelNetwork(conn, cmd.getBridgeName());
+ cleanUpTmpDomVif(conn, nw);
destroyTunnelNetwork(conn, cmd.getBridgeName());
s_logger.debug("OVS Bridge destroyed");
return new Answer(cmd, true, null);
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
index 777dc90..c5f762c 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
@@ -29,7 +29,7 @@
import com.cloud.utils.script.Script;
@Local(value = ServerResource.class)
-public class XenServer600Resource extends XenServer56FP1Resource {
+public class XenServer600Resource extends XenServer56SP2Resource {
private static final Logger s_logger = Logger.getLogger(XenServer600Resource.class);
public XenServer600Resource() {
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer602Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer602Resource.java
index 2c7122d..f180adb 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer602Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer602Resource.java
@@ -20,7 +20,7 @@
import com.cloud.resource.ServerResource;
@Local(value = ServerResource.class)
-public class XenServer602Resource extends XenServer56FP1Resource {
+public class XenServer602Resource extends XenServer600Resource {
private static final Logger s_logger = Logger.getLogger(XenServer602Resource.class);
public XenServer602Resource() {
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
index 843735c..72f832e 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
@@ -64,7 +64,7 @@
import com.cloud.vm.VirtualMachine.State;
@Local(value = ServerResource.class)
-public class XenServer610Resource extends XenServer56FP1Resource {
+public class XenServer610Resource extends XenServer602Resource {
private static final Logger s_logger = Logger.getLogger(XenServer610Resource.class);
public XenServer610Resource() {
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
index b89e338..a744f1e 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
@@ -34,6 +34,7 @@
import com.cloud.agent.api.GetGPUStatsCommand;
import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.agent.api.to.GPUDeviceTO;
import com.cloud.resource.ServerResource;
import com.xensource.xenapi.Connection;
@@ -43,6 +44,7 @@
import com.xensource.xenapi.Types.XenAPIException;
import com.xensource.xenapi.VGPU;
import com.xensource.xenapi.VGPUType;
+import com.xensource.xenapi.VGPUType.Record;
import com.xensource.xenapi.VM;
@Local(value=ServerResource.class)
@@ -65,7 +67,7 @@
protected GetGPUStatsAnswer execute(GetGPUStatsCommand cmd) {
Connection conn = getConnection();
- HashMap<String, HashMap<String, Long>> groupDetails = new HashMap<String, HashMap<String, Long>>();
+ HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = new HashMap<String, HashMap<String, VgpuTypesInfo>>();
try {
groupDetails = getGPUGroupDetails(conn);
} catch (Exception e) {
@@ -79,7 +81,7 @@
protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
super.fillHostInfo(conn, cmd);
try {
- HashMap<String, HashMap<String, Long>> groupDetails = getGPUGroupDetails(conn);
+ HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = getGPUGroupDetails(conn);
cmd.setGpuGroupDetails(groupDetails);
} catch (Exception e) {
if (s_logger.isDebugEnabled()) {
@@ -89,8 +91,8 @@
}
@Override
- protected HashMap<String, HashMap<String, Long>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
- HashMap<String, HashMap<String, Long>> groupDetails = new HashMap<String, HashMap<String, Long>>();
+ protected HashMap<String, HashMap<String, VgpuTypesInfo>> getGPUGroupDetails(Connection conn) throws XenAPIException, XmlRpcException {
+ HashMap<String, HashMap<String, VgpuTypesInfo>> groupDetails = new HashMap<String, HashMap<String, VgpuTypesInfo>>();
Host host = Host.getByUuid(conn, _host.uuid);
Set<PGPU> pgpus = host.getPGPUs(conn);
Iterator<PGPU> iter = pgpus.iterator();
@@ -99,7 +101,7 @@
GPUGroup gpuGroup = pgpu.getGPUGroup(conn);
Set<VGPUType> enabledVGPUTypes = gpuGroup.getEnabledVGPUTypes(conn);
String groupName = gpuGroup.getNameLabel(conn);
- HashMap<String, Long> gpuCapacity = new HashMap<String, Long>();
+ HashMap<String, VgpuTypesInfo> gpuCapacity = new HashMap<String, VgpuTypesInfo>();
if (groupDetails.get(groupName) != null) {
gpuCapacity = groupDetails.get(groupName);
}
@@ -108,13 +110,20 @@
Iterator<VGPUType> it = enabledVGPUTypes.iterator();
while (it.hasNext()) {
VGPUType type = it.next();
- String modelName = type.getModelName(conn);
+ Record record = type.getRecord(conn);
Long remainingCapacity = pgpu.getRemainingCapacity(conn, type);
- if (gpuCapacity.get(modelName) != null) {
- long newRemainingCapacity = gpuCapacity.get(modelName) + remainingCapacity;
- gpuCapacity.put(modelName, newRemainingCapacity);
+ Long maxCapacity = pgpu.getSupportedVGPUMaxCapacities(conn).get(type);
+ VgpuTypesInfo entry;
+ if ((entry = gpuCapacity.get(record.modelName)) != null) {
+ remainingCapacity += entry.getRemainingCapacity();
+ maxCapacity += entry.getMaxCapacity();
+ entry.setRemainingCapacity(remainingCapacity);
+ entry.setMaxVmCapacity(maxCapacity);
+ gpuCapacity.put(record.modelName, entry);
} else {
- gpuCapacity.put(modelName, remainingCapacity);
+ VgpuTypesInfo vgpuTypeRecord = new VgpuTypesInfo(record.modelName, record.framebufferSize, record.maxHeads,
+ record.maxResolutionX, record.maxResolutionY, maxCapacity, remainingCapacity, maxCapacity);
+ gpuCapacity.put(record.modelName, vgpuTypeRecord);
}
}
}
diff --git a/plugins/network-elements/dns-notifier/resources/components-example.xml b/plugins/network-elements/dns-notifier/resources/components-example.xml
index 5977387..c6c84f2 100755
--- a/plugins/network-elements/dns-notifier/resources/components-example.xml
+++ b/plugins/network-elements/dns-notifier/resources/components-example.xml
@@ -109,7 +109,7 @@
<adapter name="KVMGuru" class="com.cloud.hypervisor.KVMGuru"/>
</adapters>
<adapters key="com.cloud.resource.Discoverer">
- <adapter name="XCP Agent" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer"/>
+ <adapter name="XCP Agent" class="com.cloud.hypervisor.xenserver.discoverer.XcpServerDiscoverer"/>
<adapter name="SecondaryStorage" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer"/>
<adapter name="KVM Agent" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer"/>
<adapter name="Bare Metal Agent" class="com.cloud.baremetal.BareMetalDiscoverer"/>
diff --git a/plugins/network-elements/juniper-contrail/pom.xml b/plugins/network-elements/juniper-contrail/pom.xml
index 8e9866f..1aadd5e 100644
--- a/plugins/network-elements/juniper-contrail/pom.xml
+++ b/plugins/network-elements/juniper-contrail/pom.xml
@@ -46,7 +46,7 @@
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-plugin-hypervisor-xen</artifactId>
+ <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
diff --git a/plugins/pom.xml b/plugins/pom.xml
index 9b391b8..b5e6a61 100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -49,7 +49,7 @@
<module>host-allocators/random</module>
<module>dedicated-resources</module>
<module>hypervisors/ovm</module>
- <module>hypervisors/xen</module>
+ <module>hypervisors/xenserver</module>
<module>hypervisors/kvm</module>
<module>event-bus/rabbitmq</module>
<module>event-bus/inmemory</module>
diff --git a/scripts/installer/windows/client.wxs b/scripts/installer/windows/client.wxs
index c6fc52c..6cca15d 100644
--- a/scripts/installer/windows/client.wxs
+++ b/scripts/installer/windows/client.wxs
@@ -1144,7 +1144,7 @@
<File Id="fil4573D848D63904E25199DFC7C5F3C630" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\perfmon.py" />
</Component>
<Component Id="cmpD76E671ADB5BD6A4D78727948C10979D" Guid="{EA4A8C61-6B09-4489-ACE6-00B9A0F1A4BC}">
- <File Id="filD3A7AE13D824593E31FF5468A9B764AB" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\s3xen" />
+ <File Id="filD3A7AE13D824593E31FF5468A9B764AB" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\s3xenserver" />
</Component>
<Component Id="cmpA5ACE2ABDAD485164B610A43CF7260AC" Guid="{D6BC09D7-775E-4DBE-8E97-603B00B26BC2}">
<File Id="filA1C0191B48050912F371A13BC75AD95A" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\setupxenserver.sh" />
@@ -1165,7 +1165,7 @@
<File Id="fil5C88104CC07D3894D5C6618F2480D894" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\swift" />
</Component>
<Component Id="cmp29E6175F9E42A05F0ACA5E9DEC427DA9" Guid="{08A3A34A-662E-40F5-AC4C-6224AF8E3204}">
- <File Id="fil30689D2F97C68DD797DC8681851DC4A0" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\swiftxen" />
+ <File Id="fil30689D2F97C68DD797DC8681851DC4A0" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\swiftxenserver" />
</Component>
<Component Id="cmp795E37CA1E2B235A5F5500D0CFC92E07" Guid="{4CAFC2DE-B603-485C-B8ED-A6A016962788}">
<File Id="filAD37A67E4680F1FFC939AE9759EA6193" KeyPath="yes" Source="!(wix.SourceClient)\WEB-INF\classes\scripts\vm\hypervisor\xenserver\upgrade_snapshot.sh" />
@@ -2411,4 +2411,4 @@
<ComponentRef Id="cmp776899723BBC0C56DBF1EA389CF3A210" />
</ComponentGroup>
</Fragment>
-</Wix>
\ No newline at end of file
+</Wix>
diff --git a/scripts/vm/hypervisor/xenserver/cloudlog b/scripts/vm/hypervisor/xenserver/cloudlog
index 6689efe..14e0cdd 100644
--- a/scripts/vm/hypervisor/xenserver/cloudlog
+++ b/scripts/vm/hypervisor/xenserver/cloudlog
@@ -29,7 +29,7 @@
rotate 20
}
-/var/log/cloud/ovstunnel.log /var/log/cloud/ovs-pvlan.log /var/log/cloud/swiftxen.log /var/log/cloud/s3xen /var/log/cloud/storageplugin {
+/var/log/cloud/ovstunnel.log /var/log/cloud/ovs-pvlan.log /var/log/cloud/swiftxenserver.log /var/log/cloud/s3xenserver /var/log/cloud/storageplugin {
daily
size 1M
rotate 2
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
index 3bd5c94..a746eb7 100755
--- a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
+++ b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
@@ -497,7 +497,7 @@
if (allocationAlgorithm != null) {
_allocationAlgorithm = allocationAlgorithm;
}
- String value = configs.get("xen.check.hvm");
+ String value = configs.get("xenserver.check.hvm");
_checkHvm = value == null ? true : Boolean.parseBoolean(value);
}
return true;
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index af1f062..088ed0d 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -1079,17 +1079,17 @@
OvmGuestNetwork("Hidden", ManagementServer.class, String.class, "ovm.guest.network.device", null, "Specify the private bridge on host for private network", null),
// XenServer
- XenPublicNetwork(
+ XenServerPublicNetwork(
"Hidden",
ManagementServer.class,
String.class,
- "xen.public.network.device",
+ "xenserver.public.network.device",
null,
"[ONLY IF THE PUBLIC NETWORK IS ON A DEDICATED NIC]:The network name label of the physical device dedicated to the public network on a XenServer host",
null),
- XenStorageNetwork1("Hidden", ManagementServer.class, String.class, "xen.storage.network.device1", null, "Specify when there are storage networks", null),
- XenStorageNetwork2("Hidden", ManagementServer.class, String.class, "xen.storage.network.device2", null, "Specify when there are storage networks", null),
- XenPrivateNetwork("Hidden", ManagementServer.class, String.class, "xen.private.network.device", null, "Specify when the private network name is different", null),
+ XenServerStorageNetwork1("Hidden", ManagementServer.class, String.class, "xenserver.storage.network.device1", null, "Specify when there are storage networks", null),
+ XenServerStorageNetwork2("Hidden", ManagementServer.class, String.class, "xenserver.storage.network.device2", null, "Specify when there are storage networks", null),
+ XenServerPrivateNetwork("Hidden", ManagementServer.class, String.class, "xenserver.private.network.device", null, "Specify when the private network name is different", null),
NetworkGuestCidrLimit(
"Network",
NetworkOrchestrationService.class,
@@ -1098,32 +1098,32 @@
"22",
"size limit for guest cidr; can't be less than this value",
null),
- XenSetupMultipath("Advanced", ManagementServer.class, String.class, "xen.setup.multipath", "false", "Setup the host to do multipath", null),
- XenBondStorageNic("Advanced", ManagementServer.class, String.class, "xen.bond.storage.nics", null, "Attempt to bond the two networks if found", null),
- XenHeartBeatInterval(
+ XenServerSetupMultipath("Advanced", ManagementServer.class, String.class, "xenserver.setup.multipath", "false", "Setup the host to do multipath", null),
+ XenServerBondStorageNic("Advanced", ManagementServer.class, String.class, "xenserver.bond.storage.nics", null, "Attempt to bond the two networks if found", null),
+ XenServerHeartBeatInterval(
"Advanced",
ManagementServer.class,
Integer.class,
- "xen.heartbeat.interval",
+ "xenserver.heartbeat.interval",
"60",
"heartbeat to use when implementing XenServer Self Fencing",
null),
- XenGuestNetwork("Hidden", ManagementServer.class, String.class, "xen.guest.network.device", null, "Specify for guest network name label", null),
- XenMaxNics("Advanced", AgentManager.class, Integer.class, "xen.nics.max", "7", "Maximum allowed nics for Vms created on Xen", null),
- XenPVdriverVersion(
+ XenServerGuestNetwork("Hidden", ManagementServer.class, String.class, "xenserver.guest.network.device", null, "Specify for guest network name label", null),
+ XenServerMaxNics("Advanced", AgentManager.class, Integer.class, "xenserver.nics.max", "7", "Maximum allowed nics for Vms created on XenServer", null),
+ XenServerPVdriverVersion(
"Advanced",
ManagementServer.class,
String.class,
- "xen.pvdriver.version",
+ "xenserver.pvdriver.version",
"xenserver61",
"default Xen PV driver version for registered template, valid value:xenserver56,xenserver61 ",
"xenserver56,xenserver61"),
XenServerHotFix("Advanced",
ManagementServer.class,
Boolean.class,
- "xen.hotfix.enabled",
+ "xenserver.hotfix.enabled",
"false",
- "Enable/Disable xenserver hot fix",
+ "Enable/Disable XenServer hot fix",
null),
// VMware
@@ -1366,7 +1366,7 @@
"Hidden",
ManagementServer.class,
Boolean.class,
- "xen.create.pools.in.pod",
+ "xenserver.create.pools.in.pod",
"false",
"Should we automatically add XenServers into pools that are inside a Pod",
null),
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 6aca4a8..156d95d 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -358,7 +358,7 @@
configValuesForValidation.add("storage.stats.interval");
configValuesForValidation.add("storage.cleanup.interval");
configValuesForValidation.add("wait");
- configValuesForValidation.add("xen.heartbeat.interval");
+ configValuesForValidation.add("xenserver.heartbeat.interval");
configValuesForValidation.add("incorrect.login.attempts.allowed");
}
@@ -502,7 +502,7 @@
}
PreparedStatement pstmt = null;
- if (Config.XenGuestNetwork.key().equalsIgnoreCase(name)) {
+ if (Config.XenServerGuestNetwork.key().equalsIgnoreCase(name)) {
String sql = "update host_details set value=? where name=?";
try {
pstmt = txn.prepareAutoCloseStatement(sql);
@@ -513,7 +513,7 @@
} catch (Throwable e) {
throw new CloudRuntimeException("Failed to update guest.network.device in host_details due to exception ", e);
}
- } else if (Config.XenPrivateNetwork.key().equalsIgnoreCase(name)) {
+ } else if (Config.XenServerPrivateNetwork.key().equalsIgnoreCase(name)) {
String sql = "update host_details set value=? where name=?";
try {
pstmt = txn.prepareAutoCloseStatement(sql);
@@ -524,7 +524,7 @@
} catch (Throwable e) {
throw new CloudRuntimeException("Failed to update private.network.device in host_details due to exception ", e);
}
- } else if (Config.XenPublicNetwork.key().equalsIgnoreCase(name)) {
+ } else if (Config.XenServerPublicNetwork.key().equalsIgnoreCase(name)) {
String sql = "update host_details set value=? where name=?";
try {
pstmt = txn.prepareAutoCloseStatement(sql);
@@ -535,7 +535,7 @@
} catch (Throwable e) {
throw new CloudRuntimeException("Failed to update public.network.device in host_details due to exception ", e);
}
- } else if (Config.XenStorageNetwork1.key().equalsIgnoreCase(name)) {
+ } else if (Config.XenServerStorageNetwork1.key().equalsIgnoreCase(name)) {
String sql = "update host_details set value=? where name=?";
try {
pstmt = txn.prepareAutoCloseStatement(sql);
@@ -546,7 +546,7 @@
} catch (Throwable e) {
throw new CloudRuntimeException("Failed to update storage.network.device1 in host_details due to exception ", e);
}
- } else if (Config.XenStorageNetwork2.key().equals(name)) {
+ } else if (Config.XenServerStorageNetwork2.key().equals(name)) {
String sql = "update host_details set value=? where name=?";
try {
pstmt = txn.prepareAutoCloseStatement(sql);
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index c0791ae..f589870 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -3444,16 +3444,16 @@
String xenLabel = null;
switch (trafficType) {
case Public:
- xenLabel = _configDao.getValue(Config.XenPublicNetwork.key());
+ xenLabel = _configDao.getValue(Config.XenServerPublicNetwork.key());
break;
case Guest:
- xenLabel = _configDao.getValue(Config.XenGuestNetwork.key());
+ xenLabel = _configDao.getValue(Config.XenServerGuestNetwork.key());
break;
case Storage:
- xenLabel = _configDao.getValue(Config.XenStorageNetwork1.key());
+ xenLabel = _configDao.getValue(Config.XenServerStorageNetwork1.key());
break;
case Management:
- xenLabel = _configDao.getValue(Config.XenPrivateNetwork.key());
+ xenLabel = _configDao.getValue(Config.XenServerPrivateNetwork.key());
break;
case Control:
xenLabel = "cloud_link_local_network";
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
index ae418d2..58ffb2f 100644
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
@@ -45,7 +45,7 @@
*
*/
public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkApplianceService {
- static final String RouterTemplateXenCK = "router.template.xen";
+ static final String RouterTemplateXenCK = "router.template.xenserver";
static final String RouterTemplateKvmCK = "router.template.kvm";
static final String RouterTemplateVmwareCK = "router.template.vmware";
static final String RouterTemplateHyperVCK = "router.template.hyperv";
diff --git a/server/src/com/cloud/resource/DiscovererBase.java b/server/src/com/cloud/resource/DiscovererBase.java
index ae2a9c9..b33f3bf 100644
--- a/server/src/com/cloud/resource/DiscovererBase.java
+++ b/server/src/com/cloud/resource/DiscovererBase.java
@@ -137,8 +137,8 @@
params.put("secondary.storage.vm", "false");
params.put("max.template.iso.size", _configDao.getValue(Config.MaxTemplateAndIsoSize.toString()));
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
- params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString()));
- params.put(Config.XenHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenHeartBeatInterval.toString()));
+ params.put(Config.XenServerMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenServerMaxNics.toString()));
+ params.put(Config.XenServerHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenServerHeartBeatInterval.toString()));
return params;
}
diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java
index 40f69aa..bb49867 100755
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@ -361,12 +361,12 @@
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
TransactionLegacy txn = TransactionLegacy.currentTxn();
- String pvdriverversion = Config.XenPVdriverVersion.getDefaultValue();
+ String pvdriverversion = Config.XenServerPVdriverVersion.getDefaultValue();
PreparedStatement pstmt = null;
ResultSet rs1 = null;
ResultSet rs2 = null;
try {
- String oldValue = _configDao.getValue(Config.XenPVdriverVersion.key());
+ String oldValue = _configDao.getValue(Config.XenServerPVdriverVersion.key());
if (oldValue == null) {
String sql = "select resource from host where hypervisor_type='XenServer' and removed is null and status not in ('Error', 'Removed') group by resource";
pstmt = txn.prepareAutoCloseStatement(sql);
@@ -375,17 +375,17 @@
String resouce = rs1.getString(1); //resource column
if (resouce == null)
continue;
- if (resouce.equalsIgnoreCase("com.cloud.hypervisor.xen.resource.XenServer56Resource")
- || resouce.equalsIgnoreCase("com.cloud.hypervisor.xen.resource.XenServer56FP1Resource")
- || resouce.equalsIgnoreCase("com.cloud.hypervisor.xen.resource.XenServer56SP2Resource")
- || resouce.equalsIgnoreCase("com.cloud.hypervisor.xen.resource.XenServer600Resource")
- || resouce.equalsIgnoreCase("com.cloud.hypervisor.xen.resource.XenServer602Resource")) {
+ if (resouce.equalsIgnoreCase("com.cloud.hypervisor.xenserver.resource.XenServer56Resource")
+ || resouce.equalsIgnoreCase("com.cloud.hypervisor.xenserver.resource.XenServer56FP1Resource")
+ || resouce.equalsIgnoreCase("com.cloud.hypervisor.xenserver.resource.XenServer56SP2Resource")
+ || resouce.equalsIgnoreCase("com.cloud.hypervisor.xenserver.resource.XenServer600Resource")
+ || resouce.equalsIgnoreCase("com.cloud.hypervisor.xenserver.resource.XenServer602Resource")) {
pvdriverversion = "xenserver56";
break;
}
}
- _configDao.getValueAndInitIfNotExist(Config.XenPVdriverVersion.key(), Config.XenPVdriverVersion.getCategory(), pvdriverversion,
- Config.XenPVdriverVersion.getDescription());
+ _configDao.getValueAndInitIfNotExist(Config.XenServerPVdriverVersion.key(), Config.XenServerPVdriverVersion.getCategory(), pvdriverversion,
+ Config.XenServerPVdriverVersion.getDescription());
sql = "select id from vm_template where hypervisor_type='XenServer' and format!='ISO' and removed is null";
pstmt = txn.prepareAutoCloseStatement(sql);
rs2 = pstmt.executeQuery();
diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java
index 3465174..68d5775 100755
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/com/cloud/template/TemplateAdapterBase.java
@@ -235,7 +235,7 @@
if (hypervisorType.equals(Hypervisor.HypervisorType.XenServer)) {
if (details == null || !details.containsKey("hypervisortoolsversion") || details.get("hypervisortoolsversion") == null ||
((String)details.get("hypervisortoolsversion")).equalsIgnoreCase("none")) {
- String hpvs = _configDao.getValue(Config.XenPVdriverVersion.key());
+ String hpvs = _configDao.getValue(Config.XenServerPVdriverVersion.key());
if (hpvs != null) {
if (details == null) {
details = new HashMap<String, String>();
diff --git a/server/src/com/cloud/test/PodZoneConfig.java b/server/src/com/cloud/test/PodZoneConfig.java
index cfd8bce..4846fdf 100644
--- a/server/src/com/cloud/test/PodZoneConfig.java
+++ b/server/src/com/cloud/test/PodZoneConfig.java
@@ -408,7 +408,7 @@
String defaultXenStorageNetworkLabel = getDefaultXenNetworkLabel(TrafficType.Storage);
String defaultXenGuestNetworkLabel = getDefaultXenNetworkLabel(TrafficType.Guest);
- String insertTraficType = "INSERT INTO `cloud`.`physical_network_traffic_types` " + "(physical_network_id, traffic_type, xen_network_label) VALUES ( ?, ?, ?)";
+ String insertTraficType = "INSERT INTO `cloud`.`physical_network_traffic_types` " + "(physical_network_id, traffic_type, xenserver_network_label) VALUES ( ?, ?, ?)";
try {
PreparedStatement stmt = txn.prepareAutoCloseStatement(insertTraficType);
@@ -444,16 +444,16 @@
String configName = null;
switch (trafficType) {
case Public:
- configName = "xen.public.network.device";
+ configName = "xenserver.public.network.device";
break;
case Guest:
- configName = "xen.guest.network.device";
+ configName = "xenserver.guest.network.device";
break;
case Storage:
- configName = "xen.storage.network.device1";
+ configName = "xenserver.storage.network.device1";
break;
case Management:
- configName = "xen.private.network.device";
+ configName = "xenserver.private.network.device";
break;
}
diff --git a/server/test/async-job-component.xml b/server/test/async-job-component.xml
index 6c7a6e0..391b089 100644
--- a/server/test/async-job-component.xml
+++ b/server/test/async-job-component.xml
@@ -142,7 +142,7 @@
<adapter name="ClusterService" class="com.cloud.cluster.ClusterServiceServletAdapter" />
</adapters>
<adapters key="com.cloud.resource.Discoverer">
- <adapter name="XenServer" class="com.cloud.resource.xen.XenServerDiscoverer" />
+ <adapter name="XenServer" class="com.cloud.resource.xenserver.XenServerDiscoverer" />
<adapter name="SecondaryStorage"
class="com.cloud.storage.secondary.SecondaryStorageDiscoverer" />
<adapter name="DummyHostServer" class="com.cloud.resource.DummyHostDiscoverer" />
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index f0f5e2c..fe5cd0a 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2091,7 +2091,7 @@
`uuid` varchar(40),
`physical_network_id` bigint unsigned NOT NULL COMMENT 'id of the physical network',
`traffic_type` varchar(32) NOT NULL COMMENT 'type of traffic going through this network',
- `xen_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a XenServer host',
+ `xenserver_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a XenServer host',
`kvm_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a KVM host',
`vmware_network_label` varchar(255) DEFAULT 'vSwitch0' COMMENT 'The network name label of the physical device dedicated to this traffic on a VMware host',
`simulator_network_label` varchar(255) COMMENT 'The name labels needed for identifying the simulator',
diff --git a/setup/db/db/schema-440to450-cleanup.sql b/setup/db/db/schema-440to450-cleanup.sql
index 2345713..d657d2e 100644
--- a/setup/db/db/schema-440to450-cleanup.sql
+++ b/setup/db/db/schema-440to450-cleanup.sql
@@ -19,4 +19,15 @@
-- Schema cleanup from 4.4.0 to 4.5.0
--
+UPDATE `cloud`.`configuration`
+SET name = 'router.template.xenserver'
+Where name = 'router.template.xen';
+UPDATE `cloud`.`configuration`
+SET name = 'xenserver.nics.max',
+description = 'Maximum allowed nics for Vms created on XenServer'
+Where name = 'xen.nics.max';
+
+UPDATE `cloud`.`configuration`
+SET value = 'XenServer'
+Where value = 'Xen';
\ No newline at end of file
diff --git a/setup/db/db/schema-440to450.sql b/setup/db/db/schema-440to450.sql
index 4cc4879..ee419a2 100644
--- a/setup/db/db/schema-440to450.sql
+++ b/setup/db/db/schema-440to450.sql
@@ -223,3 +223,6 @@
`cloud`.`async_job` ON async_job.instance_id = volumes.id
and async_job.instance_type = 'Volume'
and async_job.job_status = 0;
+
+/* As part of the separation of Xen and XenServer, update the column for the network labels */
+ALTER TABLE `cloud`.`physical_network_traffic_types` CHANGE `xen_network_label` `xenserver_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a XenServer host'
\ No newline at end of file
diff --git a/setup/db/server-setup.sql b/setup/db/server-setup.sql
index faab38e..b7f5c3f 100644
--- a/setup/db/server-setup.sql
+++ b/setup/db/server-setup.sql
@@ -23,6 +23,6 @@
/* Configuration Table */
INSERT INTO `cloud`.`configuration` (category, instance, component, name, value, description) VALUES ('Hidden', 'DEFAULT', 'none', 'init', null, null);
--- INSERT INTO `cloud`.`configuration` (category, instance, component, name, value, description) VALUES ('Advanced', 'DEFAULT', 'AgentManager', 'xen.public.network.device', 'public-network', "[OPTIONAL]The name of the Xen network containing the physical network interface that is connected to the public network ");
+-- INSERT INTO `cloud`.`configuration` (category, instance, component, name, value, description) VALUES ('Advanced', 'DEFAULT', 'AgentManager', 'xenserver.public.network.device', 'public-network', "[OPTIONAL]The name of the XenServer network containing the physical network interface that is connected to the public network ");
diff --git a/tools/appliance/README.md b/tools/appliance/README.md
index a7c51c8..ffdf6b2 100644
--- a/tools/appliance/README.md
+++ b/tools/appliance/README.md
@@ -42,7 +42,7 @@
# How to build SystemVMs automatically
-Just run build.sh, it will export archived appliances for KVM, Xen,
+Just run build.sh, it will export archived appliances for KVM, XenServer,
VMWare and HyperV in `dist`:
sh build.sh [systemvmtemplate|systemvmtemplate64]
diff --git a/tools/appliance/build.sh b/tools/appliance/build.sh
index 6d2bd8f..6c03f84 100644
--- a/tools/appliance/build.sh
+++ b/tools/appliance/build.sh
@@ -73,7 +73,7 @@
rm -fr dist *.ova *.vhd *.vdi *.qcow* *.bz2 *.vmdk *.ovf
mkdir dist
-# Export for Xen
+# Export for XenServer
which faketime >/dev/null 2>&1 && which vhd-util >/dev/null 2>&1
if [ $? == 0 ]; then
set -e
@@ -82,9 +82,9 @@
faketime '2010-01-01' vhd-util convert -s 1 -t 2 -i stagefixed.vhd -o $appliance-$branch-xen.vhd
rm *.bak
bzip2 $appliance-$branch-xen.vhd
- echo "$appliance exported for Xen: dist/$appliance-$branch-xen.vhd.bz2"
+ echo "$appliance exported for XenServer: dist/$appliance-$branch-xen.vhd.bz2"
else
- echo "** Skipping $appliance export for Xen: faketime or vhd-util command is missing. **"
+ echo "** Skipping $appliance export for XenServer: faketime or vhd-util command is missing. **"
echo "** faketime source code is available from https://github.com/wolfcw/libfaketime **"
fi
diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg
index fb25d03..74b6366 100644
--- a/tools/devcloud/devcloud-advanced.cfg
+++ b/tools/devcloud/devcloud-advanced.cfg
@@ -32,11 +32,11 @@
"name": "eth0",
"traffictypes": [
{
- "xen": "Pool-wide network associated with eth0",
+ "xenserver": "Pool-wide network associated with eth0",
"typ": "Management"
},
{
- "xen": "Pool-wide network associated with eth0",
+ "xenserver": "Pool-wide network associated with eth0",
"typ": "Guest"
}
],
@@ -56,7 +56,7 @@
"name": "eth1",
"traffictypes": [
{
- "xen": "Pool-wide network associated with eth1",
+ "xenserver": "Pool-wide network associated with eth1",
"typ": "Public"
}
],
diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg
index a1a8cb5..525ad0f 100644
--- a/tools/devcloud/devcloud-advanced_internal-mgt.cfg
+++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg
@@ -32,11 +32,11 @@
"name": "eth0",
"traffictypes": [
{
- "xen": "Pool-wide network associated with eth0",
+ "xenserver": "Pool-wide network associated with eth0",
"typ": "Management"
},
{
- "xen": "Pool-wide network associated with eth0",
+ "xenserver": "Pool-wide network associated with eth0",
"typ": "Guest"
}
],
@@ -56,7 +56,7 @@
"name": "eth1",
"traffictypes": [
{
- "xen": "Pool-wide network associated with eth1",
+ "xenserver": "Pool-wide network associated with eth1",
"typ": "Public"
}
],
diff --git a/tools/marvin/marvin/misc/build/configure.py b/tools/marvin/marvin/misc/build/configure.py
index b571f53..22d1880 100644
--- a/tools/marvin/marvin/misc/build/configure.py
+++ b/tools/marvin/marvin/misc/build/configure.py
@@ -102,7 +102,7 @@
def configureManagementServer(mgmt_host):
"""
- We currently configure all mgmt servers on a single xen HV. In the future
+ We currently configure all mgmt servers on a single xenserver HV. In the future
replace this by launching instances via the API on a IaaS cloud using
desired template
"""
@@ -123,15 +123,15 @@
bash("puppet cert clean %s.%s"%(mgmt_host, DOMAIN))
#Start VM on xenserver
- xenssh = \
- sshClient.SshClient(macinfo["infraxen"]["address"],
+ xenserverssh = \
+ sshClient.SshClient(macinfo["infraxenserver"]["address"],
22, "root",
- macinfo["infraxen"]["password"])
+ macinfo["infraxenserver"]["password"])
logging.debug("bash vm-uninstall.sh -n %s"%(mgmt_host))
- xenssh.execute("xe vm-uninstall force=true vm=%s"%mgmt_host)
+ xenserverssh.execute("xe vm-uninstall force=true vm=%s"%mgmt_host)
logging.debug("bash vm-start.sh -n %s -m %s"%(mgmt_host, mgmt_vm["ethernet"]))
- out = xenssh.execute("bash vm-start.sh -n %s -m %s"%(mgmt_host,
+ out = xenserverssh.execute("bash vm-start.sh -n %s -m %s"%(mgmt_host,
mgmt_vm["ethernet"]))
logging.info("started mgmt server with uuid: %s. Waiting for services .."%out);
@@ -179,7 +179,7 @@
bash("echo '/bin/bash /root/redeploy.sh -s %s -h %s' >> /etc/puppet/modules/cloudstack/files/secseeder.sh"%(spath, hypervisor))
bash("chmod +x /etc/puppet/modules/cloudstack/files/secseeder.sh")
-def refreshHosts(cscfg, hypervisor="xen", profile="xen602"):
+def refreshHosts(cscfg, hypervisor="xenserver", profile="xenserver602"):
"""
Removes cobbler system from previous run.
Creates a new system for current run.
@@ -354,7 +354,7 @@
dest="distro", help="management server distro")
parser.add_argument("-v", "--hypervisor", action="store",
dest="hypervisor", help="hypervisor type")
- parser.add_argument("-p", "--profile", action="store", default="xen602",
+ parser.add_argument("-p", "--profile", action="store", default="xenserver602",
dest="profile", help="cobbler profile for hypervisor")
parser.add_argument("-e","--environment", help="environment properties file",
dest="system", action="store")
diff --git a/tools/marvin/marvin/misc/build/hudson.sh b/tools/marvin/marvin/misc/build/hudson.sh
index d4eb53b..868b868 100644
--- a/tools/marvin/marvin/misc/build/hudson.sh
+++ b/tools/marvin/marvin/misc/build/hudson.sh
@@ -48,8 +48,8 @@
#Deploy the configuration - yes/no
if [[ $DEPLOY == "yes" ]]; then
cd cloud-autodeploy
- if [[ $hypervisor == 'xen' ]];then
- profile='xen602'
+ if [[ $hypervisor == 'xenserver' ]];then
+ profile='xenserver602'
else
profile='rhel63-kvm'
fi
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index c2fa55b..d91c1dd 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -1231,7 +1231,7 @@
'label.welcome.cloud.console': '<fmt:message key="label.welcome.cloud.console" />',
'label.welcome': '<fmt:message key="label.welcome" />',
'label.what.is.cloudstack': '<fmt:message key="label.what.is.cloudstack" />',
-'label.xen.traffic.label': '<fmt:message key="label.xen.traffic.label" />',
+'label.xenserver.traffic.label': '<fmt:message key="label.xenserver.traffic.label" />',
'label.yes': '<fmt:message key="label.yes" />',
'label.zone.details': '<fmt:message key="label.zone.details" />',
'label.zone': '<fmt:message key="label.zone" />',
diff --git a/ui/scripts/docs.js b/ui/scripts/docs.js
index 8c9f514..d86b70f 100755
--- a/ui/scripts/docs.js
+++ b/ui/scripts/docs.js
@@ -335,7 +335,7 @@
externalLink: ''
},
helpDiskOfferingHypervisorSnapshotReserve: {
- desc: 'Hypervisor snapshot reserve space as a percent of a volume (for managed storage using Xen or VMware) (Ex. The value 25 means 25%.)).',
+ desc: 'Hypervisor snapshot reserve space as a percent of a volume (for managed storage using XenServer or VMware) (Ex. The value 25 means 25%.)).',
},
helpDiskOfferingCacheMode: {
desc: 'The write caching mode to use for disks created with this disk offering. This can improve write performance.',
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index ce62936..caf8b17 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -127,8 +127,8 @@
}
});
- if (trafficType.xennetworklabel == null || trafficType.xennetworklabel == 0)
- trafficType.xennetworklabel = dictionary[ 'label.network.label.display.for.blank.value'];
+ if (trafficType.xenservernetworklabel == null || trafficType.xenservernetworklabel == 0)
+ trafficType.xenservernetworklabel = dictionary[ 'label.network.label.display.for.blank.value'];
if (trafficType.kvmnetworklabel == null || trafficType.kvmnetworklabel == 0)
trafficType.kvmnetworklabel = dictionary[ 'label.network.label.display.for.blank.value'];
if (trafficType.vmwarenetworklabel == null || trafficType.vmwarenetworklabel == 0)
@@ -145,8 +145,8 @@
var updateTrafficLabels = function (trafficType, labels, complete) {
var array1 =[];
- if (labels.xennetworklabel != dictionary[ 'label.network.label.display.for.blank.value'])
- array1.push("&xennetworklabel=" + labels.xennetworklabel);
+ if (labels.xenservernetworklabel != dictionary[ 'label.network.label.display.for.blank.value'])
+ array1.push("&xenservernetworklabel=" + labels.xenservernetworklabel);
if (labels.kvmnetworklabel != dictionary[ 'label.network.label.display.for.blank.value'])
array1.push("&kvmnetworklabel=" + labels.kvmnetworklabel);
if (labels.vmwarenetworklabel != dictionary[ 'label.network.label.display.for.blank.value'])
@@ -581,8 +581,8 @@
}
},
{
- xennetworklabel: {
- label: 'label.xen.traffic.label',
+ xenservernetworklabel: {
+ label: 'label.xenserver.traffic.label',
isEditable: true
},
kvmnetworklabel: {
@@ -619,7 +619,7 @@
selectedPublicNetworkObj = items[0];
// Include traffic labels
- selectedPublicNetworkObj.xennetworklabel = trafficType.xennetworklabel;
+ selectedPublicNetworkObj.xenservernetworklabel = trafficType.xenservernetworklabel;
selectedPublicNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel;
selectedPublicNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel;
selectedPublicNetworkObj.ovmnetworklabel = trafficType.ovmnetworklabel;
@@ -889,8 +889,8 @@
}
},
{
- xennetworklabel: {
- label: 'label.xen.traffic.label',
+ xenservernetworklabel: {
+ label: 'label.xenserver.traffic.label',
isEditable: true
},
kvmnetworklabel: {
@@ -925,7 +925,7 @@
var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Storage');
selectedPublicNetworkObj = items[0];
- selectedPublicNetworkObj.xennetworklabel = trafficType.xennetworklabel;
+ selectedPublicNetworkObj.xenservernetworklabel = trafficType.xenservernetworklabel;
selectedPublicNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel;
selectedPublicNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel;
selectedPublicNetworkObj.ovmnetworklabel = trafficType.ovmnetworklabel;
@@ -1101,8 +1101,8 @@
}
},
{
- xennetworklabel: {
- label: 'label.xen.traffic.label',
+ xenservernetworklabel: {
+ label: 'label.xenserver.traffic.label',
isEditable: true
},
kvmnetworklabel: {
@@ -1135,7 +1135,7 @@
var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Management');
- selectedManagementNetworkObj.xennetworklabel = trafficType.xennetworklabel;
+ selectedManagementNetworkObj.xenservernetworklabel = trafficType.xenservernetworklabel;
selectedManagementNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel;
selectedManagementNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel;
selectedManagementNetworkObj.ovmnetworklabel = trafficType.ovmnetworklabel;
@@ -1290,8 +1290,8 @@
},
{
//updateTrafficType API
- xennetworklabel: {
- label: 'label.xen.traffic.label',
+ xenservernetworklabel: {
+ label: 'label.xenserver.traffic.label',
isEditable: true
},
kvmnetworklabel: {
@@ -1343,10 +1343,10 @@
}*/
//traffic type
- var xentrafficlabel, kvmtrafficlabel, vmwaretrafficlabel;
+ var xenservertrafficlabel, kvmtrafficlabel, vmwaretrafficlabel;
var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Guest');
//refresh Guest traffic type
- selectedPhysicalNetworkObj[ "xennetworklabel"] = trafficType.xennetworklabel;
+ selectedPhysicalNetworkObj[ "xenservernetworklabel"] = trafficType.xenservernetworklabel;
selectedPhysicalNetworkObj[ "kvmnetworklabel"] = trafficType.kvmnetworklabel;
selectedPhysicalNetworkObj[ "vmwarenetworklabel"] = trafficType.vmwarenetworklabel;
selectedPhysicalNetworkObj[ "ovmnetworklabel"] = trafficType.ovmnetworklabel;
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 67cc2fb..eafacb5 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -245,7 +245,7 @@
$.ajax({
url: createURL('listConfigurations'),
data: {
- name: 'xen.pvdriver.version'
+ name: 'xenserver.pvdriver.version'
},
async: false,
success: function (json) {