Autoinstalls
[invirt/packages/invirt-web.git] / code / controls.py
index bb6c590..050b365 100644 (file)
@@ -69,6 +69,18 @@ def makeDisks(machine):
     for disk in machine.disks:
         lvcreate(machine, disk)
 
+def getswap(disksize, memsize):
+    """Returns the recommended swap partition size."""
+    return int(min(disksize / 4, memsize * 1.5))
+
+def lvinstall(machine, autoinstall):
+    disksize = machine.disks[0].size
+    memsize = machine.memory
+    imagesize = disksize - getswap(disksize, memsize)
+    ip = machine.nics[0].ip
+    remctl('web', 'install', machine.name, autoinstall.distribution,
+           autoinstall.mirror, str(imagesize), ip)
+
 def lvcopy(machine_orig_name, machine, rootpw):
     """Copy a golden image onto a machine's disk"""
     remctl('web', 'lvcopy', machine_orig_name, machine.name, rootpw)
@@ -92,7 +104,7 @@ def bootMachine(machine, cdtype):
         raise CodeError('"%s" on "control %s create %s' 
                         % (err, machine.name, cdtype))
 
-def createVm(username, state, owner, contact, name, description, memory, disksize, machine_type, cdrom, clone_from):
+def createVm(username, state, owner, contact, name, description, memory, disksize, machine_type, cdrom, autoinstall):
     """Create a VM and put it in the database"""
     # put stuff in the table
     transaction = ctx.current.create_transaction()
@@ -130,8 +142,8 @@ def createVm(username, state, owner, contact, name, description, memory, disksiz
         transaction.rollback()
         raise
     makeDisks(machine)
-    if clone_from:
-        lvcopy(clone_from, machine, 'password')
+    if autoinstall:
+        lvinstall(machine, autoinstall)
     # tell it to boot with cdrom
     bootMachine(machine, cdrom)
     return machine