Source code for saltext.vcf.states.vcf_vcenter_vm_class
"""State module for Supervisor VM Classes."""
from saltext.vcf.clients import vcenter_vm_class as c
__virtualname__ = "vcf_vcenter_vm_class"
def __virtual__():
return __virtualname__
def _ret(name):
return {"name": name, "changes": {}, "result": True, "comment": ""}
[docs]
def present(
name, cpu_count, memory_MB, profile=None, **spec
): # noqa: N803 pylint: disable=invalid-name
"""Ensure VM class *name* exists with the given sizing.
Extra keys in *spec* (``description``, ``cpu_reservation``,
``memory_reservation``, ``config_spec``) are forwarded as-is to the
create call.
"""
ret = _ret(name)
existing = c.get_or_none(__opts__, name, profile=profile)
desired = dict(spec)
desired.update({"id": name, "cpu_count": cpu_count, "memory_MB": memory_MB})
if existing is not None:
drift = {
k: (existing.get(k), v)
for k, v in desired.items()
if k not in ("id",) and existing.get(k) != v
}
if not drift:
ret["comment"] = f"VM class {name} already matches"
return ret
if __opts__["test"]:
ret["result"] = None
ret["comment"] = f"VM class {name} would be updated: {sorted(drift)}"
return ret
update_spec = {k: v for k, v in desired.items() if k != "id"}
c.update(__opts__, name, update_spec, profile=profile)
ret["changes"] = {"updated": sorted(drift)}
ret["comment"] = f"VM class {name} updated"
return ret
if __opts__["test"]:
ret["result"] = None
ret["comment"] = f"VM class {name} would be created"
return ret
c.create(__opts__, desired, profile=profile)
ret["changes"] = {"new": name}
ret["comment"] = f"VM class {name} created"
return ret
def absent(name, profile=None):
ret = _ret(name)
if c.get_or_none(__opts__, name, profile=profile) is None:
ret["comment"] = f"VM class {name} is already absent"
return ret
if __opts__["test"]:
ret["result"] = None
ret["comment"] = f"VM class {name} would be deleted"
return ret
c.delete(__opts__, name, profile=profile)
ret["changes"] = {"deleted": name}
ret["comment"] = f"VM class {name} deleted"
return ret