Support setting paravm/hvm for off, but already created, VMs.
[invirt/packages/invirt-web.git] / code / validation.py
index a2e19fe..97a8819 100644 (file)
@@ -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.