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
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)
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
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.'
@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
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(
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')
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))