From bdef0c243acf4404ddbfba61a8e667b31ee4f780 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 25 Apr 2018 10:22:48 +0200 Subject: [PATCH 1/4] xenserver: Add support for XS 7.3, 7.4 and XCP-ng 7.4 This adds support for XenServer 7.3 and 7.4, and XCP-ng 7.4 version as hypervisor hosts. Signed-off-by: Rohit Yadav --- .../META-INF/db/schema-41100to41110.sql | 17 ++++++++++++++++- .../discoverer/XcpServerDiscoverer.java | 2 +- .../xenserver/resource/CitrixResourceBase.java | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110.sql b/engine/schema/resources/META-INF/db/schema-41100to41110.sql index 03e76c510c54..acdecfd82217 100644 --- a/engine/schema/resources/META-INF/db/schema-41100to41110.sql +++ b/engine/schema/resources/META-INF/db/schema-41100to41110.sql @@ -78,4 +78,19 @@ 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 d23f7a86c35e..9664686ee92e 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 a233064332b1..84cd16a88027 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 @@ -2645,7 +2645,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"; } From 5a2c88fadc3de49427662f0428713886cb6b136e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 25 Apr 2018 10:54:20 +0200 Subject: [PATCH 2/4] xenserver: new utility and fixes for xcp-ng related SR name Signed-off-by: Rohit Yadav --- .../hypervisor/xenserver/resource/CitrixResourceBase.java | 8 ++++++-- .../xenserver/resource/XenServerStorageProcessor.java | 3 ++- .../wrapper/xenbase/CitrixAttachIsoCommandWrapper.java | 2 +- .../wrapper/xenbase/XenServerUtilitiesHelper.java | 5 +++++ 4 files changed, 14 insertions(+), 4 deletions(-) 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 84cd16a88027..77b0bcb6894d 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 srs = SR.getByNameLabel(conn, "XenServer Tools"); + Set 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); 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 d2ce43e32294..76c09dca8fa6 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 287096fea163..862ff655d6a9 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 9a354064ee63..51fc81732733 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 From 0b7c7c5b6f096178866450b6086f43f6bb57d4aa Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 25 Apr 2018 13:07:49 +0200 Subject: [PATCH 3/4] don't block on apache while patching Signed-off-by: Rohit Yadav --- systemvm/debian/etc/systemd/system/cloud-postinit.service | 2 +- systemvm/debian/opt/cloud/bin/cs/CsApp.py | 2 +- systemvm/debian/opt/cloud/bin/cs/CsHelper.py | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/systemvm/debian/etc/systemd/system/cloud-postinit.service b/systemvm/debian/etc/systemd/system/cloud-postinit.service index 19ddfcc63840..c23516e67ffb 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 031ac0565ab7..575ab2ac5b26 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 241643d9956e..ff404f05f83f 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 From d8ad2f20d7e4bf9ae1f959ec50a4a29597e240d0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 27 Apr 2018 12:51:55 +0200 Subject: [PATCH 4/4] newline rm Signed-off-by: Rohit Yadav --- engine/schema/resources/META-INF/db/schema-41100to41110.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110.sql b/engine/schema/resources/META-INF/db/schema-41100to41110.sql index acdecfd82217..221a4756d300 100644 --- a/engine/schema/resources/META-INF/db/schema-41100to41110.sql +++ b/engine/schema/resources/META-INF/db/schema-41100to41110.sql @@ -82,15 +82,12 @@ UPDATE `cloud`.`guest_os_hypervisor` SET `guest_os_name`='debian5_64Guest' WHERE -- 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';