fuel-plugin-xenserver/plugin_source/deployment_scripts/patchset/live-migration-iscsi.patch

65 lines
2.8 KiB
Diff

diff --git a/nova/virt/xenapi/client/session.py b/nova/virt/xenapi/client/session.py
index 70e9bec..80bf235 100644
--- a/nova/virt/xenapi/client/session.py
+++ b/nova/virt/xenapi/client/session.py
@@ -102,8 +102,9 @@ class XenAPISession(object):
self.host_ref = self._get_host_ref()
self.product_version, self.product_brand = \
self._get_product_version_and_brand()
-
self._verify_plugin_version()
+ self.platform_version = self._get_platform_version()
+ self._cached_xsm_sr_relaxed = None
apply_session_helpers(self)
@@ -177,6 +178,15 @@ class XenAPISession(object):
return product_version, product_brand
+ def _get_platform_version(self):
+ """Return a tuple of (major, minor, rev) for the host version"""
+ software_version = self._get_software_version()
+ platform_version_str = software_version.get('platform_version',
+ '0.0.0')
+ platform_version = versionutils.convert_version_to_tuple(
+ platform_version_str)
+ return platform_version
+
def _get_software_version(self):
return self.call_xenapi('host.get_software_version', self.host_ref)
@@ -328,3 +338,19 @@ class XenAPISession(object):
"""
return self.call_xenapi('%s.get_all_records' % record_type).items()
+
+ def is_xsm_sr_check_relaxed(self):
+ if self._cached_xsm_sr_relaxed is None:
+ config_value = self.call_plugin('config_file', 'get_val',
+ key='relax-xsm-sr-check')
+ if not config_value:
+ version_str = '.'.join(str(v) for v in self.platform_version)
+ if versionutils.is_compatible('2.1.0', version_str,
+ same_major=False):
+ self._cached_xsm_sr_relaxed = True
+ else:
+ self._cached_xsm_sr_relaxed = False
+ else:
+ self._cached_xsm_sr_relaxed = config_value.lower() == 'true'
+
+ return self._cached_xsm_sr_relaxed
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index 51d9627..1c93eac 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -2257,7 +2257,7 @@ class VMOps(object):
if len(self._get_iscsi_srs(ctxt, instance_ref)) > 0:
# XAPI must support the relaxed SR check for live migrating with
# iSCSI VBDs
- if not self._is_xsm_sr_check_relaxed():
+ if not self._session.is_xsm_sr_check_relaxed():
raise exception.MigrationError(reason=_('XAPI supporting '
'relax-xsm-sr-check=true required'))