X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sliver_lxc.py;h=aef00add081a10ca0865d527b739e9a65d27ad7b;hb=ffd0695eb1c979e4dcee9eae29dd3578801971f3;hp=81af03763feb0211e84b5a3ac9ea3daf06390538;hpb=b9a862be3ae9df0a2ae00492e8088b9eb91b4bee;p=nodemanager.git diff --git a/sliver_lxc.py b/sliver_lxc.py index 81af037..aef00ad 100644 --- a/sliver_lxc.py +++ b/sliver_lxc.py @@ -6,10 +6,64 @@ import accounts import logger import subprocess import os +import libvirt +import sys + +def test_template(): + + xml_template = """ + + test_1 + 32768 + + exe + /bin/sh + + 1 + + destroy + restart + destroy + + /usr/libexec/libvirt_lxc + + + + + + + + + + """ + + return xml_template + +def createConnection(): + conn = libvirt.open('lxc:///') + if conn == None: + print 'Failed to open connection to LXC hypervisor' + sys.exit(1) + else: return conn + + +states = { + libvirt.VIR_DOMAIN_NOSTATE: 'no state', + libvirt.VIR_DOMAIN_RUNNING: 'running', + libvirt.VIR_DOMAIN_BLOCKED: 'blocked on resource', + libvirt.VIR_DOMAIN_PAUSED: 'paused by user', + libvirt.VIR_DOMAIN_SHUTDOWN: 'being shut down', + libvirt.VIR_DOMAIN_SHUTOFF: 'shut off', + libvirt.VIR_DOMAIN_CRASHED: 'crashed', +} + +def info(dom): + [state, maxmem, mem, ncpu, cputime] = dom.info() + return '%s is %s,\nmaxmem = %s, mem = %s, ncpu = %s, cputime = %s' % (dom.name(), states.get(state, state), maxmem, mem, ncpu, cputime) class Sliver_LXC(accounts.Account): """This class wraps LXC commands""" - + SHELL = '/bin/sh' # Using /bin/bash triggers destroy root/site_admin (?!?) TYPE = 'sliver.LXC' @@ -20,7 +74,7 @@ class Sliver_LXC(accounts.Account): self.name = rec['name'] print "LXC __init__ %s"%(self.name) logger.verbose ('sliver_lxc: %s init'%self.name) - + self.dir = '/vservers/%s'%(self.name) # Assume the directory with the image and config files @@ -35,7 +89,7 @@ class Sliver_LXC(accounts.Account): self.disk_usage_initialized = False self.initscript = '' self.enabled = True - self.configure(rec) + self.connection = createConnection() @staticmethod def create(name, rec = None): @@ -56,8 +110,14 @@ class Sliver_LXC(accounts.Account): command += ['/bin/bash','-x',] command += ['/usr/bin/lxc-create', '-n', name, '-f', config, '&'] print command - subprocess.call(command, stdin=open('/dev/null', 'r'), stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT, shell=False) - + #subprocess.call(command, stdin=open('/dev/null', 'r'), stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT, shell=False) + conn = createConnection() + try: + dom0 = conn.lookupByName(name) + except: + dom0 = conn.defineXML(test_template()) + print info(dom0) + @staticmethod def destroy(name): ''' lxc_destroy ''' @@ -96,4 +156,4 @@ class Sliver_LXC(accounts.Account): if state == 'RUNNING': return True else: return False - +