add and respect 'adminable' column to machines
[invirt/packages/invirt-web.git] / code / validation.py
index e69559a..2e6c7c3 100644 (file)
@@ -4,7 +4,7 @@ import cache_acls
 import getafsgroups
 import re
 import string
 import getafsgroups
 import re
 import string
-from sipb_xen_database import Machine, NIC, Type, Disk, CDROM, Autoinstall
+from invirt.database import Machine, NIC, Type, Disk, CDROM, Autoinstall
 from webcommon import InvalidInput
 
 MAX_MEMORY_TOTAL = 512
 from webcommon import InvalidInput
 
 MAX_MEMORY_TOTAL = 512
@@ -125,7 +125,8 @@ def cantAddVm(owner, g):
 
 def haveAccess(user, state, machine):
     """Return whether a user has administrative access to a machine"""
 
 def haveAccess(user, state, machine):
     """Return whether a user has administrative access to a machine"""
-    return state.overlord or user in cache_acls.accessList(machine)
+    return (user in cache_acls.accessList(machine)
+            or (machine.adminable and state.isadmin))
 
 def owns(user, machine):
     """Return whether a user owns a machine"""
 
 def owns(user, machine):
     """Return whether a user owns a machine"""
@@ -157,7 +158,7 @@ def validMemory(owner, g, memory, machine=None, on=True):
         raise InvalidInput('memory', memory,
                            "Minimum %s MiB" % MIN_MEMORY_SINGLE)
     max_val = maxMemory(owner, g, machine, on)
         raise InvalidInput('memory', memory,
                            "Minimum %s MiB" % MIN_MEMORY_SINGLE)
     max_val = maxMemory(owner, g, machine, on)
-    if not g.overlord and memory > max_val:
+    if not g.isadmin and memory > max_val:
         raise InvalidInput('memory', memory,
                            'Maximum %s MiB for %s' % (max_val, owner))
     return memory
         raise InvalidInput('memory', memory,
                            'Maximum %s MiB for %s' % (max_val, owner))
     return memory
@@ -166,7 +167,7 @@ def validDisk(owner, g, disk, machine=None):
     """Parse and validate limits for disk for a given owner and machine."""
     try:
         disk = float(disk)
     """Parse and validate limits for disk for a given owner and machine."""
     try:
         disk = float(disk)
-        if not g.overlord and disk > maxDisk(owner, machine):
+        if not g.isadmin and disk > maxDisk(owner, machine):
             raise InvalidInput('disk', disk,
                                "Maximum %s G" % maxDisk(owner, machine))
         disk = int(disk * 1024)
             raise InvalidInput('disk', disk,
                                "Maximum %s G" % maxDisk(owner, machine))
         disk = int(disk * 1024)
@@ -269,7 +270,7 @@ def testName(user, name, machine=None):
         return None
     if not Machine.select_by(name=name):
         if not validMachineName(name):
         return None
     if not Machine.select_by(name=name):
         if not validMachineName(name):
-            raise InvalidInput('name', name, 'You must provide a machine name.  Max 22 chars, alnum plus \'-\' and \'_\'.')
+            raise InvalidInput('name', name, 'You must provide a machine name.  Max 63 chars, alnum plus \'-\', does not begin or end with \'-\'.')
         return name
     raise InvalidInput('name', name, "Name is already taken.")
 
         return name
     raise InvalidInput('name', name, "Name is already taken.")