vmtools/stopvm
cecilkorik 7b51226796 initial import
--HG--
branch : vmtools
2011-03-05 08:34:41 +00:00

75 lines
1.4 KiB
Python
Executable file

#!/usr/bin/python
import os, sys, time, traceback
def vbox_soft_kill(name, pid):
def vbox_running(pid):
try:
fd = open("/proc/%d/cmdline" % (pid,), "r")
except IOError, OSError:
return False
return True
if not vbox_running(pid):
return
os.system("vboxmanage controlvm %s acpipowerbutton" % (name,))
for i in xrange(360):
time.sleep(0.333)
if not vbox_running(pid):
return
os.system("vboxmanage controlvm %s poweroff" % (name,))
for i in xrange(30):
time.sleep(0.333)
if not vbox_running(pid):
return
os.system("kill %s" % (pid,))
for i in xrange(30):
time.sleep(0.333)
if not vbox_running(pid):
return
os.system("kill -9 %s" % (pid,))
def usage():
sys.stderr.write("""\
Usage:
stopvm <vmname>
""")
def run():
if len(sys.argv) != 2:
sys.stderr.write("Invalid arguments\n\n")
usage()
return
name = sys.argv[1]
vml = open('/srv/vmlist', 'r')
found = False
for vmn in vml:
vmn = vmn.strip()
if not vmn:
continue
vmn = vmn.split()[0]
if vmn == name:
found = True
break
if not found:
sys.stderr.write("Invalid VM name\n\n")
usage()
return
if not os.path.exists('/var/run/vbox/%s' % (name,)):
sys.stderr.write("VM is not running\n\n")
usage()
return
fd = open('/var/run/vbox/%s' % (name,), 'r')
pid = int(fd.read())
fd.close()
vbox_soft_kill(name, pid)
if __name__ == "__main__":
run()