Source code for saltext.vmware.modules.cluster

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

import salt.exceptions
import saltext.vmware.utils.cluster as utils_cluster
import saltext.vmware.utils.common as utils_common
import saltext.vmware.utils.datacenter as utils_datacenter
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_cluster"
__proxyenabled__ = ["vmware_cluster"]
__func_alias__ = {"list_": "list"}


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


[docs]def list_(service_instance=None): """ Returns a dictionary containing a list of clusters for each datacenter. .. code-block:: bash salt '*' vmware_cluster.list """ ret = {} if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) try: datacenters = utils_datacenter.get_datacenters(service_instance, get_all_datacenters=True) for datacenter in datacenters: clusters = utils_common.get_mors_with_properties( service_instance, vim.ClusterComputeResource, container_ref=datacenter, property_list=["name"], ) for cluster in clusters: ret.setdefault(datacenter.name, []).append(cluster.get("name")) except (salt.exceptions.VMwareApiError, salt.exceptions.VMwareObjectRetrievalError) as exc: log.error("Error retrieving cluster/datacenter - %s", str(exc)) return ret
[docs]def create(name, datacenter, service_instance=None): """ Creates a cluster. Supported proxies: esxcluster name The cluster name datacenter The datacenter name in which the cluster is to be created .. code-block:: bash salt '*' vmware_cluster.create dc1 cluster1 """ if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) try: dc_ref = utils_datacenter.get_datacenter(service_instance, datacenter) cluster_spec = vim.cluster.ConfigSpecEx() utils_cluster.create_cluster(cluster_name=name, dc_ref=dc_ref, cluster_spec=cluster_spec) except (salt.exceptions.VMwareApiError, salt.exceptions.VMwareRuntimeError) as exc: return {name: False, "reason": str(exc)} return {name: True}
[docs]def get(cluster_name, datacenter_name, service_instance=None): """ Get the properties of a cluster. cluster_name The cluster name datacenter_name The datacenter name to which the cluster belongs service_instance Use this vCenter service connection instance instead of creating a new one. (optional). .. code-block:: bash salt '*' vmware_cluster.get cluster_name=cl1 datacenter_name=dc1 """ ret = {} if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) try: dc_ref = utils_datacenter.get_datacenter(service_instance, datacenter_name) cluster_ref = utils_cluster.get_cluster(dc_ref=dc_ref, cluster=cluster_name) # DRS config ret["drs_enabled"] = cluster_ref.configurationEx.drsConfig.enabled if ret["drs_enabled"]: ret["drs"] = __salt__["vmware_cluster_drs.get"]( cluster_name=cluster_name, datacenter_name=datacenter_name, service_instance=service_instance, ) # HA config ret["ha_enabled"] = cluster_ref.configurationEx.dasConfig.enabled if ret["ha_enabled"]: ret["ha"] = __salt__["vmware_cluster_ha.get"]( cluster_name=cluster_name, datacenter_name=datacenter_name, service_instance=service_instance, ) # vSAN ret["vsan_enabled"] = cluster_ref.configurationEx.vsanConfigInfo.enabled except (salt.exceptions.VMwareApiError, salt.exceptions.VMwareObjectRetrievalError) as exc: return {cluster_name: False, "reason": str(exc)} return ret
[docs]def delete(name, datacenter, service_instance=None): """ Deletes a cluster. Supported proxies: esxcluster name The cluster name datacenter The datacenter name to which the cluster belongs .. code-block:: bash salt '*' vmware_cluster.delete cl1 dc1 """ if service_instance is None: service_instance = get_service_instance(opts=__opts__, pillar=__pillar__) try: utils_cluster.delete_cluster(service_instance, name, datacenter) except (salt.exceptions.VMwareApiError, salt.exceptions.VMwareObjectRetrievalError) as exc: return {name: False, "reason": str(exc)} return {name: True}