pkill directly rather than fool around with a CGI
[invirt/packages/invirt-web.git] / code / controls.py
index 4576a2e..4cd0e9c 100644 (file)
@@ -9,7 +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
+from invirt.remctl import remctl as gen_remctl
 
 # ... and stolen from xend/uuid.py
 def randomUUID():
 
 # ... and stolen from xend/uuid.py
 def randomUUID():
@@ -23,6 +23,11 @@ def uuidToString(u):
                      "%02x" * 6]) % tuple(u)
 # end stolen code
 
                      "%02x" * 6]) % tuple(u)
 # end stolen code
 
+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"""
     remctl('web', 'lvcreate', machine.name,
 def lvcreate(machine, disk):
     """Create a single disk for a machine"""
     remctl('web', 'lvcreate', machine.name,
@@ -46,6 +51,7 @@ def lvinstall(machine, autoinstall):
     remctl('control', machine.name, 'install', 
            'dist=%s' % autoinstall.distribution,
            'mirror=%s' % autoinstall.mirror,
     remctl('control', machine.name, 'install', 
            'dist=%s' % autoinstall.distribution,
            'mirror=%s' % autoinstall.mirror,
+           'arch=%s' % autoinstall.arch,
            'imagesize=%s' % imagesize)
 
 def lvcopy(machine_orig_name, machine, rootpw):
            'imagesize=%s' % imagesize)
 
 def lvcopy(machine_orig_name, machine, rootpw):
@@ -82,7 +88,7 @@ def createVm(username, state, owner, contact, name, description, memory, disksiz
         machine.description = description
         machine.memory = memory
         machine.owner = owner
         machine.description = description
         machine.memory = memory
         machine.owner = owner
-        machine.administrator = owner
+        machine.administrator = None
         machine.contact = contact
         machine.uuid = uuidToString(randomUUID())
         machine.boot_off_cd = True
         machine.contact = contact
         machine.uuid = uuidToString(randomUUID())
         machine.boot_off_cd = True
@@ -104,11 +110,15 @@ def createVm(username, state, owner, contact, name, description, memory, disksiz
         session.rollback()
         raise
     makeDisks(machine)
         session.rollback()
         raise
     makeDisks(machine)
-    if autoinstall:
-        lvinstall(machine, autoinstall)
-    else:
-        # tell it to boot with cdrom
-        bootMachine(machine, cdrom)
+    try:
+        if autoinstall:
+            lvinstall(machine, autoinstall)
+        else:
+            # tell it to boot with cdrom
+            bootMachine(machine, cdrom)
+    except CodeError, e:
+        deleteVM(machine)
+        raise
     return machine
 
 def getList():
     return machine
 
 def getList():
@@ -166,6 +176,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)