From 74cf12ca4c1ba056483885a9b3b0d5c86014f1d1 Mon Sep 17 00:00:00 2001 From: Eric Price Date: Mon, 21 Apr 2008 21:13:53 -0400 Subject: [PATCH] Support setting paravm/hvm for off, but already created, VMs. svn path=/trunk/packages/sipb-xen-www/; revision=440 --- code/main.py | 12 +++++++++--- code/templates/functions.tmpl | 10 ++++++++++ code/templates/info.tmpl | 5 ++++- code/templates/list.tmpl | 14 ++++---------- code/validation.py | 25 +++++++++++++++---------- 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/code/main.py b/code/main.py index 9caf7c4..f1ff5ac 100755 --- a/code/main.py +++ b/code/main.py @@ -36,7 +36,8 @@ sys.path.append('/home/ecprice/.local/lib/python2.5/site-packages') import templates from Cheetah.Template import Template -from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess +import sipb_xen_database +from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess, Type import validation from webcommon import InvalidInput, CodeError, g import controls @@ -71,6 +72,7 @@ def makeErrorPre(old, addition): else: return '

STDERR:

' + str(addition) + '
' +Template.sipb_xen_database = sipb_xen_database Template.helppopup = staticmethod(helppopup) Template.err = None @@ -97,8 +99,8 @@ class Defaults: disk = 4.0 cdrom = '' name = '' - vmtype = 'hvm' def __init__(self, max_memory=None, max_disk=None, **kws): + self.type = Type.get('linux-hvm') if max_memory is not None: self.memory = min(self.memory, max_memory) if max_disk is not None: @@ -379,6 +381,10 @@ def modifyDict(user, fields): memory = validation.validMemory(user, memory, machine, on=False) machine.memory = memory + vm_type = validation.validVmType(fields.getfirst('vmtype')) + if vm_type is not None: + machine.type = vm_type + disksize = validation.testDisk(user, fields.getfirst('disk')) if disksize is not None: disksize = validation.validDisk(user, disksize, machine) @@ -560,7 +566,7 @@ def infoDict(user, machine): checkpoint.checkpoint('Got mem') max_disk = validation.maxDisk(user, machine) defaults = Defaults() - for name in 'machine_id name administrator owner memory contact'.split(): + for name in 'machine_id name administrator owner memory contact type'.split(): setattr(defaults, name, getattr(machine, name)) defaults.disk = "%0.2f" % (machine.disks[0].size/1024.) checkpoint.checkpoint('Got defaults') diff --git a/code/templates/functions.tmpl b/code/templates/functions.tmpl index 7b917b0..c3aa050 100644 --- a/code/templates/functions.tmpl +++ b/code/templates/functions.tmpl @@ -13,6 +13,16 @@ #end def +#def vmTypeList($default=None) +#for $vmtype in $sipb_xen_database.Type.select() + +#end for +#end def + #def addError(txt) #if $varExists('txt') #set global $error_text = $error_text + '----\n' + $txt diff --git a/code/templates/info.tmpl b/code/templates/info.tmpl index 3dc1b37..743034f 100644 --- a/code/templates/info.tmpl +++ b/code/templates/info.tmpl @@ -58,7 +58,6 @@ Info on $machine.name #if $on (To edit ram, disk size, or machine name, turn off the machine first.) #end if -

@@ -71,6 +70,10 @@ $errorRow('contact', $err) #if not $on $errorRow('name', $err) + + + + $errorRow('memory', $err) diff --git a/code/templates/list.tmpl b/code/templates/list.tmpl index 7611329..5c0bc74 100644 --- a/code/templates/list.tmpl +++ b/code/templates/list.tmpl @@ -35,16 +35,10 @@ $errorRow('memory', $err) $errorRow('disk', $err) - - - - + + + + $errorRow('vmtype', $err) diff --git a/code/validation.py b/code/validation.py index a2e19fe..97a8819 100644 --- a/code/validation.py +++ b/code/validation.py @@ -18,7 +18,7 @@ MAX_VMS_ACTIVE = 4 def getMachinesByOwner(user, machine=None): """Return the machines owned by the same as a machine. - + If the machine is None, return the machines owned by the same user. """ @@ -31,7 +31,7 @@ def getMachinesByOwner(user, machine=None): def maxMemory(user, machine=None, on=True): """Return the maximum memory for a machine or a user. - If machine is None, return the memory available for a new + If machine is None, return the memory available for a new machine. Else, return the maximum that machine can have. on is whether the machine should be turned on. If false, the max @@ -49,6 +49,11 @@ def maxMemory(user, machine=None, on=True): return min(MAX_MEMORY_SINGLE, MAX_MEMORY_TOTAL-mem_usage) def maxDisk(user, machine=None): + """Return the maximum disk that a machine can reach. + + If machine is None, the maximum disk for a new machine. Otherwise, + return the maximum that a given machine can be changed to. + """ machines = getMachinesByOwner(user, machine) disk_usage = sum([sum([y.size for y in x.disks]) for x in machines if x != machine]) @@ -101,7 +106,7 @@ def validMemory(user, memory, machine=None, on=True): if memory < MIN_MEMORY_SINGLE: raise ValueError except ValueError: - raise InvalidInput('memory', memory, + raise InvalidInput('memory', memory, "Minimum %s MiB" % MIN_MEMORY_SINGLE) if memory > maxMemory(user, machine, on): raise InvalidInput('memory', memory, @@ -125,12 +130,12 @@ def validDisk(user, disk, machine=None): return disk def validVmType(vm_type): - if vm_type == 'hvm': - return Type.get('linux-hvm') - elif vm_type == 'paravm': - return Type.get('linux') - else: + if vm_type is None: + return None + t = Type.get(vm_type) + if t is None: raise CodeError("Invalid vm type '%s'" % vm_type) + return t def testMachineId(user, machine_id, exists=True): """Parse, validate and check authorization for a given user and machine. @@ -138,7 +143,7 @@ def testMachineId(user, machine_id, exists=True): If exists is False, don't check that it exists. """ if machine_id is None: - raise InvalidInput('machine_id', machine_id, + raise InvalidInput('machine_id', machine_id, "Must specify a machine ID.") try: machine_id = int(machine_id) @@ -176,7 +181,7 @@ def testAdmin(user, admin, machine): raise InvalidInput('administrator', admin, errmsg) #XXX Should we require that user is in the admin group? return admin - + def testOwner(user, owner, machine=None): """Determine whether a user can set the owner of a machine to this value. -- 1.7.9.5
Machine Name:
HVM/ParaVM$helppopup('hvm_paravm')$vmTypeList($defaults.type)
Ram:MiB (max $max_mem)
Disk:GiB (max $max_disk)WARNING: Modifying disk size may corrupt your data.
GiB (${"%0.1f" % ($max_disk-0.05)} max)
HVM/ParaVM$helppopup('hvm_paravm') -#for $value, $name in (('hvm', 'HVM'), ('paravm', 'ParaVM')) - $name -#end for -
HVM/ParaVM$helppopup('hvm_paravm')$vmTypeList($defaults.type)
Boot CD