Source code for saltext.vcf.states.vcf_vccluster_resource_pool

"""State module for named child resource pools under a vCenter cluster."""

from saltext.vcf.clients import vccluster_resource_pool as c

__virtualname__ = "vcf_vccluster_resource_pool"


def __virtual__():
    return __virtualname__


def _ret(name):
    return {"name": name, "changes": {}, "result": True, "comment": ""}


def _drift(current, desired):
    diff = {}
    for k, v in desired.items():
        if k not in current or current[k] != v:
            diff[k] = (current.get(k), v)
    return diff


[docs] def present(name, cluster, cpu=None, memory=None, profile=None): """Ensure resource pool *name* exists under *cluster*, with the given CPU/memory allocation. Creates the pool first if it doesn't exist yet (with vSphere's normal defaults), then reconciles *cpu*/*memory* — each a dict with any of ``reservation``, ``expandable_reservation``, ``limit``, ``shares_level``, ``shares_value``. """ ret = _ret(name) created = False if c.get_or_none(__opts__, cluster, name, profile=profile) is None: if __opts__["test"]: ret["result"] = None ret["comment"] = f"resource pool {name} would be created under {cluster}" return ret c.create(__opts__, cluster, name, profile=profile) created = True current = c.get_shares(__opts__, cluster, name, profile=profile) drift = {} if cpu is not None: d = _drift(current["cpu"], cpu) if d: drift["cpu"] = d if memory is not None: d = _drift(current["memory"], memory) if d: drift["memory"] = d if not drift: if created: ret["changes"] = {"new": name} ret["comment"] = f"resource pool {name} created under {cluster}" else: ret["comment"] = f"resource pool {name} already matches" return ret if __opts__["test"]: ret["result"] = None ret["comment"] = f"resource pool {name} would change: {sorted(drift)}" return ret c.set_shares(__opts__, cluster, name, cpu=cpu, memory=memory, profile=profile) if created: drift["new"] = name ret["changes"] = drift ret["comment"] = f"resource pool {name} {'created and ' if created else ''}updated" return ret
[docs] def absent(name, cluster, profile=None): """Ensure no resource pool named *name* exists under *cluster*.""" ret = _ret(name) if c.get_or_none(__opts__, cluster, name, profile=profile) is None: ret["comment"] = f"resource pool {name} is already absent under {cluster}" return ret if __opts__["test"]: ret["result"] = None ret["comment"] = f"resource pool {name} would be deleted from {cluster}" return ret c.delete(__opts__, cluster, name, profile=profile) ret["changes"] = {"deleted": name} ret["comment"] = f"resource pool {name} deleted from {cluster}" return ret