Source code for saltext.vmware.modules.datastore

# Copyright 2021 VMware, Inc.
# SPDX-License: Apache-2.0
import logging

import saltext.vmware.utils.datastore as utils_datastore
from saltext.vmware.utils.connect import get_service_instance

log = logging.getLogger(__name__)

try:
    from pyVmomi import vim

    HAS_PYVMOMI = True
except ImportError:
    HAS_PYVMOMI = False


__virtualname__ = "vmware_datastore"


def __virtual__():
    if not HAS_PYVMOMI:
        return False, "Unable to import pyVmomi module."
    return __virtualname__


[docs]def maintenance_mode(datastore_name, datacenter_name=None, service_instance=None): """ Put datastore in maintenance mode. datastore_name Name of datastore. datacenter_name (optional) Name of datacenter where datastore exists. service_instance (optional) The Service Instance from which to obtain managed object references. """ if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) assert isinstance(datastore_name, str) datastores = utils_datastore.get_datastores( service_instance, datastore_name=datastore_name, datacenter_name=datacenter_name ) ds = datastores[0] if datastores else None ret = utils_datastore.enter_maintenance_mode(ds) if ret: return {"maintenanceMode": "inMaintenance"} return {"maintenanceMode": "failed to enter maintenance mode"}
[docs]def exit_maintenance_mode(datastore_name, datacenter_name=None, service_instance=None): """ Take datastore out of maintenance mode. datastore_name Name of datastore. datacenter_name (optional) Name of datacenter where datastore exists. service_instance (optional) The Service Instance from which to obtain managed object references. """ if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) assert isinstance(datastore_name, str) datastores = utils_datastore.get_datastores( service_instance, datastore_name=datastore_name, datacenter_name=datacenter_name ) ds = datastores[0] if datastores else None ret = utils_datastore.exit_maintenance_mode(ds) if ret: return {"maintenanceMode": "normal"} return {"maintenanceMode": "failed to exit maintenance mode"}
[docs]def get( datastore_name=None, datacenter_name=None, cluster_name=None, host_name=None, service_instance=None, ): """ Return info about datastores. datacenter_name Filter by this datacenter name (required when cluster is not specified) datacenter_name Filter by this datacenter name (required when cluster is not specified) cluster_name Filter by this cluster name (required when datacenter is not specified) host_name Filter by this ESXi hostname (optional). service_instance Use this vCenter service connection instance instead of creating a new one. (optional). """ log.debug(f"Running {__virtualname__}.get") ret = [] if not service_instance: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) datastores = utils_datastore.get_datastores( service_instance, datastore_name=datastore_name, datacenter_name=datacenter_name, cluster_name=cluster_name, host_name=host_name, ) for datastore in datastores: summary = datastore.summary info = { "accessible": summary.accessible, "capacity": summary.capacity, "freeSpace": summary.freeSpace, "maintenanceMode": summary.maintenanceMode, "multipleHostAccess": summary.multipleHostAccess, "name": summary.name, "type": summary.type, "url": summary.url, "uncommitted": summary.uncommitted if summary.uncommitted else 0, } ret.append(info) return ret