Source code for saltext.vmware.states.datastore
# SPDX-License-Identifier: Apache-2.0
import logging
import saltext.vmware.utils.connect as connect
import saltext.vmware.utils.datastore as utils_datastore
log = logging.getLogger(__name__)
try:
from pyVmomi import vim
HAS_PYVMOMI = True
except ImportError:
HAS_PYVMOMI = False
__virtualname__ = "vmware_datastore"
__proxyenabled__ = ["vmware_datastore"]
def __virtual__():
if not HAS_PYVMOMI:
return False, "Unable to import pyVmomi module."
return __virtualname__
[docs]def maintenance_mode(name, enter_maintenance_mode, datacenter_name=None, service_instance=None):
"""
Manage boot option for a virtual machine
name
The name of the datastore.
enter_maintenance_mode
(Bool) True to put datastore in maintenance mode, False to exit maintenance mode.
datacenter_name
The name of the datacenter containing the datastore.
service_instance
(optional) The Service Instance from which to obtain managed object references.
"""
if service_instance is None:
service_instance = connect.get_service_instance(opts=__opts__, pillar=__pillar__)
ret = {"name": name, "changes": {}, "result": True, "comment": ""}
assert isinstance(name, str)
datastores = utils_datastore.get_datastores(
service_instance, datastore_name=name, datacenter_name=datacenter_name
)
ds = datastores[0] if datastores else None
status = ds.summary.maintenanceMode
if enter_maintenance_mode:
if status == "inMaintenance":
ret["comment"] = "Already in maintenance mode."
return ret
if __opts__["test"]:
ret["result"] = None
ret["changes"] = {"new": f"datastore {name} will enter maintenance mode."}
ret["comment"] = "These options are set to change."
return ret
mode = utils_datastore.enter_maintenance_mode(ds)
if mode:
ret["changes"] = {"new": f"datastore {name} is in maintenance mode."}
ret["comment"] = "These options changed."
return ret
ret["comment"] = f"Failed to put datastore {name} in maintenance mode."
ret["result"] = False
return ret
else:
if status == "normal":
ret["comment"] = "Already exited maintenance mode."
return ret
if __opts__["test"]:
ret["result"] = None
ret["changes"] = {"new": f"datastore {name} will exit maintenance mode."}
ret["comment"] = "These options are set to change."
return ret
mode = utils_datastore.exit_maintenance_mode(ds)
if mode:
ret["changes"] = {"new": f"datastore {name} exited maintenance mode."}
ret["comment"] = "These options changed."
return ret
ret["comment"] = f"datastore {name} failed to exit maintenance mode."
ret["result"] = False
return ret