From: Vipin Balachandran Date: Thu, 30 Jul 2015 07:17:43 +0000 (+0530) Subject: VMware: Deprecate vCenter version less than 5.1 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=05d71803a08d58820f456e1a5954066f48dfa5eb;p=openstack-build%2Fcinder-build.git VMware: Deprecate vCenter version less than 5.1 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 --- diff --git a/cinder/tests/unit/test_vmware_vmdk.py b/cinder/tests/unit/test_vmware_vmdk.py index ca6fef068..e237705ef 100644 --- a/cinder/tests/unit/test_vmware_vmdk.py +++ b/cinder/tests/unit/test_vmware_vmdk.py @@ -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( diff --git a/cinder/volume/drivers/vmware/vmdk.py b/cinder/volume/drivers/vmware/vmdk.py index 93ee673f8..d66c6401b 100644 --- a/cinder/volume/drivers/vmware/vmdk.py +++ b/cinder/volume/drivers/vmware/vmdk.py @@ -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))