Punt some debug spew from the website
[invirt/packages/invirt-web.git] / code / controls.py
index 86c23c2..bb12a1a 100644 (file)
@@ -1,11 +1,6 @@
-"""
-Functions to perform remctls.
-"""
-
 import validation
 import validation
-from webcommon import CodeError, InvalidInput
+from invirt.common import CodeError, InvalidInput
 import random
 import random
-import subprocess
 import sys
 import time
 import re
 import sys
 import time
 import re
@@ -14,6 +9,7 @@ import yaml
 
 from invirt.config import structs as config
 from invirt.database import Machine, Disk, Type, NIC, CDROM, session, meta
 
 from invirt.config import structs as config
 from invirt.database import Machine, Disk, Type, NIC, CDROM, session, meta
+from invirt.remctl import remctl as gen_remctl
 
 # ... and stolen from xend/uuid.py
 def randomUUID():
 
 # ... and stolen from xend/uuid.py
 def randomUUID():
@@ -27,39 +23,10 @@ def uuidToString(u):
                      "%02x" * 6]) % tuple(u)
 # end stolen code
 
                      "%02x" * 6]) % tuple(u)
 # end stolen code
 
-def kinit():
-    """Kinit with a given username and keytab"""
-    p = subprocess.Popen(['kinit', "-k", "-t", '/etc/invirt/keytab',
-                          'daemon/'+config.web.hostname],
-                         stderr=subprocess.PIPE)
-    e = p.wait()
-    if e:
-        raise CodeError("Error %s in kinit: %s" % (e, p.stderr.read()))
-
-def checkKinit():
-    """If we lack tickets, kinit."""
-    p = subprocess.Popen(['klist', '-s'])
-    if p.wait():
-        kinit()
-
-def remctl(*args, **kws):
-    """Perform a remctl and return the output.
-
-    kinits if necessary, and outputs errors to stderr.
-    """
-    checkKinit()
-    p = subprocess.Popen(['remctl', config.remote.hostname]
-                         + list(args),
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE)
-    v = p.wait()
-    if kws.get('err'):
-        return p.stdout.read(), p.stderr.read()
-    if v:
-        print >> sys.stderr, 'Error', v, 'on remctl', args, ':'
-        print >> sys.stderr, p.stderr.read()
-        raise CodeError('ERROR on remctl')
-    return p.stdout.read()
+def remctl(*args, **kwargs):
+    return gen_remctl(config.remote.hostname,
+                      principal='daemon/'+config.web.hostname,
+                      *args, **kwargs)
 
 def lvcreate(machine, disk):
     """Create a single disk for a machine"""
 
 def lvcreate(machine, disk):
     """Create a single disk for a machine"""
@@ -78,10 +45,13 @@ def getswap(disksize, memsize):
 def lvinstall(machine, autoinstall):
     disksize = machine.disks[0].size
     memsize = machine.memory
 def lvinstall(machine, autoinstall):
     disksize = machine.disks[0].size
     memsize = machine.memory
-    imagesize = disksize - getswap(disksize, memsize)
+    swapsize = getswap(disksize, memsize)
+    imagesize = disksize - swapsize
     ip = machine.nics[0].ip
     ip = machine.nics[0].ip
-    remctl('web', 'install', machine.name, autoinstall.distribution,
-           autoinstall.mirror, str(imagesize), ip)
+    remctl('control', machine.name, 'install', 
+           'dist=%s' % autoinstall.distribution,
+           'mirror=%s' % autoinstall.mirror,
+           'imagesize=%s' % imagesize)
 
 def lvcopy(machine_orig_name, machine, rootpw):
     """Copy a golden image onto a machine's disk"""
 
 def lvcopy(machine_orig_name, machine, rootpw):
     """Copy a golden image onto a machine's disk"""
@@ -141,8 +111,9 @@ def createVm(username, state, owner, contact, name, description, memory, disksiz
     makeDisks(machine)
     if autoinstall:
         lvinstall(machine, autoinstall)
     makeDisks(machine)
     if autoinstall:
         lvinstall(machine, autoinstall)
-    # tell it to boot with cdrom
-    bootMachine(machine, cdrom)
+    else:
+        # tell it to boot with cdrom
+        bootMachine(machine, cdrom)
     return machine
 
 def getList():
     return machine
 
 def getList():
@@ -200,6 +171,13 @@ def listHost(machine):
         return None
     return out.strip()
 
         return None
     return out.strip()
 
+def vnctoken(machine):
+    """Return a time-stamped VNC token"""
+    out, err = remctl('control', machine.name, 'vnctoken', err=True)
+    if err:
+        return None
+    return out.strip()
+
 def deleteVM(machine):
     """Delete a VM."""
     remctl('control', machine.name, 'destroy', err=True)
 def deleteVM(machine):
     """Delete a VM."""
     remctl('control', machine.name, 'destroy', err=True)