Source code for saltext.vcf.clients.esxi_host
"""ESXi host system operations via SOAP/pyVmomi."""
from saltext.vcf.utils import esxi
# Maps SOAP lockdownMode enum values to the REST-style strings we expose.
_LOCKDOWN_FROM_SOAP = {
"lockdownDisabled": "DISABLED",
"lockdownNormal": "NORMAL",
"lockdownStrict": "STRICT",
}
_LOCKDOWN_TO_SOAP = {v: k for k, v in _LOCKDOWN_FROM_SOAP.items()}
[docs]
def info(opts, profile=None):
"""Return host system info (version, build, hardware summary)."""
host = esxi.get_host_system(opts, profile=profile)
summary = host.summary
hw = host.hardware.systemInfo if host.hardware else None
return {
"version": summary.config.product.version,
"build": summary.config.product.build,
"product_name": summary.config.product.name,
"vendor": hw.vendor if hw else None,
"model": hw.model if hw else None,
"in_maintenance_mode": summary.runtime.inMaintenanceMode,
"connection_state": str(summary.runtime.connectionState),
"power_state": str(summary.runtime.powerState),
}
[docs]
def lockdown_get(opts, profile=None):
"""Return current lockdown mode config."""
host = esxi.get_host_system(opts, profile=profile)
soap_mode = str(host.configManager.hostAccessManager.lockdownMode)
return {"mode": _LOCKDOWN_FROM_SOAP.get(soap_mode, soap_mode)}
[docs]
def lockdown_set(opts, mode, exception_users=None, profile=None):
"""Set lockdown mode. *mode* is one of ``NORMAL``, ``STRICT``, ``DISABLED``."""
host = esxi.get_host_system(opts, profile=profile)
mgr = host.configManager.hostAccessManager
soap_mode = _LOCKDOWN_TO_SOAP.get(mode, mode)
mgr.ChangeLockdownMode(mode=soap_mode)
if exception_users is not None:
mgr.UpdateLockdownExceptions(users=list(exception_users))
return lockdown_get(opts, profile=profile)
def enter_maintenance(opts, profile=None):
host = esxi.get_host_system(opts, profile=profile)
host.EnterMaintenanceMode_Task(timeout=0)
return {"status": "entering maintenance"}
def exit_maintenance(opts, profile=None):
host = esxi.get_host_system(opts, profile=profile)
host.ExitMaintenanceMode_Task(timeout=0)
return {"status": "exiting maintenance"}
def reboot(opts, force=False, profile=None):
host = esxi.get_host_system(opts, profile=profile)
host.RebootHost_Task(force=bool(force))
return {"status": "rebooting"}
def shutdown(opts, force=False, profile=None):
host = esxi.get_host_system(opts, profile=profile)
host.ShutdownHost_Task(force=bool(force))
return {"status": "shutting down"}
[docs]
def is_in_maintenance(host_info):
"""True if *host_info* (from :func:`info`) reports maintenance mode."""
return (
bool(host_info.get("in_maintenance_mode"))
or host_info.get("connection_state") == "MAINTENANCE"
)