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

Reply via email to