PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/pbm.py |
""" Library for VMware Storage Policy management (via the pbm endpoint) This library is used to manage the various policies available in VMware :codeauthor: Alexandru Bleotu <alexandru.bleotu@morganstaley.com> Dependencies ~~~~~~~~~~~~ - pyVmomi Python Module pyVmomi ------- PyVmomi can be installed via pip: .. code-block:: bash pip install pyVmomi .. note:: versions of Python. If using version 6.0 of pyVmomi, Python 2.6, Python 2.7.9, or newer must be present. This is due to an upstream dependency in pyVmomi 6.0 that is not supported in Python versions 2.7 to 2.7.8. If the version of Python is not in the supported range, you will need to install an earlier version of pyVmomi. See `Issue #29537`_ for more information. .. _Issue #29537: https://github.com/saltstack/salt/issues/29537 Based on the note above, to install an earlier version of pyVmomi than the version currently listed in PyPi, run the following: .. code-block:: bash pip install pyVmomi==5.5.0.2014.1.1 """ import logging import salt.utils.vmware from salt.exceptions import ( VMwareApiError, VMwareObjectRetrievalError, VMwareRuntimeError, ) try: from pyVmomi import pbm, vim, vmodl # pylint: disable=no-name-in-module HAS_PYVMOMI = True except ImportError: HAS_PYVMOMI = False # Get Logging Started log = logging.getLogger(__name__) def __virtual__(): """ Only load if PyVmomi is installed. """ if HAS_PYVMOMI: return True else: return ( False, "Missing dependency: The salt.utils.pbm module " "requires the pyvmomi library", ) def get_profile_manager(service_instance): """ Returns a profile manager service_instance Service instance to the host or vCenter """ stub = salt.utils.vmware.get_new_service_instance_stub( service_instance, ns="pbm/2.0", path="/pbm/sdk" ) pbm_si = pbm.ServiceInstance("ServiceInstance", stub) try: profile_manager = pbm_si.RetrieveContent().profileManager except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) return profile_manager def get_placement_solver(service_instance): """ Returns a placement solver service_instance Service instance to the host or vCenter """ stub = salt.utils.vmware.get_new_service_instance_stub( service_instance, ns="pbm/2.0", path="/pbm/sdk" ) pbm_si = pbm.ServiceInstance("ServiceInstance", stub) try: profile_manager = pbm_si.RetrieveContent().placementSolver except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) return profile_manager def get_capability_definitions(profile_manager): """ Returns a list of all capability definitions. profile_manager Reference to the profile manager. """ res_type = pbm.profile.ResourceType( resourceType=pbm.profile.ResourceTypeEnum.STORAGE ) try: cap_categories = profile_manager.FetchCapabilityMetadata(res_type) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) cap_definitions = [] for cat in cap_categories: cap_definitions.extend(cat.capabilityMetadata) return cap_definitions def get_policies_by_id(profile_manager, policy_ids): """ Returns a list of policies with the specified ids. profile_manager Reference to the profile manager. policy_ids List of policy ids to retrieve. """ try: return profile_manager.RetrieveContent(policy_ids) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) def get_storage_policies(profile_manager, policy_names=None, get_all_policies=False): """ Returns a list of the storage policies, filtered by name. profile_manager Reference to the profile manager. policy_names List of policy names to filter by. Default is None. get_all_policies Flag specifying to return all policies, regardless of the specified filter. """ res_type = pbm.profile.ResourceType( resourceType=pbm.profile.ResourceTypeEnum.STORAGE ) try: policy_ids = profile_manager.QueryProfile(res_type) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) log.trace("policy_ids = %s", policy_ids) # More policies are returned so we need to filter again policies = [ p for p in get_policies_by_id(profile_manager, policy_ids) if p.resourceType.resourceType == pbm.profile.ResourceTypeEnum.STORAGE ] if get_all_policies: return policies if not policy_names: policy_names = [] return [p for p in policies if p.name in policy_names] def create_storage_policy(profile_manager, policy_spec): """ Creates a storage policy. profile_manager Reference to the profile manager. policy_spec Policy update spec. """ try: profile_manager.Create(policy_spec) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) def update_storage_policy(profile_manager, policy, policy_spec): """ Updates a storage policy. profile_manager Reference to the profile manager. policy Reference to the policy to be updated. policy_spec Policy update spec. """ try: profile_manager.Update(policy.profileId, policy_spec) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) def get_default_storage_policy_of_datastore(profile_manager, datastore): """ Returns the default storage policy reference assigned to a datastore. profile_manager Reference to the profile manager. datastore Reference to the datastore. """ # Retrieve all datastores visible hub = pbm.placement.PlacementHub(hubId=datastore._moId, hubType="Datastore") log.trace("placement_hub = %s", hub) try: policy_id = profile_manager.QueryDefaultRequirementProfile(hub) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg) policy_refs = get_policies_by_id(profile_manager, [policy_id]) if not policy_refs: raise VMwareObjectRetrievalError( f"Storage policy with id '{policy_id}' was not found" ) return policy_refs[0] def assign_default_storage_policy_to_datastore(profile_manager, policy, datastore): """ Assigns a storage policy as the default policy to a datastore. profile_manager Reference to the profile manager. policy Reference to the policy to assigned. datastore Reference to the datastore. """ placement_hub = pbm.placement.PlacementHub( hubId=datastore._moId, hubType="Datastore" ) log.trace("placement_hub = %s", placement_hub) try: profile_manager.AssignDefaultRequirementProfile( policy.profileId, [placement_hub] ) except vim.fault.NoPermission as exc: log.exception(exc) raise VMwareApiError( f"Not enough permissions. Required privilege: {exc.privilegeId}" ) except vim.fault.VimFault as exc: log.exception(exc) raise VMwareApiError(exc.msg) except vmodl.RuntimeFault as exc: log.exception(exc) raise VMwareRuntimeError(exc.msg)