Difference between revisions of "Shutting down a VM"

From Xen
Line 15: Line 15:
 
session.xenapi.login_with_password("root", "")
 
session.xenapi.login_with_password("root", "")
 
try:
 
try:
vm = xenapi.VM.get_by_uuid(uuid)
+
vm = session.xenapi.VM.get_by_uuid(uuid)
xenapi.VM.clean_shutdown(vm)
+
session.xenapi.VM.clean_shutdown(vm)
 
finally:
 
finally:
 
session.xenapi.session.logout()
 
session.xenapi.session.logout()
   
 
To forcibly power off a VM, change
 
To forcibly power off a VM, change
xenapi.VM.clean_shutdown(vm)
+
session.xenapi.VM.clean_shutdown(vm)
 
into
 
into
xenapi.VM.hard_shutdown(vm)
+
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:
 
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:
Line 40: Line 40:
 
try:
 
try:
 
# find the VM
 
# find the VM
vm = xenapi.VM.get_by_uuid(uuid)
+
vm = session.xenapi.VM.get_by_uuid(uuid)
fields = xenapi.VM.get_record(vm)
+
fields = session.xenapi.VM.get_record(vm)
 
# cancel any tasks operating on the VM (e.g. clean_shutdown)
 
# cancel any tasks operating on the VM (e.g. clean_shutdown)
 
current = fields["current_operations"]
 
current = fields["current_operations"]
Line 53: Line 53:
 
sys.stdout.flush()
 
sys.stdout.flush()
 
raise e
 
raise e
xenapi.VM.hard_shutdown(vm)
+
session.xenapi.VM.hard_shutdown(vm)
 
finally:
 
finally:
 
session.xenapi.session.logout()
 
session.xenapi.session.logout()

Revision as of 12:17, 31 October 2013

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()