rhtyd closed pull request #2605: xenserver: Add support for XS 7.3, 7.4 and
XCP-ng 7.4
URL: https://github.com/apache/cloudstack/pull/2605
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110.sql
b/engine/schema/resources/META-INF/db/schema-41100to41110.sql
index 03e76c510c5..221a4756d30 100644
--- a/engine/schema/resources/META-INF/db/schema-41100to41110.sql
+++ b/engine/schema/resources/META-INF/db/schema-41100to41110.sql
@@ -78,4 +78,16 @@ UPDATE `cloud`.`guest_os_hypervisor` SET
`guest_os_name`='debian5_64Guest' WHERE
UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest'
WHERE `hypervisor_version`='5.1' AND hypervisor_type='VMware' AND
guest_os_id='15';
UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest'
WHERE `hypervisor_version`='5.5' AND hypervisor_type='VMware' AND
guest_os_id='15';
UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest'
WHERE `hypervisor_version`='6.0' AND hypervisor_type='VMware' AND
guest_os_id='15';
-UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest'
WHERE `hypervisor_version`='6.5' AND hypervisor_type='VMware' AND
guest_os_id='15';
\ No newline at end of file
+UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest'
WHERE `hypervisor_version`='6.5' AND hypervisor_type='VMware' AND
guest_os_id='15';
+
+-- XenServer 7.3
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type,
hypervisor_version, max_guests_limit, max_data_volumes_limit,
storage_motion_supported) values (UUID(), 'XenServer', '7.3.0', 500, 13, 1);
+INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid,hypervisor_type,
hypervisor_version, guest_os_name, guest_os_id, created, is_user_defined)
SELECT UUID(),'Xenserver', '7.3.0', guest_os_name, guest_os_id,
utc_timestamp(), 0 FROM `cloud`.`guest_os_hypervisor` WHERE
hypervisor_type='Xenserver' AND hypervisor_version='7.2.0';
+
+-- XenServer 7.4
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type,
hypervisor_version, max_guests_limit, max_data_volumes_limit,
storage_motion_supported) values (UUID(), 'XenServer', '7.4.0', 500, 13, 1);
+INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid,hypervisor_type,
hypervisor_version, guest_os_name, guest_os_id, created, is_user_defined)
SELECT UUID(),'Xenserver', '7.4.0', guest_os_name, guest_os_id,
utc_timestamp(), 0 FROM `cloud`.`guest_os_hypervisor` WHERE
hypervisor_type='Xenserver' AND hypervisor_version='7.3.0';
+
+-- XCP-NG 7.4
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type,
hypervisor_version, max_guests_limit, max_data_volumes_limit,
storage_motion_supported) values (UUID(), 'XenServer', 'XCP-ng 7.4.0', 500, 13,
1);
+INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid,hypervisor_type,
hypervisor_version, guest_os_name, guest_os_id, created, is_user_defined)
SELECT UUID(),'Xenserver', 'XCP-ng 7.4.0', guest_os_name, guest_os_id,
utc_timestamp(), 0 FROM `cloud`.`guest_os_hypervisor` WHERE
hypervisor_type='Xenserver' AND hypervisor_version='7.4.0';
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 d23f7a86c35..9664686ee92 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
@@ -422,7 +422,7 @@ else if (prodBrand.equals("XenServer") &&
prodVersion.equals("6.2.0")) {
}
} else if (prodBrand.equals("XCP_Kronos")) {
return new XcpOssResource();
- } else if (prodBrand.equals("XenServer")) {
+ } else if (prodBrand.equals("XenServer") ||
prodBrand.equals("XCP-ng")) {
final String[] items = prodVersion.split("\\.");
if ((Integer.parseInt(items[0]) > 6) ||
(Integer.parseInt(items[0]) == 6 &&
Integer.parseInt(items[1]) >= 4)) {
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 a233064332b..77b0bcb6894 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
@@ -1055,9 +1055,13 @@ protected SR createNfsSRbyURI(final Connection conn,
final URI uri, final boolea
public VBD createPatchVbd(final Connection conn, final String vmName,
final VM vm) throws XmlRpcException, XenAPIException {
if (_host.getSystemvmisouuid() == null) {
- final Set<SR> srs = SR.getByNameLabel(conn, "XenServer Tools");
+ Set<SR> srs = SR.getByNameLabel(conn, "XenServer Tools");
if (srs.size() != 1) {
- throw new CloudRuntimeException("There are " + srs.size() + "
SRs with name XenServer Tools");
+ s_logger.debug("Failed to find SR by name 'XenServer Tools',
will try to find 'XCP-ng Tools' SR");
+ srs = SR.getByNameLabel(conn, "XCP-ng Tools");
+ if (srs.size() != 1) {
+ throw new CloudRuntimeException("There are " + srs.size()
+ " SRs with name XenServer Tools");
+ }
}
final SR sr = srs.iterator().next();
sr.scan(conn);
@@ -2645,7 +2649,7 @@ private String actualIsoTemplate(final Connection conn)
throws BadServerResponse
final String[] items = xenVersion.split("\\.");
// guest-tools.iso for XenServer version 7.0+
- if (xenBrand.equals("XenServer") && Integer.parseInt(items[0]) >= 7) {
+ if ((xenBrand.equals("XenServer") || xenBrand.equals("XCP-ng")) &&
Integer.parseInt(items[0]) >= 7) {
return "guest-tools.iso";
}
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
index d2ce43e3229..76c09dca8fa 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
@@ -79,6 +79,7 @@
import com.cloud.exception.InternalErrorException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase.SRType;
+import
com.cloud.hypervisor.xenserver.resource.wrapper.xenbase.XenServerUtilitiesHelper;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
@@ -410,7 +411,7 @@ public Answer dettachIso(final DettachCommand cmd) {
}
}
- if (!sr.getNameLabel(conn).startsWith("XenServer Tools")) {
+ if
(!XenServerUtilitiesHelper.isXenServerToolsSR(sr.getNameLabel(conn))) {
hypervisorResource.removeSR(conn, sr);
}
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
index 287096fea16..862ff655d6a 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
@@ -119,7 +119,7 @@ public Answer execute(final AttachIsoCommand command, final
CitrixResourceBase c
}
}
- if (!sr.getNameLabel(conn).startsWith("XenServer Tools")) {
+ if
(!XenServerUtilitiesHelper.isXenServerToolsSR(sr.getNameLabel(conn))) {
citrixResourceBase.removeSR(conn, sr);
}
diff --git
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
index 9a354064ee6..51fc8173273 100644
---
a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
+++
b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
@@ -20,6 +20,7 @@
import com.cloud.utils.Pair;
import com.cloud.utils.ssh.SshHelper;
+import com.google.common.base.Strings;
/**
@@ -42,4 +43,8 @@ public String buildCommandLine(final String scriptPath, final
String script, fin
return cmdLine.toString();
}
+
+ public static boolean isXenServerToolsSR(final String label) {
+ return !Strings.isNullOrEmpty(label) && (label.startsWith("XenServer
Tools") || label.startsWith("XCP-ng Tools"));
+ }
}
\ No newline at end of file
diff --git a/systemvm/debian/etc/systemd/system/cloud-postinit.service
b/systemvm/debian/etc/systemd/system/cloud-postinit.service
index 19ddfcc6384..c23516e67ff 100644
--- a/systemvm/debian/etc/systemd/system/cloud-postinit.service
+++ b/systemvm/debian/etc/systemd/system/cloud-postinit.service
@@ -1,7 +1,7 @@
[Unit]
Description=CloudStack post-patching init script
After=cloud-early-config.service network.target local-fs.target
-Before=ssh.service apache2.service
+Before=ssh.service
Requires=network.service
[Install]
diff --git a/systemvm/debian/opt/cloud/bin/cs/CsApp.py
b/systemvm/debian/opt/cloud/bin/cs/CsApp.py
index 031ac0565ab..575ab2ac5b2 100755
--- a/systemvm/debian/opt/cloud/bin/cs/CsApp.py
+++ b/systemvm/debian/opt/cloud/bin/cs/CsApp.py
@@ -51,7 +51,7 @@ def setup(self):
file.search("ServerName.*", "\tServerName %s.%s" %
(self.config.cl.get_type(), self.config.get_domain()))
if file.is_changed():
file.commit()
- CsHelper.service("apache2", "restart")
+ CsHelper.execute2("systemctl restart apache2", False)
self.fw.append([
"", "front",
diff --git a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
index 241643d9956..ff404f05f83 100755
--- a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
+++ b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
@@ -211,11 +211,12 @@ def save_iptables(command, iptables_file):
fIptables.close()
-def execute2(command):
+def execute2(command, wait=True):
""" Execute command """
logging.debug("Executing: %s" % command)
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
- p.wait()
+ if wait:
+ p.wait()
return p
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services