]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
vmware: PBM wsdl file configuration
authorSubramanian Neelakantan <subramanian.neelakantan@gmail.com>
Wed, 11 Dec 2013 13:49:37 +0000 (19:19 +0530)
committerSubramanian Neelakantan <subramanian.neelakantan@gmail.com>
Mon, 3 Mar 2014 06:10:06 +0000 (11:40 +0530)
Currently the PBM wsdl files have to be downloaded to the local file
system and needs to be configured in 'pbm_wsdl_location'. If it is
manually configured then PBM feature is enabled.

This patch does away with the manual configuration of
'pbm_wsdl_location'. PBM wsdl files are now shipped with the driver.
VC version is fetched from the backend server and the corresponding
wsdl file is used. If the backend is a VC version that is less than
5.5 then PBM feature is turned off.

Implements: blueprint vmdk-storage-policy-volume-type
Change-Id: I559006b532fa39aab6d54cb0b21d5f7afba62af3

cinder/tests/test_vmware_vmdk.py
cinder/volume/drivers/vmware/vmdk.py
cinder/volume/drivers/vmware/wsdl/5.5/core-types.xsd [new file with mode: 0644]
cinder/volume/drivers/vmware/wsdl/5.5/pbm-messagetypes.xsd [new file with mode: 0644]
cinder/volume/drivers/vmware/wsdl/5.5/pbm-types.xsd [new file with mode: 0644]
cinder/volume/drivers/vmware/wsdl/5.5/pbm.wsdl [new file with mode: 0644]
cinder/volume/drivers/vmware/wsdl/5.5/pbmService.wsdl [new file with mode: 0644]
etc/cinder/cinder.conf.sample

index 682c80a939eaaa69e65aefa5441803ec1282b696..933cdd1e80aaabf814d13c450cbd16d24f944a3a 100644 (file)
@@ -17,6 +17,9 @@
 Test suite for VMware VMDK driver.
 """
 
+from distutils.version import LooseVersion
+import os
+
 import mock
 import mox
 
@@ -1053,34 +1056,88 @@ class VMwareEsxVmdkDriverTestCase(test.TestCase):
 class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
     """Test class for VMwareVcVmdkDriver."""
 
-    PBM_WSDL = '/fake/wsdl/path'
     DEFAULT_PROFILE = 'fakeProfile'
+    DEFAULT_VC_VERSION = '5.5'
 
     def setUp(self):
         super(VMwareVcVmdkDriverTestCase, self).setUp()
-        self._config.pbm_wsdl_location = self.PBM_WSDL
         self._config.pbm_default_policy = self.DEFAULT_PROFILE
+        self._config.vmware_host_version = self.DEFAULT_VC_VERSION
         self._driver = vmdk.VMwareVcVmdkDriver(configuration=self._config)
 
+    def test_get_pbm_wsdl_location(self):
+        # no version returns None
+        wsdl = self._driver._get_pbm_wsdl_location(None)
+        self.assertIsNone(wsdl)
+
+        def expected_wsdl(version):
+            driver_dir = os.path.join(os.path.dirname(__file__), '..',
+                                      'volume', 'drivers', 'vmware')
+            driver_abs_dir = os.path.abspath(driver_dir)
+            return 'file://' + os.path.join(driver_abs_dir, 'wsdl', version,
+                                            'pbmService.wsdl')
+
+        # verify wsdl path for different version strings
+        with mock.patch('os.path.exists') as path_exists:
+            path_exists.return_value = True
+            wsdl = self._driver._get_pbm_wsdl_location(LooseVersion('5'))
+            self.assertEqual(expected_wsdl('5'), wsdl)
+            wsdl = self._driver._get_pbm_wsdl_location(LooseVersion('5.5'))
+            self.assertEqual(expected_wsdl('5.5'), wsdl)
+            wsdl = self._driver._get_pbm_wsdl_location(LooseVersion('5.5.1'))
+            self.assertEqual(expected_wsdl('5.5'), wsdl)
+            # if wsdl path does not exist, then it returns None
+            path_exists.return_value = False
+            wsdl = self._driver._get_pbm_wsdl_location(LooseVersion('5.5'))
+            self.assertIsNone(wsdl)
+
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                'session', new_callable=mock.PropertyMock)
+    def test_get_vc_version(self, session):
+        # test config overrides fetching from VC server
+        version = self._driver._get_vc_version()
+        self.assertEqual(self.DEFAULT_VC_VERSION, version)
+        # explicitly remove config entry
+        self._driver.configuration.vmware_host_version = None
+        session.return_value.vim.service_content.about.version = '6.0.1'
+        version = self._driver._get_vc_version()
+        self.assertEqual(LooseVersion('6.0.1'), version)
+
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                '_get_pbm_wsdl_location')
+    @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
+                '_get_vc_version')
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 'session', new_callable=mock.PropertyMock)
     @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
                 'volumeops', new_callable=mock.PropertyMock)
-    def test_do_setup(self, vol_ops, session):
-        """Test do_setup."""
+    def test_do_setup(self, vol_ops, session, _get_vc_version,
+                      _get_pbm_wsdl_location):
         vol_ops = vol_ops.return_value
         session = session.return_value
-        # pbm_wsdl_location is set and pbm_default_policy is used
+        # pbm is enabled and pbm_default_policy is used
+        _get_vc_version.return_value = LooseVersion('5.5')
+        _get_pbm_wsdl_location.return_value = 'fake_pbm_location'
         self._driver.do_setup(mock.ANY)
         default = self.DEFAULT_PROFILE
         vol_ops.retrieve_profile_id.assert_called_once_with(default)
-        # pbm_wsdl_location is set and pbm_default_policy is wrong
+        self.assertTrue(self._driver._storage_policy_enabled)
+
+        # pbm is enabled and pbm_default_policy is wrong
+        self._driver._storage_policy_enabled = False
+        vol_ops.retrieve_profile_id.reset_mock()
         vol_ops.retrieve_profile_id.return_value = None
         self.assertRaises(error_util.PbmDefaultPolicyDoesNotExist,
                           self._driver.do_setup, mock.ANY)
-        # pbm_wsdl_location is not set
-        self._driver.configuration.pbm_wsdl_location = None
+        vol_ops.retrieve_profile_id.assert_called_once_with(default)
+
+        # pbm is disabled
+        self._driver._storage_policy_enabled = False
+        vol_ops.retrieve_profile_id.reset_mock()
+        _get_vc_version.return_value = LooseVersion('5.0')
         self._driver.do_setup(mock.ANY)
+        self.assertFalse(self._driver._storage_policy_enabled)
+        self.assertFalse(vol_ops.retrieve_profile_id.called)
 
     def test_init_conn_with_instance_and_backing(self):
         """Test initialize_connection with instance and backing."""
index 44603e71c1ec0d6f97a5681ca7e00fc00726f435..3eef28c18d218a008d5a999f23a9b4c385ac733c 100644 (file)
@@ -22,9 +22,13 @@ driver creates a virtual machine for each of the volumes. This virtual
 machine is never powered on and is often referred as the shadow VM.
 """
 
+import distutils.version as dist_version  # pylint: disable=E0611
+import os
+
 from oslo.config import cfg
 
 from cinder import exception
+from cinder.openstack.common import excutils
 from cinder.openstack.common import log as logging
 from cinder import units
 from cinder.volume import driver
@@ -80,18 +84,18 @@ vmdk_opts = [
                     'Query results will be obtained in batches from the '
                     'server and not in one shot. Server may still limit the '
                     'count to something less than the configured value.'),
+    cfg.StrOpt('vmware_host_version',
+               help='Optional string specifying the VMware VC server version. '
+                    'The driver attempts to retrieve the version from VMware '
+                    'VC server. Set this configuration only if you want to '
+                    'override the VC server version.'),
 ]
 
 spbm_opts = [
-    cfg.StrOpt('pbm_wsdl_location',
-               help='PBM service WSDL file location URL. '
-                    'e.g. file:///opt/SDK/spbm/wsdl/pbmService.wsdl. '
-                    'Not setting this will disable storage policy based '
-                    'placement of volumes.'),
     cfg.StrOpt('pbm_default_policy',
-               help='The PBM default policy. If pbm_wsdl_location is set and '
-                    'there is no defined storage policy for the specific '
-                    'request then this policy will be used.'),
+               help='The PBM default policy. If using VC server version 5.5 '
+                    'or above and there is no defined storage policy for the '
+                    'specific request then this policy will be used.'),
 ]
 
 CONF = cfg.CONF
@@ -193,13 +197,16 @@ class VMwareEsxVmdkDriver(driver.VolumeDriver):
             if not getattr(self.configuration, param, None):
                 raise exception.InvalidInput(_("%s not set.") % param)
 
-        # Create the session object for the first time
-        max_objects = self.configuration.vmware_max_objects_retrieval
-        self._volumeops = volumeops.VMwareVolumeOps(self.session, max_objects)
-        LOG.info(_("Successfully setup driver: %(driver)s for "
-                   "server: %(ip)s.") %
-                 {'driver': self.__class__.__name__,
-                  'ip': self.configuration.vmware_host_ip})
+        # Create the session object for the first time for ESX driver
+        driver = self.__class__.__name__
+        if driver == 'VMwareEsxVmdkDriver':
+            max_objects = self.configuration.vmware_max_objects_retrieval
+            self._volumeops = volumeops.VMwareVolumeOps(self.session,
+                                                        max_objects)
+            LOG.info(_("Successfully setup driver: %(driver)s for "
+                       "server: %(ip)s.") %
+                     {'driver': driver,
+                      'ip': self.configuration.vmware_host_ip})
 
     def check_for_setup_error(self):
         pass
@@ -960,6 +967,9 @@ class VMwareEsxVmdkDriver(driver.VolumeDriver):
 class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
     """Manage volumes on VMware VC server."""
 
+    # PBM is enabled only for VC versions 5.5 and above
+    PBM_ENABLED_VC_VERSION = dist_version.LooseVersion('5.5')
+
     def __init__(self, *args, **kwargs):
         super(VMwareVcVmdkDriver, self).__init__(*args, **kwargs)
         self.configuration.append_config_values(spbm_opts)
@@ -974,7 +984,7 @@ class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
             api_retry_count = self.configuration.vmware_api_retry_count
             task_poll_interval = self.configuration.vmware_task_poll_interval
             wsdl_loc = self.configuration.safe_get('vmware_wsdl_location')
-            pbm_wsdl = self.configuration.pbm_wsdl_location
+            pbm_wsdl = self.pbm_wsdl if hasattr(self, 'pbm_wsdl') else None
             self._session = api.VMwareAPISession(ip, username,
                                                  password, api_retry_count,
                                                  task_poll_interval,
@@ -982,29 +992,88 @@ class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
                                                  pbm_wsdl=pbm_wsdl)
         return self._session
 
+    def _get_pbm_wsdl_location(self, vc_version):
+        """Return PBM WSDL file location corresponding to VC version."""
+        if not vc_version:
+            return
+        ver = str(vc_version).split('.')
+        major_minor = ver[0]
+        if len(ver) >= 2:
+            major_minor = 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(_("PBM WSDL file %s is missing!"), pbm_service_wsdl)
+            return
+        pbm_wsdl = 'file://' + pbm_service_wsdl
+        LOG.info(_("Using PBM WSDL location: %s"), pbm_wsdl)
+        return pbm_wsdl
+
+    def _get_vc_version(self):
+        """Connect to VC server and fetch version.
+
+        Can be over-ridden by setting 'vmware_host_version' config.
+        :returns: VC version as a LooseVersion object
+        """
+        version_str = self.configuration.vmware_host_version
+        if version_str:
+            LOG.info(_("Using overridden vmware_host_version from config: "
+                       "%s"), version_str)
+        else:
+            version_str = self.session.vim.service_content.about.version
+            LOG.info(_("Fetched VC server version: %s"), version_str)
+        # convert version_str to LooseVersion and return
+        version = None
+        try:
+            version = dist_version.LooseVersion(version_str)
+        except Exception:
+            with excutils.save_and_reraise_exception():
+                LOG.exception(_("Version string '%s' is not parseable"),
+                              version_str)
+        return 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
-        pbm_wsdl = self.configuration.pbm_wsdl_location
+
+        # Enable pbm only if VC version is greater than 5.5
+        vc_version = self._get_vc_version()
+        if vc_version and vc_version >= self.PBM_ENABLED_VC_VERSION:
+            self.pbm_wsdl = self._get_pbm_wsdl_location(vc_version)
+            if not self.pbm_wsdl:
+                LOG.error(_("Not able to configure PBM for VC server: %s"),
+                          vc_version)
+                raise error_util.VMwareDriverException()
+            self._storage_policy_enabled = True
+            # Destroy current session so that it is recreated with pbm enabled
+            self._session = None
+
+        # recreate session and initialize volumeops
+        max_objects = self.configuration.vmware_max_objects_retrieval
+        self._volumeops = volumeops.VMwareVolumeOps(self.session, max_objects)
+
+        # if default policy is configured verify it exists in VC
         default_policy = self.configuration.pbm_default_policy
-        if not pbm_wsdl:
-            if default_policy:
-                LOG.warn(_("Ignoring %s since pbm_wsdl_location is not "
-                           "set."), default_policy)
-            return
-        # pbm_wsdl is set, so storage policy should be enabled
-        self._storage_policy_enabled = True
-        # now verify the default policy exists in VC
         if default_policy:
-            if not self.volumeops.retrieve_profile_id(default_policy):
-                msg = _("The configured default PBM policy '%s' is not "
-                        "defined on vCenter Server.") % default_policy
-                raise error_util.PbmDefaultPolicyDoesNotExist(message=msg)
+            if not self._storage_policy_enabled:
+                LOG.warn(_("Ignoring default policy '%(policy)s' since "
+                           "Storage Policy Based Management is not "
+                           "enabled on VC version %(ver)s") %
+                         {'policy': default_policy, 'ver': vc_version})
             else:
+                if not self.volumeops.retrieve_profile_id(default_policy):
+                    msg = _("The configured default PBM policy '%s' is not "
+                            "defined on vCenter Server.") % default_policy
+                    raise error_util.PbmDefaultPolicyDoesNotExist(message=msg)
                 LOG.info(_("Successfully verified existence of "
                            "pbm_default_policy: %s."), default_policy)
 
+        LOG.info(_("Successfully setup driver: %(driver)s for server: "
+                   "%(ip)s.") % {'driver': self.__class__.__name__,
+                                 'ip': self.configuration.vmware_host_ip})
+
     def _get_volume_group_folder(self, datacenter):
         """Get volume group folder.
 
diff --git a/cinder/volume/drivers/vmware/wsdl/5.5/core-types.xsd b/cinder/volume/drivers/vmware/wsdl/5.5/core-types.xsd
new file mode 100644 (file)
index 0000000..85c5a1d
--- /dev/null
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!--\r
+   Copyright 2005-2013 VMware, Inc.  All rights reserved.\r
+-->\r
+<schema\r
+   targetNamespace="urn:vim25"\r
+   xmlns="http://www.w3.org/2001/XMLSchema"\r
+   xmlns:vim25="urn:vim25"\r
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+   elementFormDefault="qualified"\r
+>\r
+   <complexType name="DynamicArray">\r
+      <sequence>\r
+         <element name="dynamicType" type="xsd:string" minOccurs="0" />\r
+         <element name="val" type="xsd:anyType" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="DynamicData">\r
+      <sequence>\r
+         <element name="dynamicType" type="xsd:string" minOccurs="0" />\r
+         <element name="dynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="DynamicProperty">\r
+      <sequence>\r
+         <element name="name" type="xsd:string" />\r
+         <element name="val" type="xsd:anyType" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="ArrayOfDynamicProperty">\r
+      <sequence>\r
+         <element name="DynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="KeyAnyValue">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="key" type="xsd:string" />\r
+               <element name="value" type="xsd:anyType" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfKeyAnyValue">\r
+      <sequence>\r
+         <element name="KeyAnyValue" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="LocalizableMessage">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="key" type="xsd:string" />\r
+               <element name="arg" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />\r
+               <element name="message" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfLocalizableMessage">\r
+      <sequence>\r
+         <element name="LocalizableMessage" type="vim25:LocalizableMessage" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="HostCommunication">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="HostNotConnected">\r
+      <complexContent>\r
+         <extension base="vim25:HostCommunication">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="HostNotReachable">\r
+      <complexContent>\r
+         <extension base="vim25:HostCommunication">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="InvalidArgument">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+               <element name="invalidProperty" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="InvalidRequest">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="InvalidType">\r
+      <complexContent>\r
+         <extension base="vim25:InvalidRequest">\r
+            <sequence>\r
+               <element name="argument" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ManagedObjectNotFound">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+               <element name="obj" type="vim25:ManagedObjectReference" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="MethodNotFound">\r
+      <complexContent>\r
+         <extension base="vim25:InvalidRequest">\r
+            <sequence>\r
+               <element name="receiver" type="vim25:ManagedObjectReference" />\r
+               <element name="method" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="NotEnoughLicenses">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="NotImplemented">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="NotSupported">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="RequestCanceled">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="SecurityError">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="SystemError">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+               <element name="reason" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="UnexpectedFault">\r
+      <complexContent>\r
+         <extension base="vim25:RuntimeFault">\r
+            <sequence>\r
+               <element name="faultName" type="xsd:string" />\r
+               <element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="LocalizedMethodFault">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="fault" type="vim25:MethodFault" />\r
+               <element name="localizedMessage" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="MethodFault">\r
+      <sequence>\r
+         <element name="dynamicType" type="xsd:string" minOccurs="0" />\r
+         <element name="dynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />\r
+         <element name="faultCause" type="vim25:LocalizedMethodFault" minOccurs="0" />\r
+         <element name="faultMessage" type="vim25:LocalizableMessage" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="ArrayOfMethodFault">\r
+      <sequence>\r
+         <element name="MethodFault" type="vim25:MethodFault" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="RuntimeFault">\r
+      <complexContent>\r
+         <extension base="vim25:MethodFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ManagedObjectReference">\r
+      <simpleContent>\r
+         <extension base="xsd:string">\r
+            <attribute name="type" type="xsd:string"/>\r
+         </extension>\r
+      </simpleContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfString">\r
+      <sequence>\r
+         <element name="string" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="ArrayOfAnyType">\r
+      <sequence>\r
+         <element name="anyType" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+</schema>\r
diff --git a/cinder/volume/drivers/vmware/wsdl/5.5/pbm-messagetypes.xsd b/cinder/volume/drivers/vmware/wsdl/5.5/pbm-messagetypes.xsd
new file mode 100644 (file)
index 0000000..eeffb3b
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!--\r
+   Copyright 2005-2013 VMware, Inc.  All rights reserved.\r
+-->\r
+<schema\r
+   targetNamespace="urn:pbm"\r
+   xmlns="http://www.w3.org/2001/XMLSchema"\r
+   xmlns:pbm="urn:pbm"\r
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+   xmlns:vim25="urn:vim25"\r
+   elementFormDefault="qualified"\r
+>\r
+   <import namespace="urn:vim25" schemaLocation="core-types.xsd" />\r
+   <include schemaLocation="pbm-types.xsd" />\r
+   <complexType name="PbmRetrieveServiceContentRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCheckComplianceRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />\r
+         <element name="profile" type="pbm:PbmProfileId" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmFetchComplianceResultRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />\r
+         <element name="profile" type="pbm:PbmProfileId" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCheckRollupComplianceRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entity" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmFetchRollupComplianceResultRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entity" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryMatchingHubRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+         <element name="profile" type="pbm:PbmProfileId" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryMatchingHubWithSpecRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+         <element name="createSpec" type="pbm:PbmCapabilityProfileCreateSpec" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCheckCompatibilityRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+         <element name="profile" type="pbm:PbmProfileId" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCheckCompatibilityWithSpecRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+         <element name="profileSpec" type="pbm:PbmCapabilityProfileCreateSpec" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmFetchResourceTypeRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmFetchVendorInfoRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="resourceType" type="pbm:PbmProfileResourceType" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmFetchCapabilityMetadataRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="resourceType" type="pbm:PbmProfileResourceType" minOccurs="0" />\r
+         <element name="vendorUuid" type="xsd:string" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCreateRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="createSpec" type="pbm:PbmCapabilityProfileCreateSpec" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmUpdateRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="profileId" type="pbm:PbmProfileId" />\r
+         <element name="updateSpec" type="pbm:PbmCapabilityProfileUpdateSpec" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmDeleteRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="profileId" type="pbm:PbmProfileId" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryProfileRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="resourceType" type="pbm:PbmProfileResourceType" />\r
+         <element name="profileCategory" type="xsd:string" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmRetrieveContentRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="profileIds" type="pbm:PbmProfileId" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryAssociatedProfilesRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryAssociatedProfileRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="entity" type="pbm:PbmServerObjectRef" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryAssociatedEntityRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="profile" type="pbm:PbmProfileId" />\r
+         <element name="entityType" type="xsd:string" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryDefaultRequirementProfileRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="hub" type="pbm:PbmPlacementHub" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmResetDefaultRequirementProfileRequestType">\r
+      <sequence>\r
+         <element name="_this" type="vim25:ManagedObjectReference" />\r
+         <element name="profile" type="pbm:PbmProfileId" minOccurs="0" />\r
+      </sequence>\r
+   </complexType>\r
+</schema>\r
diff --git a/cinder/volume/drivers/vmware/wsdl/5.5/pbm-types.xsd b/cinder/volume/drivers/vmware/wsdl/5.5/pbm-types.xsd
new file mode 100644 (file)
index 0000000..397c9cf
--- /dev/null
@@ -0,0 +1,729 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!--\r
+   Copyright 2005-2013 VMware, Inc.  All rights reserved.\r
+-->\r
+<schema\r
+   targetNamespace="urn:pbm"\r
+   xmlns="http://www.w3.org/2001/XMLSchema"\r
+   xmlns:pbm="urn:pbm"\r
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+   xmlns:vim25="urn:vim25"\r
+   elementFormDefault="qualified"\r
+>\r
+   <import namespace="urn:vim25" schemaLocation="core-types.xsd" />\r
+   <complexType name="PbmAboutInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" />\r
+               <element name="version" type="xsd:string" />\r
+               <element name="instanceUuid" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmExtendedElementDescription">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="label" type="xsd:string" />\r
+               <element name="summary" type="xsd:string" />\r
+               <element name="key" type="xsd:string" />\r
+               <element name="messageCatalogKeyPrefix" type="xsd:string" />\r
+               <element name="messageArg" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <simpleType name="PbmVvolType">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="Config" />\r
+         <enumeration value="Data" />\r
+         <enumeration value="Swap" />\r
+      </restriction>\r
+   </simpleType>\r
+   <simpleType name="PbmObjectType">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="virtualMachine" />\r
+         <enumeration value="virtualDiskId" />\r
+         <enumeration value="virtualDiskUUID" />\r
+         <enumeration value="datastore" />\r
+         <enumeration value="unknown" />\r
+      </restriction>\r
+   </simpleType>\r
+   <complexType name="PbmServerObjectRef">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="objectType" type="xsd:string" />\r
+               <element name="key" type="xsd:string" />\r
+               <element name="serverUuid" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmServerObjectRef">\r
+      <sequence>\r
+         <element name="PbmServerObjectRef" type="pbm:PbmServerObjectRef" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmServiceInstanceContent">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="aboutInfo" type="pbm:PbmAboutInfo" />\r
+               <element name="sessionManager" type="vim25:ManagedObjectReference" />\r
+               <element name="capabilityMetadataManager" type="vim25:ManagedObjectReference" />\r
+               <element name="profileManager" type="vim25:ManagedObjectReference" />\r
+               <element name="complianceManager" type="vim25:ManagedObjectReference" />\r
+               <element name="placementSolver" type="vim25:ManagedObjectReference" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityInstance">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="id" type="pbm:PbmCapabilityMetadataUniqueId" />\r
+               <element name="constraint" type="pbm:PbmCapabilityConstraintInstance" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityInstance">\r
+      <sequence>\r
+         <element name="PbmCapabilityInstance" type="pbm:PbmCapabilityInstance" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityMetadataUniqueId">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="namespace" type="xsd:string" />\r
+               <element name="id" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityMetadata">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="id" type="pbm:PbmCapabilityMetadataUniqueId" />\r
+               <element name="summary" type="pbm:PbmExtendedElementDescription" />\r
+               <element name="mandatory" type="xsd:boolean" minOccurs="0" />\r
+               <element name="hint" type="xsd:boolean" minOccurs="0" />\r
+               <element name="keyId" type="xsd:string" minOccurs="0" />\r
+               <element name="allowMultipleConstraints" type="xsd:boolean" minOccurs="0" />\r
+               <element name="propertyMetadata" type="pbm:PbmCapabilityPropertyMetadata" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityMetadata">\r
+      <sequence>\r
+         <element name="PbmCapabilityMetadata" type="pbm:PbmCapabilityMetadata" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityConstraintInstance">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="propertyInstance" type="pbm:PbmCapabilityPropertyInstance" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityConstraintInstance">\r
+      <sequence>\r
+         <element name="PbmCapabilityConstraintInstance" type="pbm:PbmCapabilityConstraintInstance" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityGenericTypeInfo">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCapabilityTypeInfo">\r
+            <sequence>\r
+               <element name="genericTypeName" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityPropertyInstance">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="id" type="xsd:string" />\r
+               <element name="value" type="xsd:anyType" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityPropertyInstance">\r
+      <sequence>\r
+         <element name="PbmCapabilityPropertyInstance" type="pbm:PbmCapabilityPropertyInstance" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityPropertyMetadata">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="id" type="xsd:string" />\r
+               <element name="summary" type="pbm:PbmExtendedElementDescription" />\r
+               <element name="mandatory" type="xsd:boolean" />\r
+               <element name="type" type="pbm:PbmCapabilityTypeInfo" minOccurs="0" />\r
+               <element name="defaultValue" type="xsd:anyType" minOccurs="0" />\r
+               <element name="allowedValue" type="xsd:anyType" minOccurs="0" />\r
+               <element name="requirementsTypeHint" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityPropertyMetadata">\r
+      <sequence>\r
+         <element name="PbmCapabilityPropertyMetadata" type="pbm:PbmCapabilityPropertyMetadata" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityTypeInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="typeName" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityMetadataPerCategory">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="subCategory" type="xsd:string" />\r
+               <element name="capabilityMetadata" type="pbm:PbmCapabilityMetadata" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityMetadataPerCategory">\r
+      <sequence>\r
+         <element name="PbmCapabilityMetadataPerCategory" type="pbm:PbmCapabilityMetadataPerCategory" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilitySchemaVendorInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="vendorUuid" type="xsd:string" />\r
+               <element name="info" type="pbm:PbmExtendedElementDescription" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityNamespaceInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="version" type="xsd:string" />\r
+               <element name="namespace" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityVendorResourceTypeInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="resourceType" type="xsd:string" />\r
+               <element name="vendorNamespaceInfo" type="pbm:PbmCapabilityVendorNamespaceInfo" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityVendorResourceTypeInfo">\r
+      <sequence>\r
+         <element name="PbmCapabilityVendorResourceTypeInfo" type="pbm:PbmCapabilityVendorResourceTypeInfo" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityVendorNamespaceInfo">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="vendorInfo" type="pbm:PbmCapabilitySchemaVendorInfo" />\r
+               <element name="namespaceInfo" type="pbm:PbmCapabilityNamespaceInfo" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilityVendorNamespaceInfo">\r
+      <sequence>\r
+         <element name="PbmCapabilityVendorNamespaceInfo" type="pbm:PbmCapabilityVendorNamespaceInfo" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilitySchema">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="vendorInfo" type="pbm:PbmCapabilitySchemaVendorInfo" />\r
+               <element name="namespaceInfo" type="pbm:PbmCapabilityNamespaceInfo" />\r
+               <element name="capabilityMetadataPerCategory" type="pbm:PbmCapabilityMetadataPerCategory" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilitySchema">\r
+      <sequence>\r
+         <element name="PbmCapabilitySchema" type="pbm:PbmCapabilitySchema" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <simpleType name="PbmBuiltinGenericType">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="VMW_RANGE" />\r
+         <enumeration value="VMW_SET" />\r
+      </restriction>\r
+   </simpleType>\r
+   <simpleType name="PbmBuiltinType">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="XSD_LONG" />\r
+         <enumeration value="XSD_SHORT" />\r
+         <enumeration value="XSD_INTEGER" />\r
+         <enumeration value="XSD_INT" />\r
+         <enumeration value="XSD_STRING" />\r
+         <enumeration value="XSD_BOOLEAN" />\r
+         <enumeration value="XSD_DOUBLE" />\r
+         <enumeration value="XSD_DATETIME" />\r
+         <enumeration value="VMW_TIMESPAN" />\r
+      </restriction>\r
+   </simpleType>\r
+   <complexType name="PbmCapabilityDescription">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="description" type="pbm:PbmExtendedElementDescription" />\r
+               <element name="value" type="xsd:anyType" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityDiscreteSet">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="values" type="xsd:anyType" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityRange">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="min" type="xsd:anyType" />\r
+               <element name="max" type="xsd:anyType" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityTimeSpan">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="value" type="xsd:int" />\r
+               <element name="unit" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <simpleType name="PbmCapabilityTimeUnitType">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="SECONDS" />\r
+         <enumeration value="MINUTES" />\r
+         <enumeration value="HOURS" />\r
+         <enumeration value="DAYS" />\r
+         <enumeration value="WEEKS" />\r
+         <enumeration value="MONTHS" />\r
+         <enumeration value="YEARS" />\r
+      </restriction>\r
+   </simpleType>\r
+   <simpleType name="PbmComplianceStatus">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="compliant" />\r
+         <enumeration value="nonCompliant" />\r
+         <enumeration value="unknown" />\r
+         <enumeration value="notApplicable" />\r
+      </restriction>\r
+   </simpleType>\r
+   <complexType name="PbmComplianceResult">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="checkTime" type="xsd:dateTime" />\r
+               <element name="entity" type="pbm:PbmServerObjectRef" />\r
+               <element name="profile" type="pbm:PbmProfileId" minOccurs="0" />\r
+               <element name="complianceStatus" type="xsd:string" />\r
+               <element name="mismatch" type="xsd:boolean" />\r
+               <element name="violatedPolicies" type="pbm:PbmCompliancePolicyStatus" minOccurs="0" maxOccurs="unbounded" />\r
+               <element name="operationalStatus" type="pbm:PbmComplianceOperationalStatus" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmComplianceResult">\r
+      <sequence>\r
+         <element name="PbmComplianceResult" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmComplianceOperationalStatus">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="healthy" type="xsd:boolean" minOccurs="0" />\r
+               <element name="operationETA" type="xsd:dateTime" minOccurs="0" />\r
+               <element name="operationProgress" type="xsd:long" minOccurs="0" />\r
+               <element name="transitional" type="xsd:boolean" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCompliancePolicyStatus">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="expectedValue" type="pbm:PbmCapabilityInstance" />\r
+               <element name="currentValue" type="pbm:PbmCapabilityInstance" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCompliancePolicyStatus">\r
+      <sequence>\r
+         <element name="PbmCompliancePolicyStatus" type="pbm:PbmCompliancePolicyStatus" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmRollupComplianceResult">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="oldestCheckTime" type="xsd:dateTime" />\r
+               <element name="entity" type="pbm:PbmServerObjectRef" />\r
+               <element name="overallComplianceStatus" type="xsd:string" />\r
+               <element name="result" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+               <element name="profileMismatch" type="xsd:boolean" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmRollupComplianceResult">\r
+      <sequence>\r
+         <element name="PbmRollupComplianceResult" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmAlreadyExists">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityProfilePropertyMismatchFault">\r
+      <complexContent>\r
+         <extension base="pbm:PbmPropertyMismatchFault">\r
+            <sequence>\r
+               <element name="resourcePropertyInstance" type="pbm:PbmCapabilityPropertyInstance" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCompatibilityCheckFault">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+               <element name="hub" type="pbm:PbmPlacementHub" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmDefaultProfileAppliesFault">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCompatibilityCheckFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmDuplicateName">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmIncompatibleVendorSpecificRuleSet">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCapabilityProfilePropertyMismatchFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmFaultNotFound">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmFault">\r
+      <complexContent>\r
+         <extension base="vim25:MethodFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmFaultProfileStorageFault">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmPropertyMismatchFault">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCompatibilityCheckFault">\r
+            <sequence>\r
+               <element name="capabilityInstanceId" type="pbm:PbmCapabilityMetadataUniqueId" />\r
+               <element name="requirementPropertyInstance" type="pbm:PbmCapabilityPropertyInstance" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmResourceInUse">\r
+      <complexContent>\r
+         <extension base="pbm:PbmFault">\r
+            <sequence>\r
+               <element name="type" type="xsd:string" minOccurs="0" />\r
+               <element name="name" type="xsd:string" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmPlacementCompatibilityResult">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="hub" type="pbm:PbmPlacementHub" />\r
+               <element name="warning" type="vim25:LocalizedMethodFault" minOccurs="0" maxOccurs="unbounded" />\r
+               <element name="error" type="vim25:LocalizedMethodFault" minOccurs="0" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmPlacementCompatibilityResult">\r
+      <sequence>\r
+         <element name="PbmPlacementCompatibilityResult" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmPlacementHub">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="hubType" type="xsd:string" />\r
+               <element name="hubId" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmPlacementHub">\r
+      <sequence>\r
+         <element name="PbmPlacementHub" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <simpleType name="PbmProfileCategoryEnum">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="REQUIREMENT" />\r
+         <enumeration value="RESOURCE" />\r
+      </restriction>\r
+   </simpleType>\r
+   <complexType name="PbmCapabilityProfile">\r
+      <complexContent>\r
+         <extension base="pbm:PbmProfile">\r
+            <sequence>\r
+               <element name="profileCategory" type="xsd:string" />\r
+               <element name="resourceType" type="pbm:PbmProfileResourceType" />\r
+               <element name="constraints" type="pbm:PbmCapabilityConstraints" />\r
+               <element name="generationId" type="xsd:long" minOccurs="0" />\r
+               <element name="isDefault" type="xsd:boolean" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityProfileCreateSpec">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" />\r
+               <element name="description" type="xsd:string" minOccurs="0" />\r
+               <element name="resourceType" type="pbm:PbmProfileResourceType" />\r
+               <element name="constraints" type="pbm:PbmCapabilityConstraints" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityProfileUpdateSpec">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" minOccurs="0" />\r
+               <element name="description" type="xsd:string" minOccurs="0" />\r
+               <element name="constraints" type="pbm:PbmCapabilityConstraints" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmCapabilityConstraints">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmDefaultCapabilityProfile">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCapabilityProfile">\r
+            <sequence>\r
+               <element name="vvolType" type="xsd:string" maxOccurs="unbounded" />\r
+               <element name="containerId" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="PbmProfile">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="profileId" type="pbm:PbmProfileId" />\r
+               <element name="name" type="xsd:string" />\r
+               <element name="description" type="xsd:string" minOccurs="0" />\r
+               <element name="creationTime" type="xsd:dateTime" />\r
+               <element name="createdBy" type="xsd:string" />\r
+               <element name="lastUpdatedTime" type="xsd:dateTime" />\r
+               <element name="lastUpdatedBy" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmProfile">\r
+      <sequence>\r
+         <element name="PbmProfile" type="pbm:PbmProfile" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmProfileId">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="uniqueId" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmProfileId">\r
+      <sequence>\r
+         <element name="PbmProfileId" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmProfileOperationOutcome">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="profileId" type="pbm:PbmProfileId" />\r
+               <element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmProfileOperationOutcome">\r
+      <sequence>\r
+         <element name="PbmProfileOperationOutcome" type="pbm:PbmProfileOperationOutcome" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmProfileType">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="uniqueId" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmProfileType">\r
+      <sequence>\r
+         <element name="PbmProfileType" type="pbm:PbmProfileType" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmQueryProfileResult">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="object" type="pbm:PbmServerObjectRef" />\r
+               <element name="profileId" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />\r
+               <element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmQueryProfileResult">\r
+      <sequence>\r
+         <element name="PbmQueryProfileResult" type="pbm:PbmQueryProfileResult" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmProfileResourceType">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="resourceType" type="xsd:string" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmProfileResourceType">\r
+      <sequence>\r
+         <element name="PbmProfileResourceType" type="pbm:PbmProfileResourceType" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <simpleType name="PbmProfileResourceTypeEnum">\r
+      <restriction base="xsd:string">\r
+         <enumeration value="STORAGE" />\r
+      </restriction>\r
+   </simpleType>\r
+   <complexType name="PbmCapabilitySubProfile">\r
+      <complexContent>\r
+         <extension base="vim25:DynamicData">\r
+            <sequence>\r
+               <element name="name" type="xsd:string" />\r
+               <element name="capability" type="pbm:PbmCapabilityInstance" maxOccurs="unbounded" />\r
+               <element name="forceProvision" type="xsd:boolean" minOccurs="0" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+   <complexType name="ArrayOfPbmCapabilitySubProfile">\r
+      <sequence>\r
+         <element name="PbmCapabilitySubProfile" type="pbm:PbmCapabilitySubProfile" minOccurs="0" maxOccurs="unbounded" />\r
+      </sequence>\r
+   </complexType>\r
+   <complexType name="PbmCapabilitySubProfileConstraints">\r
+      <complexContent>\r
+         <extension base="pbm:PbmCapabilityConstraints">\r
+            <sequence>\r
+               <element name="subProfiles" type="pbm:PbmCapabilitySubProfile" maxOccurs="unbounded" />\r
+            </sequence>\r
+         </extension>\r
+      </complexContent>\r
+   </complexType>\r
+</schema>\r
diff --git a/cinder/volume/drivers/vmware/wsdl/5.5/pbm.wsdl b/cinder/volume/drivers/vmware/wsdl/5.5/pbm.wsdl
new file mode 100644 (file)
index 0000000..50b2d00
--- /dev/null
@@ -0,0 +1,889 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!--\r
+   Copyright 2005-2013 VMware, Inc.  All rights reserved.\r
+-->\r
+<definitions targetNamespace="urn:pbm"\r
+   xmlns="http://schemas.xmlsoap.org/wsdl/"\r
+   xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"\r
+   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+   xmlns:pbm="urn:pbm"\r
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+>\r
+   <types>\r
+      <schema\r
+         targetNamespace="urn:pbm"\r
+         xmlns="http://www.w3.org/2001/XMLSchema"\r
+         xmlns:pbm="urn:pbm"\r
+         xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+         xmlns:vim25="urn:vim25"\r
+         elementFormDefault="qualified"\r
+      >\r
+         <import namespace="urn:vim25" schemaLocation="core-types.xsd" />\r
+         <include schemaLocation="pbm-messagetypes.xsd" />\r
+         <element name="versionURI" type="xsd:string" />\r
+         <element name="HostCommunicationFault" type="vim25:HostCommunication"/>\r
+         <element name="HostNotConnectedFault" type="vim25:HostNotConnected"/>\r
+         <element name="HostNotReachableFault" type="vim25:HostNotReachable"/>\r
+         <element name="InvalidArgumentFault" type="vim25:InvalidArgument"/>\r
+         <element name="InvalidRequestFault" type="vim25:InvalidRequest"/>\r
+         <element name="InvalidTypeFault" type="vim25:InvalidType"/>\r
+         <element name="ManagedObjectNotFoundFault" type="vim25:ManagedObjectNotFound"/>\r
+         <element name="MethodNotFoundFault" type="vim25:MethodNotFound"/>\r
+         <element name="NotEnoughLicensesFault" type="vim25:NotEnoughLicenses"/>\r
+         <element name="NotImplementedFault" type="vim25:NotImplemented"/>\r
+         <element name="NotSupportedFault" type="vim25:NotSupported"/>\r
+         <element name="RequestCanceledFault" type="vim25:RequestCanceled"/>\r
+         <element name="SecurityErrorFault" type="vim25:SecurityError"/>\r
+         <element name="SystemErrorFault" type="vim25:SystemError"/>\r
+         <element name="UnexpectedFaultFault" type="vim25:UnexpectedFault"/>\r
+         <element name="MethodFaultFault" type="vim25:MethodFault"/>\r
+         <element name="RuntimeFaultFault" type="vim25:RuntimeFault"/>\r
+         <element name="PbmRetrieveServiceContent"  type="pbm:PbmRetrieveServiceContentRequestType" />\r
+         <element name="PbmRetrieveServiceContentResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmServiceInstanceContent" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmCheckCompliance"  type="pbm:PbmCheckComplianceRequestType" />\r
+         <element name="PbmCheckComplianceResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmFetchComplianceResult"  type="pbm:PbmFetchComplianceResultRequestType" />\r
+         <element name="PbmFetchComplianceResultResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmCheckRollupCompliance"  type="pbm:PbmCheckRollupComplianceRequestType" />\r
+         <element name="PbmCheckRollupComplianceResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmFetchRollupComplianceResult"  type="pbm:PbmFetchRollupComplianceResultRequestType" />\r
+         <element name="PbmFetchRollupComplianceResultResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmAlreadyExistsFault" type="pbm:PbmAlreadyExists"/>\r
+         <element name="PbmCapabilityProfilePropertyMismatchFaultFault" type="pbm:PbmCapabilityProfilePropertyMismatchFault"/>\r
+         <element name="PbmCompatibilityCheckFaultFault" type="pbm:PbmCompatibilityCheckFault"/>\r
+         <element name="PbmDefaultProfileAppliesFaultFault" type="pbm:PbmDefaultProfileAppliesFault"/>\r
+         <element name="PbmDuplicateNameFault" type="pbm:PbmDuplicateName"/>\r
+         <element name="PbmIncompatibleVendorSpecificRuleSetFault" type="pbm:PbmIncompatibleVendorSpecificRuleSet"/>\r
+         <element name="PbmFaultNotFoundFault" type="pbm:PbmFaultNotFound"/>\r
+         <element name="PbmFaultFault" type="pbm:PbmFault"/>\r
+         <element name="PbmFaultProfileStorageFaultFault" type="pbm:PbmFaultProfileStorageFault"/>\r
+         <element name="PbmPropertyMismatchFaultFault" type="pbm:PbmPropertyMismatchFault"/>\r
+         <element name="PbmResourceInUseFault" type="pbm:PbmResourceInUse"/>\r
+         <element name="PbmQueryMatchingHub"  type="pbm:PbmQueryMatchingHubRequestType" />\r
+         <element name="PbmQueryMatchingHubResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryMatchingHubWithSpec"  type="pbm:PbmQueryMatchingHubWithSpecRequestType" />\r
+         <element name="PbmQueryMatchingHubWithSpecResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmCheckCompatibility"  type="pbm:PbmCheckCompatibilityRequestType" />\r
+         <element name="PbmCheckCompatibilityResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmCheckCompatibilityWithSpec"  type="pbm:PbmCheckCompatibilityWithSpecRequestType" />\r
+         <element name="PbmCheckCompatibilityWithSpecResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmFetchResourceType"  type="pbm:PbmFetchResourceTypeRequestType" />\r
+         <element name="PbmFetchResourceTypeResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileResourceType" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmFetchVendorInfo"  type="pbm:PbmFetchVendorInfoRequestType" />\r
+         <element name="PbmFetchVendorInfoResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmCapabilityVendorResourceTypeInfo" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmFetchCapabilityMetadata"  type="pbm:PbmFetchCapabilityMetadataRequestType" />\r
+         <element name="PbmFetchCapabilityMetadataResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmCapabilityMetadataPerCategory" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmCreate"  type="pbm:PbmCreateRequestType" />\r
+         <element name="PbmCreateResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileId" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmUpdate"  type="pbm:PbmUpdateRequestType" />\r
+         <element name="PbmUpdateResponse">\r
+            <complexType />\r
+         </element>\r
+         <element name="PbmDelete"  type="pbm:PbmDeleteRequestType" />\r
+         <element name="PbmDeleteResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileOperationOutcome" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryProfile"  type="pbm:PbmQueryProfileRequestType" />\r
+         <element name="PbmQueryProfileResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmRetrieveContent"  type="pbm:PbmRetrieveContentRequestType" />\r
+         <element name="PbmRetrieveContentResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfile" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryAssociatedProfiles"  type="pbm:PbmQueryAssociatedProfilesRequestType" />\r
+         <element name="PbmQueryAssociatedProfilesResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmQueryProfileResult" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryAssociatedProfile"  type="pbm:PbmQueryAssociatedProfileRequestType" />\r
+         <element name="PbmQueryAssociatedProfileResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryAssociatedEntity"  type="pbm:PbmQueryAssociatedEntityRequestType" />\r
+         <element name="PbmQueryAssociatedEntityResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmServerObjectRef" minOccurs="0" maxOccurs="unbounded" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmQueryDefaultRequirementProfile"  type="pbm:PbmQueryDefaultRequirementProfileRequestType" />\r
+         <element name="PbmQueryDefaultRequirementProfileResponse">\r
+            <complexType>\r
+               <sequence>\r
+                  <element name="returnval" type="pbm:PbmProfileId" minOccurs="0" />\r
+               </sequence>\r
+            </complexType>\r
+         </element>\r
+         <element name="PbmResetDefaultRequirementProfile"  type="pbm:PbmResetDefaultRequirementProfileRequestType" />\r
+         <element name="PbmResetDefaultRequirementProfileResponse">\r
+            <complexType />\r
+         </element>\r
+      </schema>\r
+   </types>\r
+   <message name="HostCommunicationFaultMsg">\r
+      <part name="fault" element="pbm:HostCommunicationFault" />\r
+   </message>\r
+   <message name="HostNotConnectedFaultMsg">\r
+      <part name="fault" element="pbm:HostNotConnectedFault" />\r
+   </message>\r
+   <message name="HostNotReachableFaultMsg">\r
+      <part name="fault" element="pbm:HostNotReachableFault" />\r
+   </message>\r
+   <message name="InvalidArgumentFaultMsg">\r
+      <part name="fault" element="pbm:InvalidArgumentFault" />\r
+   </message>\r
+   <message name="InvalidRequestFaultMsg">\r
+      <part name="fault" element="pbm:InvalidRequestFault" />\r
+   </message>\r
+   <message name="InvalidTypeFaultMsg">\r
+      <part name="fault" element="pbm:InvalidTypeFault" />\r
+   </message>\r
+   <message name="ManagedObjectNotFoundFaultMsg">\r
+      <part name="fault" element="pbm:ManagedObjectNotFoundFault" />\r
+   </message>\r
+   <message name="MethodNotFoundFaultMsg">\r
+      <part name="fault" element="pbm:MethodNotFoundFault" />\r
+   </message>\r
+   <message name="NotEnoughLicensesFaultMsg">\r
+      <part name="fault" element="pbm:NotEnoughLicensesFault" />\r
+   </message>\r
+   <message name="NotImplementedFaultMsg">\r
+      <part name="fault" element="pbm:NotImplementedFault" />\r
+   </message>\r
+   <message name="NotSupportedFaultMsg">\r
+      <part name="fault" element="pbm:NotSupportedFault" />\r
+   </message>\r
+   <message name="RequestCanceledFaultMsg">\r
+      <part name="fault" element="pbm:RequestCanceledFault" />\r
+   </message>\r
+   <message name="SecurityErrorFaultMsg">\r
+      <part name="fault" element="pbm:SecurityErrorFault" />\r
+   </message>\r
+   <message name="SystemErrorFaultMsg">\r
+      <part name="fault" element="pbm:SystemErrorFault" />\r
+   </message>\r
+   <message name="UnexpectedFaultFaultMsg">\r
+      <part name="fault" element="pbm:UnexpectedFaultFault" />\r
+   </message>\r
+   <message name="MethodFaultFaultMsg">\r
+      <part name="fault" element="pbm:MethodFaultFault" />\r
+   </message>\r
+   <message name="RuntimeFaultFaultMsg">\r
+      <part name="fault" element="pbm:RuntimeFaultFault" />\r
+   </message>\r
+   <message name="PbmRetrieveServiceContentRequestMsg">\r
+      <part name="parameters" element="pbm:PbmRetrieveServiceContent" />\r
+   </message>\r
+   <message name="PbmRetrieveServiceContentResponseMsg">\r
+      <part name="parameters" element="pbm:PbmRetrieveServiceContentResponse" />\r
+   </message>\r
+   <message name="PbmCheckComplianceRequestMsg">\r
+      <part name="parameters" element="pbm:PbmCheckCompliance" />\r
+   </message>\r
+   <message name="PbmCheckComplianceResponseMsg">\r
+      <part name="parameters" element="pbm:PbmCheckComplianceResponse" />\r
+   </message>\r
+   <message name="PbmFetchComplianceResultRequestMsg">\r
+      <part name="parameters" element="pbm:PbmFetchComplianceResult" />\r
+   </message>\r
+   <message name="PbmFetchComplianceResultResponseMsg">\r
+      <part name="parameters" element="pbm:PbmFetchComplianceResultResponse" />\r
+   </message>\r
+   <message name="PbmCheckRollupComplianceRequestMsg">\r
+      <part name="parameters" element="pbm:PbmCheckRollupCompliance" />\r
+   </message>\r
+   <message name="PbmCheckRollupComplianceResponseMsg">\r
+      <part name="parameters" element="pbm:PbmCheckRollupComplianceResponse" />\r
+   </message>\r
+   <message name="PbmFetchRollupComplianceResultRequestMsg">\r
+      <part name="parameters" element="pbm:PbmFetchRollupComplianceResult" />\r
+   </message>\r
+   <message name="PbmFetchRollupComplianceResultResponseMsg">\r
+      <part name="parameters" element="pbm:PbmFetchRollupComplianceResultResponse" />\r
+   </message>\r
+   <message name="PbmAlreadyExistsFaultMsg">\r
+      <part name="fault" element="pbm:PbmAlreadyExistsFault" />\r
+   </message>\r
+   <message name="PbmCapabilityProfilePropertyMismatchFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmCapabilityProfilePropertyMismatchFaultFault" />\r
+   </message>\r
+   <message name="PbmCompatibilityCheckFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmCompatibilityCheckFaultFault" />\r
+   </message>\r
+   <message name="PbmDefaultProfileAppliesFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmDefaultProfileAppliesFaultFault" />\r
+   </message>\r
+   <message name="PbmDuplicateNameFaultMsg">\r
+      <part name="fault" element="pbm:PbmDuplicateNameFault" />\r
+   </message>\r
+   <message name="PbmIncompatibleVendorSpecificRuleSetFaultMsg">\r
+      <part name="fault" element="pbm:PbmIncompatibleVendorSpecificRuleSetFault" />\r
+   </message>\r
+   <message name="PbmFaultNotFoundFaultMsg">\r
+      <part name="fault" element="pbm:PbmFaultNotFoundFault" />\r
+   </message>\r
+   <message name="PbmFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmFaultFault" />\r
+   </message>\r
+   <message name="PbmFaultProfileStorageFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmFaultProfileStorageFaultFault" />\r
+   </message>\r
+   <message name="PbmPropertyMismatchFaultFaultMsg">\r
+      <part name="fault" element="pbm:PbmPropertyMismatchFaultFault" />\r
+   </message>\r
+   <message name="PbmResourceInUseFaultMsg">\r
+      <part name="fault" element="pbm:PbmResourceInUseFault" />\r
+   </message>\r
+   <message name="PbmQueryMatchingHubRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryMatchingHub" />\r
+   </message>\r
+   <message name="PbmQueryMatchingHubResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryMatchingHubResponse" />\r
+   </message>\r
+   <message name="PbmQueryMatchingHubWithSpecRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryMatchingHubWithSpec" />\r
+   </message>\r
+   <message name="PbmQueryMatchingHubWithSpecResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryMatchingHubWithSpecResponse" />\r
+   </message>\r
+   <message name="PbmCheckCompatibilityRequestMsg">\r
+      <part name="parameters" element="pbm:PbmCheckCompatibility" />\r
+   </message>\r
+   <message name="PbmCheckCompatibilityResponseMsg">\r
+      <part name="parameters" element="pbm:PbmCheckCompatibilityResponse" />\r
+   </message>\r
+   <message name="PbmCheckCompatibilityWithSpecRequestMsg">\r
+      <part name="parameters" element="pbm:PbmCheckCompatibilityWithSpec" />\r
+   </message>\r
+   <message name="PbmCheckCompatibilityWithSpecResponseMsg">\r
+      <part name="parameters" element="pbm:PbmCheckCompatibilityWithSpecResponse" />\r
+   </message>\r
+   <message name="PbmFetchResourceTypeRequestMsg">\r
+      <part name="parameters" element="pbm:PbmFetchResourceType" />\r
+   </message>\r
+   <message name="PbmFetchResourceTypeResponseMsg">\r
+      <part name="parameters" element="pbm:PbmFetchResourceTypeResponse" />\r
+   </message>\r
+   <message name="PbmFetchVendorInfoRequestMsg">\r
+      <part name="parameters" element="pbm:PbmFetchVendorInfo" />\r
+   </message>\r
+   <message name="PbmFetchVendorInfoResponseMsg">\r
+      <part name="parameters" element="pbm:PbmFetchVendorInfoResponse" />\r
+   </message>\r
+   <message name="PbmFetchCapabilityMetadataRequestMsg">\r
+      <part name="parameters" element="pbm:PbmFetchCapabilityMetadata" />\r
+   </message>\r
+   <message name="PbmFetchCapabilityMetadataResponseMsg">\r
+      <part name="parameters" element="pbm:PbmFetchCapabilityMetadataResponse" />\r
+   </message>\r
+   <message name="PbmCreateRequestMsg">\r
+      <part name="parameters" element="pbm:PbmCreate" />\r
+   </message>\r
+   <message name="PbmCreateResponseMsg">\r
+      <part name="parameters" element="pbm:PbmCreateResponse" />\r
+   </message>\r
+   <message name="PbmUpdateRequestMsg">\r
+      <part name="parameters" element="pbm:PbmUpdate" />\r
+   </message>\r
+   <message name="PbmUpdateResponseMsg">\r
+      <part name="parameters" element="pbm:PbmUpdateResponse" />\r
+   </message>\r
+   <message name="PbmDeleteRequestMsg">\r
+      <part name="parameters" element="pbm:PbmDelete" />\r
+   </message>\r
+   <message name="PbmDeleteResponseMsg">\r
+      <part name="parameters" element="pbm:PbmDeleteResponse" />\r
+   </message>\r
+   <message name="PbmQueryProfileRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryProfile" />\r
+   </message>\r
+   <message name="PbmQueryProfileResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryProfileResponse" />\r
+   </message>\r
+   <message name="PbmRetrieveContentRequestMsg">\r
+      <part name="parameters" element="pbm:PbmRetrieveContent" />\r
+   </message>\r
+   <message name="PbmRetrieveContentResponseMsg">\r
+      <part name="parameters" element="pbm:PbmRetrieveContentResponse" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedProfilesRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedProfiles" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedProfilesResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedProfilesResponse" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedProfileRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedProfile" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedProfileResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedProfileResponse" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedEntityRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedEntity" />\r
+   </message>\r
+   <message name="PbmQueryAssociatedEntityResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryAssociatedEntityResponse" />\r
+   </message>\r
+   <message name="PbmQueryDefaultRequirementProfileRequestMsg">\r
+      <part name="parameters" element="pbm:PbmQueryDefaultRequirementProfile" />\r
+   </message>\r
+   <message name="PbmQueryDefaultRequirementProfileResponseMsg">\r
+      <part name="parameters" element="pbm:PbmQueryDefaultRequirementProfileResponse" />\r
+   </message>\r
+   <message name="PbmResetDefaultRequirementProfileRequestMsg">\r
+      <part name="parameters" element="pbm:PbmResetDefaultRequirementProfile" />\r
+   </message>\r
+   <message name="PbmResetDefaultRequirementProfileResponseMsg">\r
+      <part name="parameters" element="pbm:PbmResetDefaultRequirementProfileResponse" />\r
+   </message>\r
+   <portType name="PbmPortType">\r
+      <operation name="PbmRetrieveServiceContent">\r
+         <input message="pbm:PbmRetrieveServiceContentRequestMsg" />\r
+         <output message="pbm:PbmRetrieveServiceContentResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmCheckCompliance">\r
+         <input message="pbm:PbmCheckComplianceRequestMsg" />\r
+         <output message="pbm:PbmCheckComplianceResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmFetchComplianceResult">\r
+         <input message="pbm:PbmFetchComplianceResultRequestMsg" />\r
+         <output message="pbm:PbmFetchComplianceResultResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmCheckRollupCompliance">\r
+         <input message="pbm:PbmCheckRollupComplianceRequestMsg" />\r
+         <output message="pbm:PbmCheckRollupComplianceResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmFetchRollupComplianceResult">\r
+         <input message="pbm:PbmFetchRollupComplianceResultRequestMsg" />\r
+         <output message="pbm:PbmFetchRollupComplianceResultResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryMatchingHub">\r
+         <input message="pbm:PbmQueryMatchingHubRequestMsg" />\r
+         <output message="pbm:PbmQueryMatchingHubResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryMatchingHubWithSpec">\r
+         <input message="pbm:PbmQueryMatchingHubWithSpecRequestMsg" />\r
+         <output message="pbm:PbmQueryMatchingHubWithSpecResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmCheckCompatibility">\r
+         <input message="pbm:PbmCheckCompatibilityRequestMsg" />\r
+         <output message="pbm:PbmCheckCompatibilityResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmCheckCompatibilityWithSpec">\r
+         <input message="pbm:PbmCheckCompatibilityWithSpecRequestMsg" />\r
+         <output message="pbm:PbmCheckCompatibilityWithSpecResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmFetchResourceType">\r
+         <input message="pbm:PbmFetchResourceTypeRequestMsg" />\r
+         <output message="pbm:PbmFetchResourceTypeResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmFetchVendorInfo">\r
+         <input message="pbm:PbmFetchVendorInfoRequestMsg" />\r
+         <output message="pbm:PbmFetchVendorInfoResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmFetchCapabilityMetadata">\r
+         <input message="pbm:PbmFetchCapabilityMetadataRequestMsg" />\r
+         <output message="pbm:PbmFetchCapabilityMetadataResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmCreate">\r
+         <input message="pbm:PbmCreateRequestMsg" />\r
+         <output message="pbm:PbmCreateResponseMsg" />\r
+         <fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>\r
+         <fault name="PbmFaultProfileStorageFaultFault" message="pbm:PbmFaultProfileStorageFaultFaultMsg"/>\r
+         <fault name="PbmDuplicateNameFault" message="pbm:PbmDuplicateNameFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmUpdate">\r
+         <input message="pbm:PbmUpdateRequestMsg" />\r
+         <output message="pbm:PbmUpdateResponseMsg" />\r
+         <fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>\r
+         <fault name="PbmFaultProfileStorageFaultFault" message="pbm:PbmFaultProfileStorageFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmDelete">\r
+         <input message="pbm:PbmDeleteRequestMsg" />\r
+         <output message="pbm:PbmDeleteResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryProfile">\r
+         <input message="pbm:PbmQueryProfileRequestMsg" />\r
+         <output message="pbm:PbmQueryProfileResponseMsg" />\r
+         <fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmRetrieveContent">\r
+         <input message="pbm:PbmRetrieveContentRequestMsg" />\r
+         <output message="pbm:PbmRetrieveContentResponseMsg" />\r
+         <fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedProfiles">\r
+         <input message="pbm:PbmQueryAssociatedProfilesRequestMsg" />\r
+         <output message="pbm:PbmQueryAssociatedProfilesResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedProfile">\r
+         <input message="pbm:PbmQueryAssociatedProfileRequestMsg" />\r
+         <output message="pbm:PbmQueryAssociatedProfileResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedEntity">\r
+         <input message="pbm:PbmQueryAssociatedEntityRequestMsg" />\r
+         <output message="pbm:PbmQueryAssociatedEntityResponseMsg" />\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmQueryDefaultRequirementProfile">\r
+         <input message="pbm:PbmQueryDefaultRequirementProfileRequestMsg" />\r
+         <output message="pbm:PbmQueryDefaultRequirementProfileResponseMsg" />\r
+         <fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>\r
+         <fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+      <operation name="PbmResetDefaultRequirementProfile">\r
+         <input message="pbm:PbmResetDefaultRequirementProfileRequestMsg" />\r
+         <output message="pbm:PbmResetDefaultRequirementProfileResponseMsg" />\r
+         <fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>\r
+      </operation>\r
+   </portType>\r
+   <binding name="PbmBinding" type="pbm:PbmPortType">\r
+      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />\r
+      <operation name="PbmRetrieveServiceContent">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmCheckCompliance">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmFetchComplianceResult">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmCheckRollupCompliance">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmFetchRollupComplianceResult">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryMatchingHub">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryMatchingHubWithSpec">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmCheckCompatibility">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmCheckCompatibilityWithSpec">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmFetchResourceType">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmFetchVendorInfo">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmFetchCapabilityMetadata">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmCreate">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="InvalidArgumentFault">\r
+            <soap:fault name="InvalidArgumentFault" use="literal" />\r
+         </fault>\r
+         <fault name="PbmFaultProfileStorageFaultFault">\r
+            <soap:fault name="PbmFaultProfileStorageFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="PbmDuplicateNameFault">\r
+            <soap:fault name="PbmDuplicateNameFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmUpdate">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="InvalidArgumentFault">\r
+            <soap:fault name="InvalidArgumentFault" use="literal" />\r
+         </fault>\r
+         <fault name="PbmFaultProfileStorageFaultFault">\r
+            <soap:fault name="PbmFaultProfileStorageFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmDelete">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryProfile">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="InvalidArgumentFault">\r
+            <soap:fault name="InvalidArgumentFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmRetrieveContent">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="InvalidArgumentFault">\r
+            <soap:fault name="InvalidArgumentFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedProfiles">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedProfile">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryAssociatedEntity">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmQueryDefaultRequirementProfile">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="InvalidArgumentFault">\r
+            <soap:fault name="InvalidArgumentFault" use="literal" />\r
+         </fault>\r
+         <fault name="PbmFaultFault">\r
+            <soap:fault name="PbmFaultFault" use="literal" />\r
+         </fault>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+      <operation name="PbmResetDefaultRequirementProfile">\r
+         <soap:operation soapAction="urn:pbm/1.0" style="document" />\r
+         <input>\r
+            <soap:body use="literal" />\r
+         </input>\r
+         <output>\r
+            <soap:body use="literal" />\r
+         </output>\r
+         <fault name="RuntimeFault">\r
+            <soap:fault name="RuntimeFault" use="literal" />\r
+         </fault>\r
+      </operation>\r
+   </binding>\r
+</definitions>\r
diff --git a/cinder/volume/drivers/vmware/wsdl/5.5/pbmService.wsdl b/cinder/volume/drivers/vmware/wsdl/5.5/pbmService.wsdl
new file mode 100644 (file)
index 0000000..e129928
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!--\r
+   Copyright 2005-2013 VMware, Inc.  All rights reserved.\r
+-->\r
+<definitions targetNamespace="urn:pbmService"\r
+   xmlns="http://schemas.xmlsoap.org/wsdl/"\r
+   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+   xmlns:interface="urn:pbm"\r
+>\r
+   <import location="pbm.wsdl" namespace="urn:pbm" />\r
+   <service name="PbmService">\r
+      <port binding="interface:PbmBinding" name="PbmPort">\r
+         <soap:address location="http://localhost/pbm/services/pbmService" />\r
+      </port>\r
+   </service>\r
+</definitions>\r
index d2f32770cd61196b3acc868d39cd60d9cd3dcd64..331b65723c25dec854d36c03759d99d71f4af5dc 100644 (file)
 # Options defined in cinder.volume.drivers.vmware.vmdk
 #
 
-# PBM service WSDL file location URL. e.g.
-# file:///opt/SDK/spbm/wsdl/pbmService.wsdl. Not setting this
-# will disable storage policy based placement of volumes.
-# (string value)
-#pbm_wsdl_location=<None>
-
-# The PBM default policy. If pbm_wsdl_location is set and
-# there is no defined storage policy for the specific request
-# then this policy will be used. (string value)
+# The PBM default policy. If using VC server version 5.5 or
+# above and there is no defined storage policy for the
+# specific request then this policy will be used. (string
+# value)
 #pbm_default_policy=<None>
 
 # IP address for connecting to VMware ESX/VC server. (string
 # less than the configured value. (integer value)
 #vmware_max_objects_retrieval=100
 
+# Optional string specifying the VMware VC server version. The
+# driver attempts to retrieve the version from VMware VC
+# server. Set this configuration only if you want to override
+# the VC server version. (string value)
+#vmware_host_version=<None>
+
 
 #
 # Options defined in cinder.volume.drivers.windows.windows