X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/632ab6dde450c5e7b35f8817816c9d04294bd230..6d171bbcd3eb2d5d60fc6c4bc9ef12608421d7c1:/code/controls.py diff --git a/code/controls.py b/code/controls.py index 1d9b824..8a5f1ef 100644 --- a/code/controls.py +++ b/code/controls.py @@ -2,7 +2,6 @@ Functions to perform remctls. """ -from sipb_xen_database import Machine, Disk, Type, NIC, CDROM, ctx, meta import validation from webcommon import CodeError, InvalidInput import random @@ -13,6 +12,9 @@ import re import cache_acls import yaml +from invirt.config import structs as config +from invirt.database import Machine, Disk, Type, NIC, CDROM, ctx, meta + # ... and stolen from xend/uuid.py def randomUUID(): """Generate a random UUID.""" @@ -25,10 +27,10 @@ def uuidToString(u): "%02x" * 6]) % tuple(u) # end stolen code -def kinit(username = 'daemon/sipb-xen.mit.edu', keytab = '/etc/sipb-xen.keytab'): +def kinit(): """Kinit with a given username and keytab""" - - p = subprocess.Popen(['kinit', "-k", "-t", keytab, username], + p = subprocess.Popen(['kinit', "-k", "-t", '/etc/invirt/keytab', + 'daemon/'+config.web.hostname], stderr=subprocess.PIPE) e = p.wait() if e: @@ -46,7 +48,7 @@ def remctl(*args, **kws): kinits if necessary, and outputs errors to stderr. """ checkKinit() - p = subprocess.Popen(['remctl', 'remote.mit.edu'] + p = subprocess.Popen(['remctl', config.remote.hostname] + list(args), stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -97,7 +99,7 @@ def bootMachine(machine, cdtype): else: out, err = remctl('control', machine.name, 'create', err=True) - if 'already exists' in out: + if 'already running' in err: raise InvalidInput('action', 'create', 'VM %s is already on' % machine.name) elif err: @@ -130,7 +132,7 @@ def createVm(username, state, owner, contact, name, description, memory, disksiz open_nics = NIC.select_by(machine_id=None) if not open_nics: #No IPs left! raise CodeError("No IP addresses left! " - "Contact xvm@mit.edu.") + "Contact %s." % config.web.errormail) nic = open_nics[0] nic.machine_id = machine.machine_id nic.hostname = name @@ -201,7 +203,7 @@ def listHost(machine): out, err = remctl('control', machine.name, 'listhost', err=True) if err: return None - return out + return out.strip() def deleteVM(machine): """Delete a VM.""" @@ -242,7 +244,7 @@ def commandResult(username, state, fields): out, err = remctl('control', machine.name, 'reboot', err=True) if err: - if re.match("Error: Domain '.*' does not exist.", err): + if re.match("machine '.*' is not on", err): raise InvalidInput("action", "reboot", "Machine is not on") else: @@ -259,7 +261,7 @@ def commandResult(username, state, fields): elif action == 'Power off': out, err = remctl('control', machine.name, 'destroy', err=True) if err: - if re.match("Error: Domain '.*' does not exist.", err): + if re.match("machine '.*' is not on", err): raise InvalidInput("action", "Power off", "Machine is not on.") else: @@ -269,7 +271,7 @@ def commandResult(username, state, fields): elif action == 'Shutdown': out, err = remctl('control', machine.name, 'shutdown', err=True) if err: - if re.match("Error: Domain '.*' does not exist.", err): + if re.match("machine '.*' is not on", err): raise InvalidInput("action", "Shutdown", "Machine is not on.") else: