]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
VMware: Deprecate vCenter version less than 5.1
authorVipin Balachandran <vbala@vmware.com>
Thu, 30 Jul 2015 07:17:43 +0000 (12:47 +0530)
committerVipin Balachandran <vbala@vmware.com>
Fri, 14 Aug 2015 11:07:20 +0000 (16:37 +0530)
Log a warning if the vCenter server version is less than 5.1.
The plan is to enforce the version in M release.

DocImpact
Running Cinder with a VMware vCenter version less than 5.1 is
deprecated. The minimum required version of vCenter server will
be raised to 5.1 in the 8.0.0 release.

Change-Id: I38f520cace67ddcaf067787683ac47f50a6c0b3f

cinder/tests/unit/test_vmware_vmdk.py
cinder/volume/drivers/vmware/vmdk.py

index ca6fef0680dfdc68c6fbb9f0f998cf2d0cffecef..e237705efd261424bc327121f094090bac90a8b1 100644 (file)
@@ -1748,16 +1748,38 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
         version = self._driver._get_vc_version()
         self.assertEqual(ver.LooseVersion('6.0.1'), version)
 
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.LOG')
+    def test_validate_vcenter_version(self, log):
+        vc_version = ver.LooseVersion('5.5')
+        self._driver._validate_vcenter_version(vc_version)
+        self.assertFalse(log.warning.called)
+
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.LOG')
+    def test_validate_vcenter_version_with_min_supported_version(self, log):
+        vc_version = self._driver.MIN_SUPPORTED_VC_VERSION
+        self._driver._validate_vcenter_version(vc_version)
+        self.assertFalse(log.warning.called)
+
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.LOG')
+    def test_validate_vcenter_version_with_less_than_min_supported_version(
+            self, log):
+        vc_version = ver.LooseVersion('5.0')
+        self._driver._validate_vcenter_version(vc_version)
+        self.assertTrue(log.warning.called)
+
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                '_validate_vcenter_version')
     @mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps')
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 '_get_vc_version')
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 'session', new_callable=mock.PropertyMock)
     def test_do_setup_with_pbm_disabled(self, session, get_vc_version,
-                                        vops_cls):
+                                        vops_cls, validate_vc_version):
         session_obj = mock.Mock(name='session')
         session.return_value = session_obj
-        get_vc_version.return_value = ver.LooseVersion('5.0')
+        vc_version = ver.LooseVersion('5.0')
+        get_vc_version.return_value = vc_version
 
         cluster_refs = mock.Mock()
         cluster_refs.values.return_value = mock.sentinel.cluster_refs
@@ -1773,6 +1795,7 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
 
         self._driver.do_setup(mock.ANY)
 
+        validate_vc_version.assert_called_once_with(vc_version)
         self.assertFalse(self._driver._storage_policy_enabled)
         get_vc_version.assert_called_once_with()
         self.assertEqual(session_obj, self._driver.volumeops._session)
@@ -1780,11 +1803,14 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
         self.assertEqual(mock.sentinel.cluster_refs, self._driver._clusters)
         vops.get_cluster_refs.assert_called_once_with(self.CLUSTERS)
 
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                '_validate_vcenter_version')
     @mock.patch('oslo_vmware.pbm.get_pbm_wsdl_location')
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 '_get_vc_version')
     def test_do_setup_with_invalid_pbm_wsdl(self, get_vc_version,
-                                            get_pbm_wsdl_location):
+                                            get_pbm_wsdl_location,
+                                            validate_vc_version):
         vc_version = ver.LooseVersion('5.5')
         get_vc_version.return_value = vc_version
         get_pbm_wsdl_location.return_value = None
@@ -1793,11 +1819,14 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
                           self._driver.do_setup,
                           mock.ANY)
 
+        validate_vc_version.assert_called_once_with(vc_version)
         self.assertFalse(self._driver._storage_policy_enabled)
         get_vc_version.assert_called_once_with()
         get_pbm_wsdl_location.assert_called_once_with(
             six.text_type(vc_version))
 
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                '_validate_vcenter_version')
     @mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps')
     @mock.patch('oslo_vmware.pbm.get_pbm_wsdl_location')
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
@@ -1805,7 +1834,7 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 'session', new_callable=mock.PropertyMock)
     def test_do_setup(self, session, get_vc_version, get_pbm_wsdl_location,
-                      vops_cls):
+                      vops_cls, validate_vc_version):
         session_obj = mock.Mock(name='session')
         session.return_value = session_obj
 
@@ -1827,6 +1856,7 @@ class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
 
         self._driver.do_setup(mock.ANY)
 
+        validate_vc_version.assert_called_once_with(vc_version)
         self.assertTrue(self._driver._storage_policy_enabled)
         get_vc_version.assert_called_once_with()
         get_pbm_wsdl_location.assert_called_once_with(
index 93ee673f8264cbec9b7ee812c1de7b7715dc3c22..d66c6401bd20a9a287d08c2183e8ff117593966b 100644 (file)
@@ -1811,6 +1811,9 @@ class VMwareEsxVmdkDriver(driver.VolumeDriver):
 class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
     """Manage volumes on VMware VC server."""
 
+    # Minimum supported vCenter version.
+    MIN_SUPPORTED_VC_VERSION = dist_version.LooseVersion('5.1')
+
     # PBM is enabled only for VC versions 5.5 and above
     PBM_ENABLED_VC_VERSION = dist_version.LooseVersion('5.5')
 
@@ -1866,13 +1869,26 @@ class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
                               version_str)
         return version
 
+    def _validate_vcenter_version(self, vc_version):
+        if vc_version < self.MIN_SUPPORTED_VC_VERSION:
+            # TODO(vbala): enforce vCenter version in M release.
+            LOG.warning(
+                _LW('Running Cinder with a VMware vCenter version less than '
+                    '%(min_version)s is deprecated. The minimum required '
+                    'version of vCenter server will be raised to '
+                    '%(min_version)s in the 8.0.0 release.'),
+                {'min_version': self.MIN_SUPPORTED_VC_VERSION})
+
     def do_setup(self, context):
         """Any initialization the volume driver does while starting."""
         super(VMwareVcVmdkDriver, self).do_setup(context)
         # VC specific setup is done here
 
-        # Enable pbm only if VC version is greater than 5.5
+        # Validate vCenter version.
         vc_version = self._get_vc_version()
+        self._validate_vcenter_version(vc_version)
+
+        # Enable pbm only if vCenter version is 5.5+.
         if vc_version and vc_version >= self.PBM_ENABLED_VC_VERSION:
             self.pbm_wsdl = pbm.get_pbm_wsdl_location(
                 six.text_type(vc_version))