diff --git a/oslo/vmware/pbm.py b/oslo/vmware/pbm.py index 1ac052d..3b5446a 100644 --- a/oslo/vmware/pbm.py +++ b/oslo/vmware/pbm.py @@ -21,8 +21,12 @@ Refer http://goo.gl/GR2o6U for more details. """ import logging +import os import suds.sax.element as element +import urllib +import urlparse +from oslo.vmware.openstack.common.gettextutils import _LW from oslo.vmware import service from oslo.vmware import vim_util @@ -166,3 +170,26 @@ def filter_datastores_by_hubs(hubs, datastores): if ds.value in hub_ids: filtered_dss.append(ds) return filtered_dss + + +def get_pbm_wsdl_location(vc_version): + """Return PBM WSDL file location corresponding to VC version. + + :param vc_version: a dot-separated version string. For example, "1.2". + :return: the pbm wsdl file location. + """ + if not vc_version: + return + ver = vc_version.split('.') + major_minor = ver[0] + if len(ver) >= 2: + major_minor = '%s.%s' % (major_minor, ver[1]) + curr_dir = os.path.abspath(os.path.dirname(__file__)) + pbm_service_wsdl = os.path.join(curr_dir, 'wsdl', major_minor, + 'pbmService.wsdl') + if not os.path.exists(pbm_service_wsdl): + LOG.warn(_LW("PBM WSDL file %s not found."), pbm_service_wsdl) + return + pbm_wsdl = urlparse.urljoin('file:', urllib.pathname2url(pbm_service_wsdl)) + LOG.debug("Using PBM WSDL location: %s.", pbm_wsdl) + return pbm_wsdl diff --git a/oslo/vmware/vim_util.py b/oslo/vmware/vim_util.py index 28e236f..e3f8c2e 100644 --- a/oslo/vmware/vim_util.py +++ b/oslo/vmware/vim_util.py @@ -414,3 +414,12 @@ def register_extension(vim, key, type, label='OpenStack', os_ext.description = desc os_ext.lastHeartbeatTime = timeutils.strtime() vim.client.service.RegisterExtension(extension_manager, os_ext) + + +def get_vc_version(session): + """Return the dot-separated vCenter version string. For example, "1.2". + + :param session: vCenter soap session + :return: vCenter version + """ + return session.vim.service_content.about.version diff --git a/oslo/vmware/wsdl/5.5/core-types.xsd b/oslo/vmware/wsdl/5.5/core-types.xsd new file mode 100644 index 0000000..51aedf4 --- /dev/null +++ b/oslo/vmware/wsdl/5.5/core-types.xsd @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oslo/vmware/wsdl/5.5/pbm-messagetypes.xsd b/oslo/vmware/wsdl/5.5/pbm-messagetypes.xsd new file mode 100644 index 0000000..1f06b9f --- /dev/null +++ b/oslo/vmware/wsdl/5.5/pbm-messagetypes.xsd @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oslo/vmware/wsdl/5.5/pbm-types.xsd b/oslo/vmware/wsdl/5.5/pbm-types.xsd new file mode 100644 index 0000000..e919a2a --- /dev/null +++ b/oslo/vmware/wsdl/5.5/pbm-types.xsd @@ -0,0 +1,729 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oslo/vmware/wsdl/5.5/pbm.wsdl b/oslo/vmware/wsdl/5.5/pbm.wsdl new file mode 100644 index 0000000..dee980f --- /dev/null +++ b/oslo/vmware/wsdl/5.5/pbm.wsdl @@ -0,0 +1,889 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oslo/vmware/wsdl/5.5/pbmService.wsdl b/oslo/vmware/wsdl/5.5/pbmService.wsdl new file mode 100644 index 0000000..ff77383 --- /dev/null +++ b/oslo/vmware/wsdl/5.5/pbmService.wsdl @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/tests/test_pbm.py b/tests/test_pbm.py index f84b971..85b3ef1 100644 --- a/tests/test_pbm.py +++ b/tests/test_pbm.py @@ -17,6 +17,10 @@ Unit tests for PBM utility methods. """ +import os +import urllib +import urlparse + import mock from oslo.vmware import pbm @@ -145,3 +149,27 @@ class PBMUtilityTest(base.TestCase): self.assertEqual(len(hubs), len(filtered_ds)) filtered_ds_values = [ds.value for ds in filtered_ds] self.assertEqual(set(hub_ids), set(filtered_ds_values)) + + def test_get_pbm_wsdl_location(self): + wsdl = pbm.get_pbm_wsdl_location(None) + self.assertIsNone(wsdl) + + def expected_wsdl(version): + driver_dir = os.path.join(os.path.dirname(__file__), '..', + 'oslo', 'vmware') + driver_abs_dir = os.path.abspath(driver_dir) + path = os.path.join(driver_abs_dir, 'wsdl', version, + 'pbmService.wsdl') + return urlparse.urljoin('file:', urllib.pathname2url(path)) + + with mock.patch('os.path.exists') as path_exists: + path_exists.return_value = True + wsdl = pbm.get_pbm_wsdl_location('5') + self.assertEqual(expected_wsdl('5'), wsdl) + wsdl = pbm.get_pbm_wsdl_location('5.5') + self.assertEqual(expected_wsdl('5.5'), wsdl) + wsdl = pbm.get_pbm_wsdl_location('5.5.1') + self.assertEqual(expected_wsdl('5.5'), wsdl) + path_exists.return_value = False + wsdl = pbm.get_pbm_wsdl_location('5.5') + self.assertIsNone(wsdl) diff --git a/tests/test_vim_util.py b/tests/test_vim_util.py index a0ea964..941f29e 100644 --- a/tests/test_vim_util.py +++ b/tests/test_vim_util.py @@ -308,3 +308,14 @@ class VimUtilTest(base.TestCase): service_content = vim.service_content vim.client.service.RegisterExtension.assert_called_once_with( service_content.extensionManager, mock.ANY) + + def test_get_vc_version(self): + session = mock.Mock() + expected_version = '6.0.1' + session.vim.service_content.about.version = expected_version + version = vim_util.get_vc_version(session) + self.assertEqual(expected_version, version) + expected_version = '5.5' + session.vim.service_content.about.version = expected_version + version = vim_util.get_vc_version(session) + self.assertEqual(expected_version, version) diff --git a/tox.ini b/tox.ini index 6d12430..0f9de1c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,4 +1,5 @@ [tox] +skipsdist = True envlist = py26,py27,py33,pep8 [testenv] @@ -6,6 +7,7 @@ setenv = VIRTUAL_ENV={envdir} deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = python setup.py testr --slowest --testr-args='{posargs}' +usedevelop = True [testenv:pep8] commands = flake8