Perform automatic shutdown/stop on VM disable

Instead of requiring the VM to already be stopped, instead allow disable
state changes to perform a shutdown first. Also add a force option which
will do a hard stop instead of a shutdown.

References #148
This commit is contained in:
2021-11-06 03:53:44 -04:00
parent 16544227eb
commit 739b60b91e
4 changed files with 30 additions and 10 deletions

View File

@ -837,21 +837,29 @@ def stop_vm(zkhandler, domain):
return True, 'Forcibly stopping VM "{}".'.format(domain)
def disable_vm(zkhandler, domain):
def disable_vm(zkhandler, domain, force=False):
# Validate that VM exists in cluster
dom_uuid = getDomainUUID(zkhandler, domain)
if not dom_uuid:
return False, 'ERROR: Could not find VM "{}" in the cluster!'.format(domain)
# Get state and verify we're OK to proceed
# Get state and perform a shutdown/stop if VM is online
current_state = zkhandler.read(("domain.state", dom_uuid))
if current_state != "stop":
return False, 'ERROR: VM "{}" must be stopped before disabling!'.format(domain)
if force:
change_state(zkhandler, dom_uuid, "stop")
# Wait for the command to be registered by the node
time.sleep(0.5)
else:
change_state(zkhandler, dom_uuid, "shutdown")
# Wait for the shutdown to complete
while zkhandler.read(("domain.state", dom_uuid)) != "stop":
time.sleep(0.5)
# Set the VM to disable
change_state(zkhandler, dom_uuid, "disable")
return True, 'Marked VM "{}" as disable.'.format(domain)
return True, 'Disabled VM "{}".'.format(domain)
def update_vm_sriov_nics(zkhandler, dom_uuid, source_node, target_node):