vmware: PBM wsdl file configuration

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
This commit is contained in:
Subramanian Neelakantan 2013-12-11 19:19:37 +05:30
parent 07ad47ef80
commit 10c5c93925
8 changed files with 2204 additions and 46 deletions

View File

@ -17,6 +17,9 @@
Test suite for VMware VMDK driver. Test suite for VMware VMDK driver.
""" """
from distutils.version import LooseVersion
import os
import mock import mock
import mox import mox
@ -1053,34 +1056,88 @@ class VMwareEsxVmdkDriverTestCase(test.TestCase):
class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase): class VMwareVcVmdkDriverTestCase(VMwareEsxVmdkDriverTestCase):
"""Test class for VMwareVcVmdkDriver.""" """Test class for VMwareVcVmdkDriver."""
PBM_WSDL = '/fake/wsdl/path'
DEFAULT_PROFILE = 'fakeProfile' DEFAULT_PROFILE = 'fakeProfile'
DEFAULT_VC_VERSION = '5.5'
def setUp(self): def setUp(self):
super(VMwareVcVmdkDriverTestCase, self).setUp() super(VMwareVcVmdkDriverTestCase, self).setUp()
self._config.pbm_wsdl_location = self.PBM_WSDL
self._config.pbm_default_policy = self.DEFAULT_PROFILE self._config.pbm_default_policy = self.DEFAULT_PROFILE
self._config.vmware_host_version = self.DEFAULT_VC_VERSION
self._driver = vmdk.VMwareVcVmdkDriver(configuration=self._config) 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.' @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
'session', new_callable=mock.PropertyMock) 'session', new_callable=mock.PropertyMock)
@mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.' @mock.patch('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver.'
'volumeops', new_callable=mock.PropertyMock) 'volumeops', new_callable=mock.PropertyMock)
def test_do_setup(self, vol_ops, session): def test_do_setup(self, vol_ops, session, _get_vc_version,
"""Test do_setup.""" _get_pbm_wsdl_location):
vol_ops = vol_ops.return_value vol_ops = vol_ops.return_value
session = session.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) self._driver.do_setup(mock.ANY)
default = self.DEFAULT_PROFILE default = self.DEFAULT_PROFILE
vol_ops.retrieve_profile_id.assert_called_once_with(default) 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 vol_ops.retrieve_profile_id.return_value = None
self.assertRaises(error_util.PbmDefaultPolicyDoesNotExist, self.assertRaises(error_util.PbmDefaultPolicyDoesNotExist,
self._driver.do_setup, mock.ANY) self._driver.do_setup, mock.ANY)
# pbm_wsdl_location is not set vol_ops.retrieve_profile_id.assert_called_once_with(default)
self._driver.configuration.pbm_wsdl_location = None
# 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._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): def test_init_conn_with_instance_and_backing(self):
"""Test initialize_connection with instance and backing.""" """Test initialize_connection with instance and backing."""

View 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. 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 oslo.config import cfg
from cinder import exception from cinder import exception
from cinder.openstack.common import excutils
from cinder.openstack.common import log as logging from cinder.openstack.common import log as logging
from cinder import units from cinder import units
from cinder.volume import driver from cinder.volume import driver
@ -80,18 +84,18 @@ vmdk_opts = [
'Query results will be obtained in batches from the ' 'Query results will be obtained in batches from the '
'server and not in one shot. Server may still limit the ' 'server and not in one shot. Server may still limit the '
'count to something less than the configured value.'), '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 = [ 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', cfg.StrOpt('pbm_default_policy',
help='The PBM default policy. If pbm_wsdl_location is set and ' help='The PBM default policy. If using VC server version 5.5 '
'there is no defined storage policy for the specific ' 'or above and there is no defined storage policy for the '
'request then this policy will be used.'), 'specific request then this policy will be used.'),
] ]
CONF = cfg.CONF CONF = cfg.CONF
@ -193,13 +197,16 @@ class VMwareEsxVmdkDriver(driver.VolumeDriver):
if not getattr(self.configuration, param, None): if not getattr(self.configuration, param, None):
raise exception.InvalidInput(_("%s not set.") % param) raise exception.InvalidInput(_("%s not set.") % param)
# Create the session object for the first time # Create the session object for the first time for ESX driver
max_objects = self.configuration.vmware_max_objects_retrieval driver = self.__class__.__name__
self._volumeops = volumeops.VMwareVolumeOps(self.session, max_objects) if driver == 'VMwareEsxVmdkDriver':
LOG.info(_("Successfully setup driver: %(driver)s for " max_objects = self.configuration.vmware_max_objects_retrieval
"server: %(ip)s.") % self._volumeops = volumeops.VMwareVolumeOps(self.session,
{'driver': self.__class__.__name__, max_objects)
'ip': self.configuration.vmware_host_ip}) 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): def check_for_setup_error(self):
pass pass
@ -960,6 +967,9 @@ class VMwareEsxVmdkDriver(driver.VolumeDriver):
class VMwareVcVmdkDriver(VMwareEsxVmdkDriver): class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
"""Manage volumes on VMware VC server.""" """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): def __init__(self, *args, **kwargs):
super(VMwareVcVmdkDriver, self).__init__(*args, **kwargs) super(VMwareVcVmdkDriver, self).__init__(*args, **kwargs)
self.configuration.append_config_values(spbm_opts) self.configuration.append_config_values(spbm_opts)
@ -974,7 +984,7 @@ class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
api_retry_count = self.configuration.vmware_api_retry_count api_retry_count = self.configuration.vmware_api_retry_count
task_poll_interval = self.configuration.vmware_task_poll_interval task_poll_interval = self.configuration.vmware_task_poll_interval
wsdl_loc = self.configuration.safe_get('vmware_wsdl_location') 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, self._session = api.VMwareAPISession(ip, username,
password, api_retry_count, password, api_retry_count,
task_poll_interval, task_poll_interval,
@ -982,29 +992,88 @@ class VMwareVcVmdkDriver(VMwareEsxVmdkDriver):
pbm_wsdl=pbm_wsdl) pbm_wsdl=pbm_wsdl)
return self._session 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): def do_setup(self, context):
"""Any initialization the volume driver does while starting.""" """Any initialization the volume driver does while starting."""
super(VMwareVcVmdkDriver, self).do_setup(context) super(VMwareVcVmdkDriver, self).do_setup(context)
# VC specific setup is done here # 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 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 default_policy:
if not self.volumeops.retrieve_profile_id(default_policy): if not self._storage_policy_enabled:
msg = _("The configured default PBM policy '%s' is not " LOG.warn(_("Ignoring default policy '%(policy)s' since "
"defined on vCenter Server.") % default_policy "Storage Policy Based Management is not "
raise error_util.PbmDefaultPolicyDoesNotExist(message=msg) "enabled on VC version %(ver)s") %
{'policy': default_policy, 'ver': vc_version})
else: 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 " LOG.info(_("Successfully verified existence of "
"pbm_default_policy: %s."), default_policy) "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): def _get_volume_group_folder(self, datacenter):
"""Get volume group folder. """Get volume group folder.

View File

@ -0,0 +1,242 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2005-2013 VMware, Inc. All rights reserved.
-->
<schema
targetNamespace="urn:vim25"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:vim25="urn:vim25"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
>
<complexType name="DynamicArray">
<sequence>
<element name="dynamicType" type="xsd:string" minOccurs="0" />
<element name="val" type="xsd:anyType" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="DynamicData">
<sequence>
<element name="dynamicType" type="xsd:string" minOccurs="0" />
<element name="dynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="DynamicProperty">
<sequence>
<element name="name" type="xsd:string" />
<element name="val" type="xsd:anyType" />
</sequence>
</complexType>
<complexType name="ArrayOfDynamicProperty">
<sequence>
<element name="DynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="KeyAnyValue">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="key" type="xsd:string" />
<element name="value" type="xsd:anyType" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfKeyAnyValue">
<sequence>
<element name="KeyAnyValue" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="LocalizableMessage">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="key" type="xsd:string" />
<element name="arg" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />
<element name="message" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfLocalizableMessage">
<sequence>
<element name="LocalizableMessage" type="vim25:LocalizableMessage" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="HostCommunication">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="HostNotConnected">
<complexContent>
<extension base="vim25:HostCommunication">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="HostNotReachable">
<complexContent>
<extension base="vim25:HostCommunication">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="InvalidArgument">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
<element name="invalidProperty" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="InvalidRequest">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="InvalidType">
<complexContent>
<extension base="vim25:InvalidRequest">
<sequence>
<element name="argument" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ManagedObjectNotFound">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
<element name="obj" type="vim25:ManagedObjectReference" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="MethodNotFound">
<complexContent>
<extension base="vim25:InvalidRequest">
<sequence>
<element name="receiver" type="vim25:ManagedObjectReference" />
<element name="method" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="NotEnoughLicenses">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="NotImplemented">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="NotSupported">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="RequestCanceled">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="SecurityError">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="SystemError">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
<element name="reason" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="UnexpectedFault">
<complexContent>
<extension base="vim25:RuntimeFault">
<sequence>
<element name="faultName" type="xsd:string" />
<element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="LocalizedMethodFault">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="fault" type="vim25:MethodFault" />
<element name="localizedMessage" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="MethodFault">
<sequence>
<element name="dynamicType" type="xsd:string" minOccurs="0" />
<element name="dynamicProperty" type="vim25:DynamicProperty" minOccurs="0" maxOccurs="unbounded" />
<element name="faultCause" type="vim25:LocalizedMethodFault" minOccurs="0" />
<element name="faultMessage" type="vim25:LocalizableMessage" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="ArrayOfMethodFault">
<sequence>
<element name="MethodFault" type="vim25:MethodFault" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="RuntimeFault">
<complexContent>
<extension base="vim25:MethodFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ManagedObjectReference">
<simpleContent>
<extension base="xsd:string">
<attribute name="type" type="xsd:string"/>
</extension>
</simpleContent>
</complexType>
<complexType name="ArrayOfString">
<sequence>
<element name="string" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="ArrayOfAnyType">
<sequence>
<element name="anyType" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</schema>

View File

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2005-2013 VMware, Inc. All rights reserved.
-->
<schema
targetNamespace="urn:pbm"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:pbm="urn:pbm"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:vim25="urn:vim25"
elementFormDefault="qualified"
>
<import namespace="urn:vim25" schemaLocation="core-types.xsd" />
<include schemaLocation="pbm-types.xsd" />
<complexType name="PbmRetrieveServiceContentRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
</sequence>
</complexType>
<complexType name="PbmCheckComplianceRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />
<element name="profile" type="pbm:PbmProfileId" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmFetchComplianceResultRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />
<element name="profile" type="pbm:PbmProfileId" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmCheckRollupComplianceRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entity" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmFetchRollupComplianceResultRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entity" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmQueryMatchingHubRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
<element name="profile" type="pbm:PbmProfileId" />
</sequence>
</complexType>
<complexType name="PbmQueryMatchingHubWithSpecRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
<element name="createSpec" type="pbm:PbmCapabilityProfileCreateSpec" />
</sequence>
</complexType>
<complexType name="PbmCheckCompatibilityRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
<element name="profile" type="pbm:PbmProfileId" />
</sequence>
</complexType>
<complexType name="PbmCheckCompatibilityWithSpecRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="hubsToSearch" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
<element name="profileSpec" type="pbm:PbmCapabilityProfileCreateSpec" />
</sequence>
</complexType>
<complexType name="PbmFetchResourceTypeRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
</sequence>
</complexType>
<complexType name="PbmFetchVendorInfoRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="resourceType" type="pbm:PbmProfileResourceType" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmFetchCapabilityMetadataRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="resourceType" type="pbm:PbmProfileResourceType" minOccurs="0" />
<element name="vendorUuid" type="xsd:string" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmCreateRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="createSpec" type="pbm:PbmCapabilityProfileCreateSpec" />
</sequence>
</complexType>
<complexType name="PbmUpdateRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="profileId" type="pbm:PbmProfileId" />
<element name="updateSpec" type="pbm:PbmCapabilityProfileUpdateSpec" />
</sequence>
</complexType>
<complexType name="PbmDeleteRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="profileId" type="pbm:PbmProfileId" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmQueryProfileRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="resourceType" type="pbm:PbmProfileResourceType" />
<element name="profileCategory" type="xsd:string" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmRetrieveContentRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="profileIds" type="pbm:PbmProfileId" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmQueryAssociatedProfilesRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entities" type="pbm:PbmServerObjectRef" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmQueryAssociatedProfileRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="entity" type="pbm:PbmServerObjectRef" />
</sequence>
</complexType>
<complexType name="PbmQueryAssociatedEntityRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="profile" type="pbm:PbmProfileId" />
<element name="entityType" type="xsd:string" minOccurs="0" />
</sequence>
</complexType>
<complexType name="PbmQueryDefaultRequirementProfileRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="hub" type="pbm:PbmPlacementHub" />
</sequence>
</complexType>
<complexType name="PbmResetDefaultRequirementProfileRequestType">
<sequence>
<element name="_this" type="vim25:ManagedObjectReference" />
<element name="profile" type="pbm:PbmProfileId" minOccurs="0" />
</sequence>
</complexType>
</schema>

View File

@ -0,0 +1,729 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2005-2013 VMware, Inc. All rights reserved.
-->
<schema
targetNamespace="urn:pbm"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:pbm="urn:pbm"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:vim25="urn:vim25"
elementFormDefault="qualified"
>
<import namespace="urn:vim25" schemaLocation="core-types.xsd" />
<complexType name="PbmAboutInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="name" type="xsd:string" />
<element name="version" type="xsd:string" />
<element name="instanceUuid" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmExtendedElementDescription">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="label" type="xsd:string" />
<element name="summary" type="xsd:string" />
<element name="key" type="xsd:string" />
<element name="messageCatalogKeyPrefix" type="xsd:string" />
<element name="messageArg" type="vim25:KeyAnyValue" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<simpleType name="PbmVvolType">
<restriction base="xsd:string">
<enumeration value="Config" />
<enumeration value="Data" />
<enumeration value="Swap" />
</restriction>
</simpleType>
<simpleType name="PbmObjectType">
<restriction base="xsd:string">
<enumeration value="virtualMachine" />
<enumeration value="virtualDiskId" />
<enumeration value="virtualDiskUUID" />
<enumeration value="datastore" />
<enumeration value="unknown" />
</restriction>
</simpleType>
<complexType name="PbmServerObjectRef">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="objectType" type="xsd:string" />
<element name="key" type="xsd:string" />
<element name="serverUuid" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmServerObjectRef">
<sequence>
<element name="PbmServerObjectRef" type="pbm:PbmServerObjectRef" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmServiceInstanceContent">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="aboutInfo" type="pbm:PbmAboutInfo" />
<element name="sessionManager" type="vim25:ManagedObjectReference" />
<element name="capabilityMetadataManager" type="vim25:ManagedObjectReference" />
<element name="profileManager" type="vim25:ManagedObjectReference" />
<element name="complianceManager" type="vim25:ManagedObjectReference" />
<element name="placementSolver" type="vim25:ManagedObjectReference" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityInstance">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="id" type="pbm:PbmCapabilityMetadataUniqueId" />
<element name="constraint" type="pbm:PbmCapabilityConstraintInstance" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityInstance">
<sequence>
<element name="PbmCapabilityInstance" type="pbm:PbmCapabilityInstance" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityMetadataUniqueId">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="namespace" type="xsd:string" />
<element name="id" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityMetadata">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="id" type="pbm:PbmCapabilityMetadataUniqueId" />
<element name="summary" type="pbm:PbmExtendedElementDescription" />
<element name="mandatory" type="xsd:boolean" minOccurs="0" />
<element name="hint" type="xsd:boolean" minOccurs="0" />
<element name="keyId" type="xsd:string" minOccurs="0" />
<element name="allowMultipleConstraints" type="xsd:boolean" minOccurs="0" />
<element name="propertyMetadata" type="pbm:PbmCapabilityPropertyMetadata" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityMetadata">
<sequence>
<element name="PbmCapabilityMetadata" type="pbm:PbmCapabilityMetadata" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityConstraintInstance">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="propertyInstance" type="pbm:PbmCapabilityPropertyInstance" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityConstraintInstance">
<sequence>
<element name="PbmCapabilityConstraintInstance" type="pbm:PbmCapabilityConstraintInstance" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityGenericTypeInfo">
<complexContent>
<extension base="pbm:PbmCapabilityTypeInfo">
<sequence>
<element name="genericTypeName" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityPropertyInstance">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="id" type="xsd:string" />
<element name="value" type="xsd:anyType" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityPropertyInstance">
<sequence>
<element name="PbmCapabilityPropertyInstance" type="pbm:PbmCapabilityPropertyInstance" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityPropertyMetadata">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="id" type="xsd:string" />
<element name="summary" type="pbm:PbmExtendedElementDescription" />
<element name="mandatory" type="xsd:boolean" />
<element name="type" type="pbm:PbmCapabilityTypeInfo" minOccurs="0" />
<element name="defaultValue" type="xsd:anyType" minOccurs="0" />
<element name="allowedValue" type="xsd:anyType" minOccurs="0" />
<element name="requirementsTypeHint" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityPropertyMetadata">
<sequence>
<element name="PbmCapabilityPropertyMetadata" type="pbm:PbmCapabilityPropertyMetadata" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityTypeInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="typeName" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityMetadataPerCategory">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="subCategory" type="xsd:string" />
<element name="capabilityMetadata" type="pbm:PbmCapabilityMetadata" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityMetadataPerCategory">
<sequence>
<element name="PbmCapabilityMetadataPerCategory" type="pbm:PbmCapabilityMetadataPerCategory" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilitySchemaVendorInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="vendorUuid" type="xsd:string" />
<element name="info" type="pbm:PbmExtendedElementDescription" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityNamespaceInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="version" type="xsd:string" />
<element name="namespace" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityVendorResourceTypeInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="resourceType" type="xsd:string" />
<element name="vendorNamespaceInfo" type="pbm:PbmCapabilityVendorNamespaceInfo" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityVendorResourceTypeInfo">
<sequence>
<element name="PbmCapabilityVendorResourceTypeInfo" type="pbm:PbmCapabilityVendorResourceTypeInfo" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilityVendorNamespaceInfo">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="vendorInfo" type="pbm:PbmCapabilitySchemaVendorInfo" />
<element name="namespaceInfo" type="pbm:PbmCapabilityNamespaceInfo" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilityVendorNamespaceInfo">
<sequence>
<element name="PbmCapabilityVendorNamespaceInfo" type="pbm:PbmCapabilityVendorNamespaceInfo" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilitySchema">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="vendorInfo" type="pbm:PbmCapabilitySchemaVendorInfo" />
<element name="namespaceInfo" type="pbm:PbmCapabilityNamespaceInfo" />
<element name="capabilityMetadataPerCategory" type="pbm:PbmCapabilityMetadataPerCategory" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilitySchema">
<sequence>
<element name="PbmCapabilitySchema" type="pbm:PbmCapabilitySchema" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<simpleType name="PbmBuiltinGenericType">
<restriction base="xsd:string">
<enumeration value="VMW_RANGE" />
<enumeration value="VMW_SET" />
</restriction>
</simpleType>
<simpleType name="PbmBuiltinType">
<restriction base="xsd:string">
<enumeration value="XSD_LONG" />
<enumeration value="XSD_SHORT" />
<enumeration value="XSD_INTEGER" />
<enumeration value="XSD_INT" />
<enumeration value="XSD_STRING" />
<enumeration value="XSD_BOOLEAN" />
<enumeration value="XSD_DOUBLE" />
<enumeration value="XSD_DATETIME" />
<enumeration value="VMW_TIMESPAN" />
</restriction>
</simpleType>
<complexType name="PbmCapabilityDescription">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="description" type="pbm:PbmExtendedElementDescription" />
<element name="value" type="xsd:anyType" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityDiscreteSet">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="values" type="xsd:anyType" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityRange">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="min" type="xsd:anyType" />
<element name="max" type="xsd:anyType" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityTimeSpan">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="value" type="xsd:int" />
<element name="unit" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<simpleType name="PbmCapabilityTimeUnitType">
<restriction base="xsd:string">
<enumeration value="SECONDS" />
<enumeration value="MINUTES" />
<enumeration value="HOURS" />
<enumeration value="DAYS" />
<enumeration value="WEEKS" />
<enumeration value="MONTHS" />
<enumeration value="YEARS" />
</restriction>
</simpleType>
<simpleType name="PbmComplianceStatus">
<restriction base="xsd:string">
<enumeration value="compliant" />
<enumeration value="nonCompliant" />
<enumeration value="unknown" />
<enumeration value="notApplicable" />
</restriction>
</simpleType>
<complexType name="PbmComplianceResult">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="checkTime" type="xsd:dateTime" />
<element name="entity" type="pbm:PbmServerObjectRef" />
<element name="profile" type="pbm:PbmProfileId" minOccurs="0" />
<element name="complianceStatus" type="xsd:string" />
<element name="mismatch" type="xsd:boolean" />
<element name="violatedPolicies" type="pbm:PbmCompliancePolicyStatus" minOccurs="0" maxOccurs="unbounded" />
<element name="operationalStatus" type="pbm:PbmComplianceOperationalStatus" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmComplianceResult">
<sequence>
<element name="PbmComplianceResult" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmComplianceOperationalStatus">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="healthy" type="xsd:boolean" minOccurs="0" />
<element name="operationETA" type="xsd:dateTime" minOccurs="0" />
<element name="operationProgress" type="xsd:long" minOccurs="0" />
<element name="transitional" type="xsd:boolean" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCompliancePolicyStatus">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="expectedValue" type="pbm:PbmCapabilityInstance" />
<element name="currentValue" type="pbm:PbmCapabilityInstance" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCompliancePolicyStatus">
<sequence>
<element name="PbmCompliancePolicyStatus" type="pbm:PbmCompliancePolicyStatus" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmRollupComplianceResult">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="oldestCheckTime" type="xsd:dateTime" />
<element name="entity" type="pbm:PbmServerObjectRef" />
<element name="overallComplianceStatus" type="xsd:string" />
<element name="result" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />
<element name="profileMismatch" type="xsd:boolean" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmRollupComplianceResult">
<sequence>
<element name="PbmRollupComplianceResult" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmAlreadyExists">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
<element name="name" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityProfilePropertyMismatchFault">
<complexContent>
<extension base="pbm:PbmPropertyMismatchFault">
<sequence>
<element name="resourcePropertyInstance" type="pbm:PbmCapabilityPropertyInstance" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCompatibilityCheckFault">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
<element name="hub" type="pbm:PbmPlacementHub" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmDefaultProfileAppliesFault">
<complexContent>
<extension base="pbm:PbmCompatibilityCheckFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmDuplicateName">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
<element name="name" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmIncompatibleVendorSpecificRuleSet">
<complexContent>
<extension base="pbm:PbmCapabilityProfilePropertyMismatchFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmFaultNotFound">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmFault">
<complexContent>
<extension base="vim25:MethodFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmFaultProfileStorageFault">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmPropertyMismatchFault">
<complexContent>
<extension base="pbm:PbmCompatibilityCheckFault">
<sequence>
<element name="capabilityInstanceId" type="pbm:PbmCapabilityMetadataUniqueId" />
<element name="requirementPropertyInstance" type="pbm:PbmCapabilityPropertyInstance" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmResourceInUse">
<complexContent>
<extension base="pbm:PbmFault">
<sequence>
<element name="type" type="xsd:string" minOccurs="0" />
<element name="name" type="xsd:string" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmPlacementCompatibilityResult">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="hub" type="pbm:PbmPlacementHub" />
<element name="warning" type="vim25:LocalizedMethodFault" minOccurs="0" maxOccurs="unbounded" />
<element name="error" type="vim25:LocalizedMethodFault" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmPlacementCompatibilityResult">
<sequence>
<element name="PbmPlacementCompatibilityResult" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmPlacementHub">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="hubType" type="xsd:string" />
<element name="hubId" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmPlacementHub">
<sequence>
<element name="PbmPlacementHub" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<simpleType name="PbmProfileCategoryEnum">
<restriction base="xsd:string">
<enumeration value="REQUIREMENT" />
<enumeration value="RESOURCE" />
</restriction>
</simpleType>
<complexType name="PbmCapabilityProfile">
<complexContent>
<extension base="pbm:PbmProfile">
<sequence>
<element name="profileCategory" type="xsd:string" />
<element name="resourceType" type="pbm:PbmProfileResourceType" />
<element name="constraints" type="pbm:PbmCapabilityConstraints" />
<element name="generationId" type="xsd:long" minOccurs="0" />
<element name="isDefault" type="xsd:boolean" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityProfileCreateSpec">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="name" type="xsd:string" />
<element name="description" type="xsd:string" minOccurs="0" />
<element name="resourceType" type="pbm:PbmProfileResourceType" />
<element name="constraints" type="pbm:PbmCapabilityConstraints" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityProfileUpdateSpec">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="name" type="xsd:string" minOccurs="0" />
<element name="description" type="xsd:string" minOccurs="0" />
<element name="constraints" type="pbm:PbmCapabilityConstraints" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmCapabilityConstraints">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmDefaultCapabilityProfile">
<complexContent>
<extension base="pbm:PbmCapabilityProfile">
<sequence>
<element name="vvolType" type="xsd:string" maxOccurs="unbounded" />
<element name="containerId" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PbmProfile">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="profileId" type="pbm:PbmProfileId" />
<element name="name" type="xsd:string" />
<element name="description" type="xsd:string" minOccurs="0" />
<element name="creationTime" type="xsd:dateTime" />
<element name="createdBy" type="xsd:string" />
<element name="lastUpdatedTime" type="xsd:dateTime" />
<element name="lastUpdatedBy" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmProfile">
<sequence>
<element name="PbmProfile" type="pbm:PbmProfile" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmProfileId">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="uniqueId" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmProfileId">
<sequence>
<element name="PbmProfileId" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmProfileOperationOutcome">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="profileId" type="pbm:PbmProfileId" />
<element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmProfileOperationOutcome">
<sequence>
<element name="PbmProfileOperationOutcome" type="pbm:PbmProfileOperationOutcome" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmProfileType">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="uniqueId" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmProfileType">
<sequence>
<element name="PbmProfileType" type="pbm:PbmProfileType" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmQueryProfileResult">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="object" type="pbm:PbmServerObjectRef" />
<element name="profileId" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />
<element name="fault" type="vim25:LocalizedMethodFault" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmQueryProfileResult">
<sequence>
<element name="PbmQueryProfileResult" type="pbm:PbmQueryProfileResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmProfileResourceType">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="resourceType" type="xsd:string" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmProfileResourceType">
<sequence>
<element name="PbmProfileResourceType" type="pbm:PbmProfileResourceType" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<simpleType name="PbmProfileResourceTypeEnum">
<restriction base="xsd:string">
<enumeration value="STORAGE" />
</restriction>
</simpleType>
<complexType name="PbmCapabilitySubProfile">
<complexContent>
<extension base="vim25:DynamicData">
<sequence>
<element name="name" type="xsd:string" />
<element name="capability" type="pbm:PbmCapabilityInstance" maxOccurs="unbounded" />
<element name="forceProvision" type="xsd:boolean" minOccurs="0" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ArrayOfPbmCapabilitySubProfile">
<sequence>
<element name="PbmCapabilitySubProfile" type="pbm:PbmCapabilitySubProfile" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="PbmCapabilitySubProfileConstraints">
<complexContent>
<extension base="pbm:PbmCapabilityConstraints">
<sequence>
<element name="subProfiles" type="pbm:PbmCapabilitySubProfile" maxOccurs="unbounded" />
</sequence>
</extension>
</complexContent>
</complexType>
</schema>

View File

@ -0,0 +1,889 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2005-2013 VMware, Inc. All rights reserved.
-->
<definitions targetNamespace="urn:pbm"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:pbm="urn:pbm"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<types>
<schema
targetNamespace="urn:pbm"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:pbm="urn:pbm"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:vim25="urn:vim25"
elementFormDefault="qualified"
>
<import namespace="urn:vim25" schemaLocation="core-types.xsd" />
<include schemaLocation="pbm-messagetypes.xsd" />
<element name="versionURI" type="xsd:string" />
<element name="HostCommunicationFault" type="vim25:HostCommunication"/>
<element name="HostNotConnectedFault" type="vim25:HostNotConnected"/>
<element name="HostNotReachableFault" type="vim25:HostNotReachable"/>
<element name="InvalidArgumentFault" type="vim25:InvalidArgument"/>
<element name="InvalidRequestFault" type="vim25:InvalidRequest"/>
<element name="InvalidTypeFault" type="vim25:InvalidType"/>
<element name="ManagedObjectNotFoundFault" type="vim25:ManagedObjectNotFound"/>
<element name="MethodNotFoundFault" type="vim25:MethodNotFound"/>
<element name="NotEnoughLicensesFault" type="vim25:NotEnoughLicenses"/>
<element name="NotImplementedFault" type="vim25:NotImplemented"/>
<element name="NotSupportedFault" type="vim25:NotSupported"/>
<element name="RequestCanceledFault" type="vim25:RequestCanceled"/>
<element name="SecurityErrorFault" type="vim25:SecurityError"/>
<element name="SystemErrorFault" type="vim25:SystemError"/>
<element name="UnexpectedFaultFault" type="vim25:UnexpectedFault"/>
<element name="MethodFaultFault" type="vim25:MethodFault"/>
<element name="RuntimeFaultFault" type="vim25:RuntimeFault"/>
<element name="PbmRetrieveServiceContent" type="pbm:PbmRetrieveServiceContentRequestType" />
<element name="PbmRetrieveServiceContentResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmServiceInstanceContent" />
</sequence>
</complexType>
</element>
<element name="PbmCheckCompliance" type="pbm:PbmCheckComplianceRequestType" />
<element name="PbmCheckComplianceResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmFetchComplianceResult" type="pbm:PbmFetchComplianceResultRequestType" />
<element name="PbmFetchComplianceResultResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmCheckRollupCompliance" type="pbm:PbmCheckRollupComplianceRequestType" />
<element name="PbmCheckRollupComplianceResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmFetchRollupComplianceResult" type="pbm:PbmFetchRollupComplianceResultRequestType" />
<element name="PbmFetchRollupComplianceResultResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmRollupComplianceResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmAlreadyExistsFault" type="pbm:PbmAlreadyExists"/>
<element name="PbmCapabilityProfilePropertyMismatchFaultFault" type="pbm:PbmCapabilityProfilePropertyMismatchFault"/>
<element name="PbmCompatibilityCheckFaultFault" type="pbm:PbmCompatibilityCheckFault"/>
<element name="PbmDefaultProfileAppliesFaultFault" type="pbm:PbmDefaultProfileAppliesFault"/>
<element name="PbmDuplicateNameFault" type="pbm:PbmDuplicateName"/>
<element name="PbmIncompatibleVendorSpecificRuleSetFault" type="pbm:PbmIncompatibleVendorSpecificRuleSet"/>
<element name="PbmFaultNotFoundFault" type="pbm:PbmFaultNotFound"/>
<element name="PbmFaultFault" type="pbm:PbmFault"/>
<element name="PbmFaultProfileStorageFaultFault" type="pbm:PbmFaultProfileStorageFault"/>
<element name="PbmPropertyMismatchFaultFault" type="pbm:PbmPropertyMismatchFault"/>
<element name="PbmResourceInUseFault" type="pbm:PbmResourceInUse"/>
<element name="PbmQueryMatchingHub" type="pbm:PbmQueryMatchingHubRequestType" />
<element name="PbmQueryMatchingHubResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryMatchingHubWithSpec" type="pbm:PbmQueryMatchingHubWithSpecRequestType" />
<element name="PbmQueryMatchingHubWithSpecResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmPlacementHub" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmCheckCompatibility" type="pbm:PbmCheckCompatibilityRequestType" />
<element name="PbmCheckCompatibilityResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmCheckCompatibilityWithSpec" type="pbm:PbmCheckCompatibilityWithSpecRequestType" />
<element name="PbmCheckCompatibilityWithSpecResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmPlacementCompatibilityResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmFetchResourceType" type="pbm:PbmFetchResourceTypeRequestType" />
<element name="PbmFetchResourceTypeResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileResourceType" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmFetchVendorInfo" type="pbm:PbmFetchVendorInfoRequestType" />
<element name="PbmFetchVendorInfoResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmCapabilityVendorResourceTypeInfo" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmFetchCapabilityMetadata" type="pbm:PbmFetchCapabilityMetadataRequestType" />
<element name="PbmFetchCapabilityMetadataResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmCapabilityMetadataPerCategory" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmCreate" type="pbm:PbmCreateRequestType" />
<element name="PbmCreateResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileId" />
</sequence>
</complexType>
</element>
<element name="PbmUpdate" type="pbm:PbmUpdateRequestType" />
<element name="PbmUpdateResponse">
<complexType />
</element>
<element name="PbmDelete" type="pbm:PbmDeleteRequestType" />
<element name="PbmDeleteResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileOperationOutcome" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryProfile" type="pbm:PbmQueryProfileRequestType" />
<element name="PbmQueryProfileResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmRetrieveContent" type="pbm:PbmRetrieveContentRequestType" />
<element name="PbmRetrieveContentResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfile" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryAssociatedProfiles" type="pbm:PbmQueryAssociatedProfilesRequestType" />
<element name="PbmQueryAssociatedProfilesResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmQueryProfileResult" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryAssociatedProfile" type="pbm:PbmQueryAssociatedProfileRequestType" />
<element name="PbmQueryAssociatedProfileResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileId" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryAssociatedEntity" type="pbm:PbmQueryAssociatedEntityRequestType" />
<element name="PbmQueryAssociatedEntityResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmServerObjectRef" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
<element name="PbmQueryDefaultRequirementProfile" type="pbm:PbmQueryDefaultRequirementProfileRequestType" />
<element name="PbmQueryDefaultRequirementProfileResponse">
<complexType>
<sequence>
<element name="returnval" type="pbm:PbmProfileId" minOccurs="0" />
</sequence>
</complexType>
</element>
<element name="PbmResetDefaultRequirementProfile" type="pbm:PbmResetDefaultRequirementProfileRequestType" />
<element name="PbmResetDefaultRequirementProfileResponse">
<complexType />
</element>
</schema>
</types>
<message name="HostCommunicationFaultMsg">
<part name="fault" element="pbm:HostCommunicationFault" />
</message>
<message name="HostNotConnectedFaultMsg">
<part name="fault" element="pbm:HostNotConnectedFault" />
</message>
<message name="HostNotReachableFaultMsg">
<part name="fault" element="pbm:HostNotReachableFault" />
</message>
<message name="InvalidArgumentFaultMsg">
<part name="fault" element="pbm:InvalidArgumentFault" />
</message>
<message name="InvalidRequestFaultMsg">
<part name="fault" element="pbm:InvalidRequestFault" />
</message>
<message name="InvalidTypeFaultMsg">
<part name="fault" element="pbm:InvalidTypeFault" />
</message>
<message name="ManagedObjectNotFoundFaultMsg">
<part name="fault" element="pbm:ManagedObjectNotFoundFault" />
</message>
<message name="MethodNotFoundFaultMsg">
<part name="fault" element="pbm:MethodNotFoundFault" />
</message>
<message name="NotEnoughLicensesFaultMsg">
<part name="fault" element="pbm:NotEnoughLicensesFault" />
</message>
<message name="NotImplementedFaultMsg">
<part name="fault" element="pbm:NotImplementedFault" />
</message>
<message name="NotSupportedFaultMsg">
<part name="fault" element="pbm:NotSupportedFault" />
</message>
<message name="RequestCanceledFaultMsg">
<part name="fault" element="pbm:RequestCanceledFault" />
</message>
<message name="SecurityErrorFaultMsg">
<part name="fault" element="pbm:SecurityErrorFault" />
</message>
<message name="SystemErrorFaultMsg">
<part name="fault" element="pbm:SystemErrorFault" />
</message>
<message name="UnexpectedFaultFaultMsg">
<part name="fault" element="pbm:UnexpectedFaultFault" />
</message>
<message name="MethodFaultFaultMsg">
<part name="fault" element="pbm:MethodFaultFault" />
</message>
<message name="RuntimeFaultFaultMsg">
<part name="fault" element="pbm:RuntimeFaultFault" />
</message>
<message name="PbmRetrieveServiceContentRequestMsg">
<part name="parameters" element="pbm:PbmRetrieveServiceContent" />
</message>
<message name="PbmRetrieveServiceContentResponseMsg">
<part name="parameters" element="pbm:PbmRetrieveServiceContentResponse" />
</message>
<message name="PbmCheckComplianceRequestMsg">
<part name="parameters" element="pbm:PbmCheckCompliance" />
</message>
<message name="PbmCheckComplianceResponseMsg">
<part name="parameters" element="pbm:PbmCheckComplianceResponse" />
</message>
<message name="PbmFetchComplianceResultRequestMsg">
<part name="parameters" element="pbm:PbmFetchComplianceResult" />
</message>
<message name="PbmFetchComplianceResultResponseMsg">
<part name="parameters" element="pbm:PbmFetchComplianceResultResponse" />
</message>
<message name="PbmCheckRollupComplianceRequestMsg">
<part name="parameters" element="pbm:PbmCheckRollupCompliance" />
</message>
<message name="PbmCheckRollupComplianceResponseMsg">
<part name="parameters" element="pbm:PbmCheckRollupComplianceResponse" />
</message>
<message name="PbmFetchRollupComplianceResultRequestMsg">
<part name="parameters" element="pbm:PbmFetchRollupComplianceResult" />
</message>
<message name="PbmFetchRollupComplianceResultResponseMsg">
<part name="parameters" element="pbm:PbmFetchRollupComplianceResultResponse" />
</message>
<message name="PbmAlreadyExistsFaultMsg">
<part name="fault" element="pbm:PbmAlreadyExistsFault" />
</message>
<message name="PbmCapabilityProfilePropertyMismatchFaultFaultMsg">
<part name="fault" element="pbm:PbmCapabilityProfilePropertyMismatchFaultFault" />
</message>
<message name="PbmCompatibilityCheckFaultFaultMsg">
<part name="fault" element="pbm:PbmCompatibilityCheckFaultFault" />
</message>
<message name="PbmDefaultProfileAppliesFaultFaultMsg">
<part name="fault" element="pbm:PbmDefaultProfileAppliesFaultFault" />
</message>
<message name="PbmDuplicateNameFaultMsg">
<part name="fault" element="pbm:PbmDuplicateNameFault" />
</message>
<message name="PbmIncompatibleVendorSpecificRuleSetFaultMsg">
<part name="fault" element="pbm:PbmIncompatibleVendorSpecificRuleSetFault" />
</message>
<message name="PbmFaultNotFoundFaultMsg">
<part name="fault" element="pbm:PbmFaultNotFoundFault" />
</message>
<message name="PbmFaultFaultMsg">
<part name="fault" element="pbm:PbmFaultFault" />
</message>
<message name="PbmFaultProfileStorageFaultFaultMsg">
<part name="fault" element="pbm:PbmFaultProfileStorageFaultFault" />
</message>
<message name="PbmPropertyMismatchFaultFaultMsg">
<part name="fault" element="pbm:PbmPropertyMismatchFaultFault" />
</message>
<message name="PbmResourceInUseFaultMsg">
<part name="fault" element="pbm:PbmResourceInUseFault" />
</message>
<message name="PbmQueryMatchingHubRequestMsg">
<part name="parameters" element="pbm:PbmQueryMatchingHub" />
</message>
<message name="PbmQueryMatchingHubResponseMsg">
<part name="parameters" element="pbm:PbmQueryMatchingHubResponse" />
</message>
<message name="PbmQueryMatchingHubWithSpecRequestMsg">
<part name="parameters" element="pbm:PbmQueryMatchingHubWithSpec" />
</message>
<message name="PbmQueryMatchingHubWithSpecResponseMsg">
<part name="parameters" element="pbm:PbmQueryMatchingHubWithSpecResponse" />
</message>
<message name="PbmCheckCompatibilityRequestMsg">
<part name="parameters" element="pbm:PbmCheckCompatibility" />
</message>
<message name="PbmCheckCompatibilityResponseMsg">
<part name="parameters" element="pbm:PbmCheckCompatibilityResponse" />
</message>
<message name="PbmCheckCompatibilityWithSpecRequestMsg">
<part name="parameters" element="pbm:PbmCheckCompatibilityWithSpec" />
</message>
<message name="PbmCheckCompatibilityWithSpecResponseMsg">
<part name="parameters" element="pbm:PbmCheckCompatibilityWithSpecResponse" />
</message>
<message name="PbmFetchResourceTypeRequestMsg">
<part name="parameters" element="pbm:PbmFetchResourceType" />
</message>
<message name="PbmFetchResourceTypeResponseMsg">
<part name="parameters" element="pbm:PbmFetchResourceTypeResponse" />
</message>
<message name="PbmFetchVendorInfoRequestMsg">
<part name="parameters" element="pbm:PbmFetchVendorInfo" />
</message>
<message name="PbmFetchVendorInfoResponseMsg">
<part name="parameters" element="pbm:PbmFetchVendorInfoResponse" />
</message>
<message name="PbmFetchCapabilityMetadataRequestMsg">
<part name="parameters" element="pbm:PbmFetchCapabilityMetadata" />
</message>
<message name="PbmFetchCapabilityMetadataResponseMsg">
<part name="parameters" element="pbm:PbmFetchCapabilityMetadataResponse" />
</message>
<message name="PbmCreateRequestMsg">
<part name="parameters" element="pbm:PbmCreate" />
</message>
<message name="PbmCreateResponseMsg">
<part name="parameters" element="pbm:PbmCreateResponse" />
</message>
<message name="PbmUpdateRequestMsg">
<part name="parameters" element="pbm:PbmUpdate" />
</message>
<message name="PbmUpdateResponseMsg">
<part name="parameters" element="pbm:PbmUpdateResponse" />
</message>
<message name="PbmDeleteRequestMsg">
<part name="parameters" element="pbm:PbmDelete" />
</message>
<message name="PbmDeleteResponseMsg">
<part name="parameters" element="pbm:PbmDeleteResponse" />
</message>
<message name="PbmQueryProfileRequestMsg">
<part name="parameters" element="pbm:PbmQueryProfile" />
</message>
<message name="PbmQueryProfileResponseMsg">
<part name="parameters" element="pbm:PbmQueryProfileResponse" />
</message>
<message name="PbmRetrieveContentRequestMsg">
<part name="parameters" element="pbm:PbmRetrieveContent" />
</message>
<message name="PbmRetrieveContentResponseMsg">
<part name="parameters" element="pbm:PbmRetrieveContentResponse" />
</message>
<message name="PbmQueryAssociatedProfilesRequestMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedProfiles" />
</message>
<message name="PbmQueryAssociatedProfilesResponseMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedProfilesResponse" />
</message>
<message name="PbmQueryAssociatedProfileRequestMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedProfile" />
</message>
<message name="PbmQueryAssociatedProfileResponseMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedProfileResponse" />
</message>
<message name="PbmQueryAssociatedEntityRequestMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedEntity" />
</message>
<message name="PbmQueryAssociatedEntityResponseMsg">
<part name="parameters" element="pbm:PbmQueryAssociatedEntityResponse" />
</message>
<message name="PbmQueryDefaultRequirementProfileRequestMsg">
<part name="parameters" element="pbm:PbmQueryDefaultRequirementProfile" />
</message>
<message name="PbmQueryDefaultRequirementProfileResponseMsg">
<part name="parameters" element="pbm:PbmQueryDefaultRequirementProfileResponse" />
</message>
<message name="PbmResetDefaultRequirementProfileRequestMsg">
<part name="parameters" element="pbm:PbmResetDefaultRequirementProfile" />
</message>
<message name="PbmResetDefaultRequirementProfileResponseMsg">
<part name="parameters" element="pbm:PbmResetDefaultRequirementProfileResponse" />
</message>
<portType name="PbmPortType">
<operation name="PbmRetrieveServiceContent">
<input message="pbm:PbmRetrieveServiceContentRequestMsg" />
<output message="pbm:PbmRetrieveServiceContentResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmCheckCompliance">
<input message="pbm:PbmCheckComplianceRequestMsg" />
<output message="pbm:PbmCheckComplianceResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmFetchComplianceResult">
<input message="pbm:PbmFetchComplianceResultRequestMsg" />
<output message="pbm:PbmFetchComplianceResultResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmCheckRollupCompliance">
<input message="pbm:PbmCheckRollupComplianceRequestMsg" />
<output message="pbm:PbmCheckRollupComplianceResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmFetchRollupComplianceResult">
<input message="pbm:PbmFetchRollupComplianceResultRequestMsg" />
<output message="pbm:PbmFetchRollupComplianceResultResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryMatchingHub">
<input message="pbm:PbmQueryMatchingHubRequestMsg" />
<output message="pbm:PbmQueryMatchingHubResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryMatchingHubWithSpec">
<input message="pbm:PbmQueryMatchingHubWithSpecRequestMsg" />
<output message="pbm:PbmQueryMatchingHubWithSpecResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmCheckCompatibility">
<input message="pbm:PbmCheckCompatibilityRequestMsg" />
<output message="pbm:PbmCheckCompatibilityResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmCheckCompatibilityWithSpec">
<input message="pbm:PbmCheckCompatibilityWithSpecRequestMsg" />
<output message="pbm:PbmCheckCompatibilityWithSpecResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmFetchResourceType">
<input message="pbm:PbmFetchResourceTypeRequestMsg" />
<output message="pbm:PbmFetchResourceTypeResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmFetchVendorInfo">
<input message="pbm:PbmFetchVendorInfoRequestMsg" />
<output message="pbm:PbmFetchVendorInfoResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmFetchCapabilityMetadata">
<input message="pbm:PbmFetchCapabilityMetadataRequestMsg" />
<output message="pbm:PbmFetchCapabilityMetadataResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmCreate">
<input message="pbm:PbmCreateRequestMsg" />
<output message="pbm:PbmCreateResponseMsg" />
<fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>
<fault name="PbmFaultProfileStorageFaultFault" message="pbm:PbmFaultProfileStorageFaultFaultMsg"/>
<fault name="PbmDuplicateNameFault" message="pbm:PbmDuplicateNameFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmUpdate">
<input message="pbm:PbmUpdateRequestMsg" />
<output message="pbm:PbmUpdateResponseMsg" />
<fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>
<fault name="PbmFaultProfileStorageFaultFault" message="pbm:PbmFaultProfileStorageFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmDelete">
<input message="pbm:PbmDeleteRequestMsg" />
<output message="pbm:PbmDeleteResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryProfile">
<input message="pbm:PbmQueryProfileRequestMsg" />
<output message="pbm:PbmQueryProfileResponseMsg" />
<fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmRetrieveContent">
<input message="pbm:PbmRetrieveContentRequestMsg" />
<output message="pbm:PbmRetrieveContentResponseMsg" />
<fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryAssociatedProfiles">
<input message="pbm:PbmQueryAssociatedProfilesRequestMsg" />
<output message="pbm:PbmQueryAssociatedProfilesResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryAssociatedProfile">
<input message="pbm:PbmQueryAssociatedProfileRequestMsg" />
<output message="pbm:PbmQueryAssociatedProfileResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryAssociatedEntity">
<input message="pbm:PbmQueryAssociatedEntityRequestMsg" />
<output message="pbm:PbmQueryAssociatedEntityResponseMsg" />
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmQueryDefaultRequirementProfile">
<input message="pbm:PbmQueryDefaultRequirementProfileRequestMsg" />
<output message="pbm:PbmQueryDefaultRequirementProfileResponseMsg" />
<fault name="InvalidArgumentFault" message="pbm:InvalidArgumentFaultMsg"/>
<fault name="PbmFaultFault" message="pbm:PbmFaultFaultMsg"/>
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
<operation name="PbmResetDefaultRequirementProfile">
<input message="pbm:PbmResetDefaultRequirementProfileRequestMsg" />
<output message="pbm:PbmResetDefaultRequirementProfileResponseMsg" />
<fault name="RuntimeFault" message="pbm:RuntimeFaultFaultMsg"/>
</operation>
</portType>
<binding name="PbmBinding" type="pbm:PbmPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="PbmRetrieveServiceContent">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmCheckCompliance">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmFetchComplianceResult">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmCheckRollupCompliance">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmFetchRollupComplianceResult">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryMatchingHub">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryMatchingHubWithSpec">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmCheckCompatibility">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmCheckCompatibilityWithSpec">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmFetchResourceType">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmFetchVendorInfo">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmFetchCapabilityMetadata">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmCreate">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="InvalidArgumentFault">
<soap:fault name="InvalidArgumentFault" use="literal" />
</fault>
<fault name="PbmFaultProfileStorageFaultFault">
<soap:fault name="PbmFaultProfileStorageFaultFault" use="literal" />
</fault>
<fault name="PbmDuplicateNameFault">
<soap:fault name="PbmDuplicateNameFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmUpdate">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="InvalidArgumentFault">
<soap:fault name="InvalidArgumentFault" use="literal" />
</fault>
<fault name="PbmFaultProfileStorageFaultFault">
<soap:fault name="PbmFaultProfileStorageFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmDelete">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryProfile">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="InvalidArgumentFault">
<soap:fault name="InvalidArgumentFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmRetrieveContent">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="InvalidArgumentFault">
<soap:fault name="InvalidArgumentFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryAssociatedProfiles">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryAssociatedProfile">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryAssociatedEntity">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmQueryDefaultRequirementProfile">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="InvalidArgumentFault">
<soap:fault name="InvalidArgumentFault" use="literal" />
</fault>
<fault name="PbmFaultFault">
<soap:fault name="PbmFaultFault" use="literal" />
</fault>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
<operation name="PbmResetDefaultRequirementProfile">
<soap:operation soapAction="urn:pbm/1.0" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="RuntimeFault">
<soap:fault name="RuntimeFault" use="literal" />
</fault>
</operation>
</binding>
</definitions>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2005-2013 VMware, Inc. All rights reserved.
-->
<definitions targetNamespace="urn:pbmService"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:interface="urn:pbm"
>
<import location="pbm.wsdl" namespace="urn:pbm" />
<service name="PbmService">
<port binding="interface:PbmBinding" name="PbmPort">
<soap:address location="http://localhost/pbm/services/pbmService" />
</port>
</service>
</definitions>

View File

@ -1661,15 +1661,10 @@
# Options defined in cinder.volume.drivers.vmware.vmdk # Options defined in cinder.volume.drivers.vmware.vmdk
# #
# PBM service WSDL file location URL. e.g. # The PBM default policy. If using VC server version 5.5 or
# file:///opt/SDK/spbm/wsdl/pbmService.wsdl. Not setting this # above and there is no defined storage policy for the
# will disable storage policy based placement of volumes. # specific request then this policy will be used. (string
# (string value) # 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)
#pbm_default_policy=<None> #pbm_default_policy=<None>
# IP address for connecting to VMware ESX/VC server. (string # IP address for connecting to VMware ESX/VC server. (string
@ -1711,6 +1706,12 @@
# less than the configured value. (integer value) # less than the configured value. (integer value)
#vmware_max_objects_retrieval=100 #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 # Options defined in cinder.volume.drivers.windows.windows