Shutting down a VM
From Xen
Jump to navigationJump to search
This page shows how to use the XenAPI to shut down a VM. The examples are written in python (feel free to add translations to other languages) and will use the API via the local Unix domain socket.
To request a clean shutdown of a VM with a given uuid: (Note this will block for up to 20 minutes while the VM is shutting down)
#!/usr/bin/env python
import XenAPI, sys
if len(sys.argv) <> 2:
print "Usage:"
print sys.argv[0], "<VM uuid>"
sys.exit(1)
uuid = sys.argv[1]
session = XenAPI.xapi_local()
session.xenapi.login_with_password("root", "")
try:
vm = session.xenapi.VM.get_by_uuid(uuid)
session.xenapi.VM.clean_shutdown(vm)
finally:
session.xenapi.session.logout()
To forcibly power off a VM, change
session.xenapi.VM.clean_shutdown(vm)
into
session.xenapi.VM.hard_shutdown(vm)
Note on older versions of xapi it is necessary to cancel any running "clean_shutdown" tasks before the "hard_shutdown" task can execute. The following program shows how to do this:
#!/usr/bin/env python
import XenAPI, sys
if len(sys.argv) <> 2:
print "Usage:"
print sys.argv[0], "<VM uuid>"
sys.exit(1)
uuid = sys.argv[1]
session = XenAPI.xapi_local()
session.xenapi.login_with_password("root", "")
try:
# find the VM
vm = session.xenapi.VM.get_by_uuid(uuid)
fields = session.xenapi.VM.get_record(vm)
# cancel any tasks operating on the VM (e.g. clean_shutdown)
current = fields["current_operations"]
for t in current.keys():
try:
print "\n Cancelling operation on VM: %s" % fields["name_label"],
sys.stdout.flush()
session.xenapi.task.cancel(t)
except Exception, e:
print "Failed to cancel task: %s" % t,
sys.stdout.flush()
raise e
session.xenapi.VM.hard_shutdown(vm)
finally:
session.xenapi.session.logout()
