Source code for saltext.vcf.resources.sddc

"""
``sddc`` resource type — one SDDC Manager per resource ID.

Configuration shape::

    resources:
      sddc:
        instances:
          sddc-01:
            host: sddc-manager.vcf.nimbus.internal
            username: administrator@vsphere.local
            password: VMware123!VMware123!
            verify_ssl: false
"""

import logging

import requests
import urllib3

from saltext.vcf.clients import sddc_cluster
from saltext.vcf.clients import sddc_credentials
from saltext.vcf.clients import sddc_domain
from saltext.vcf.clients import sddc_host
from saltext.vcf.clients import sddc_vcf_services
from saltext.vcf.resources import pillar_resources_tree

log = logging.getLogger(__name__)

CONTEXT_KEY = "sddc_resource"


def __virtual__():
    return True


def _resource_id():
    return __resource__["id"]  # pylint: disable=undefined-variable


def _instance_cfg(resource_id):
    return __context__[CONTEXT_KEY]["instances"].get(  # pylint: disable=undefined-variable
        resource_id, {}
    )


def _opts():
    return {
        "pillar": {"saltext.vcf": {"sddc_manager": _instance_cfg(_resource_id())}},
    }


def init(opts):
    instances = pillar_resources_tree(opts).get("sddc", {}).get("instances", {})
    __context__[CONTEXT_KEY] = {  # pylint: disable=undefined-variable
        "initialized": True,
        "instances": instances,
    }
    log.debug("sddc resource init: managing %s", list(instances))


def initialized():
    return __context__.get(CONTEXT_KEY, {}).get(  # pylint: disable=undefined-variable
        "initialized", False
    )


def discover(opts):
    return list(pillar_resources_tree(opts).get("sddc", {}).get("instances", {}))


def grains():
    rid = _resource_id()
    cfg = _instance_cfg(rid)
    return {
        "resource_type": "sddc",
        "resource_id": rid,
        "host": cfg.get("host", ""),
    }


def grains_refresh():
    return grains()


[docs] def ping(): """Probe ``/v1/tokens`` to confirm SDDC Manager is reachable.""" cfg = _instance_cfg(_resource_id()) host = cfg.get("host") verify = cfg.get("verify_ssl", True) if not verify: urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) try: resp = requests.post( f"https://{host}/v1/tokens", json={"username": cfg.get("username"), "password": cfg.get("password")}, verify=verify, timeout=10, ) return resp.status_code == 200 except requests.RequestException as exc: log.warning("sddc ping failed for %s: %s", host, exc) return False
def shutdown(opts): __context__.pop(CONTEXT_KEY, None) # pylint: disable=undefined-variable # --------------------------------------------------------------------------- # Per-resource operations # --------------------------------------------------------------------------- def host_list(): return sddc_host.list_(_opts()) def host_get(host): return sddc_host.get(_opts(), host) def host_commission(host_specs): return sddc_host.commission(_opts(), host_specs) def host_decommission(host): return sddc_host.decommission(_opts(), host) def cluster_list(): return sddc_cluster.list_(_opts()) def cluster_get(cluster): return sddc_cluster.get(_opts(), cluster) def cluster_create(cluster_spec): return sddc_cluster.create(_opts(), cluster_spec) def cluster_delete(cluster): return sddc_cluster.delete(_opts(), cluster) def domain_list(): return sddc_domain.list_(_opts()) def domain_get(domain): return sddc_domain.get(_opts(), domain) def credentials_list(): return sddc_credentials.list_(_opts()) def credentials_rotate(elements): return sddc_credentials.rotate(_opts(), elements) # VMSP platform services (mediated via /v1/vcf-services) def vcf_services_list(): return sddc_vcf_services.list_(_opts()) def vcf_services_get(service_id): return sddc_vcf_services.get(_opts(), service_id) def vcf_services_get_by_name(name): return sddc_vcf_services.get_by_name(_opts(), name)