Correct failure modes when undefining VM
Undefining a VM would sometimes leave a remnant UUID in the runningdomains list on the target hypervisor which persisted even after restarting. This helps prevent that happening by splitting the various undefine steps into separate try blocks, just in case one fails. Fixes #15
This commit is contained in:
parent
2163143951
commit
d205ef2072
16
pvc.py
16
pvc.py
|
@ -962,11 +962,8 @@ def undefine_vm(domain):
|
|||
dom_uuid = searchClusterByName(zk_conn, domain)
|
||||
dom_name = searchClusterByUUID(zk_conn, dom_uuid)
|
||||
|
||||
if dom_uuid == None:
|
||||
click.echo('ERROR: Could not find VM "{}" in the cluster!'.format(domain))
|
||||
stopZKConnection(zk_conn)
|
||||
return
|
||||
|
||||
# Shut down the VM
|
||||
try:
|
||||
current_vm_state = zk_conn.get('/domains/{}/state'.format(dom_uuid))[0].decode('ascii')
|
||||
if current_vm_state != 'stop':
|
||||
click.echo('Forcibly stopping VM "{}".'.format(dom_uuid))
|
||||
|
@ -978,12 +975,19 @@ def undefine_vm(domain):
|
|||
# Wait for 3 seconds to allow state to flow to all hypervisors
|
||||
click.echo('Waiting for cluster to update.')
|
||||
time.sleep(1)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Gracefully terminate the class instances
|
||||
try:
|
||||
click.echo('Deleting VM "{}" from nodes.'.format(dom_uuid))
|
||||
zk_conn.set('/domains/{}/state'.format(dom_uuid), 'delete'.encode('ascii'))
|
||||
time.sleep(5)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Delete the configurations
|
||||
try:
|
||||
click.echo('Undefining VM "{}".'.format(dom_uuid))
|
||||
transaction = zk_conn.transaction()
|
||||
transaction.delete('/domains/{}/state'.format(dom_uuid))
|
||||
|
@ -993,6 +997,8 @@ def undefine_vm(domain):
|
|||
transaction.delete('/domains/{}/xml'.format(dom_uuid))
|
||||
transaction.delete('/domains/{}'.format(dom_uuid))
|
||||
transaction.commit()
|
||||
except:
|
||||
pass
|
||||
|
||||
# Close the Zookeeper connection
|
||||
stopZKConnection(zk_conn)
|
||||
|
|
Loading…
Reference in New Issue