X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/230d47ec0096ba45aeb3a690fa2c4551f4fcbb16..74cf12ca4c1ba056483885a9b3b0d5c86014f1d1:/code/validation.py 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.