X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/c6003dd7f5cab27e9782b94617ffde59f2db331a..ca19f871d7c13c32acd29bb27a73237d36bd2657:/code/controls.py diff --git a/code/controls.py b/code/controls.py index bb6c590..050b365 100644 --- a/code/controls.py +++ b/code/controls.py @@ -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