import getafsgroups
import re
import string
-from sipb_xen_database import Machine, NIC
+from sipb_xen_database import Machine, NIC, Type
from webcommon import InvalidInput, g
MAX_MEMORY_TOTAL = 512
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.
"""
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
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])
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,
raise InvalidInput('disk', disk,
"Minimum %s GiB" % MIN_DISK_SINGLE)
return disk
-
+
+def validVmType(vm_type):
+ 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.
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)
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.