ParaVM on list
[invirt/packages/invirt-web.git] / templates / main.py
index e2a88b3..4a50e43 100755 (executable)
@@ -41,7 +41,9 @@ def maxDisk(user, machine=None):
     return 10.0
 
 def haveAccess(user, machine):
-    return True
+    if user.username == 'moo':
+        return True
+    return machine.owner == user.username
 
 def error(op, user, fields, err):
     d = dict(op=op, user=user, errorMessage=str(err))
@@ -212,36 +214,44 @@ def createVm(user, name, memory, disk, is_hvm, cdrom):
 
     return machine
 
-def create(user, fields):
-    name = fields.getfirst('name')
-    if not validMachineName(name):
-        raise MyException("Invalid name '%s'" % name)
-    name = user.username + '_' + name.lower()
-
-    if Machine.get_by(name=name):
-        raise MyException("A machine named '%s' already exists" % name)
-    
-    memory = fields.getfirst('memory')
+def validMemory(user, memory, machine=None):
     try:
         memory = int(memory)
         if memory <= 0:
             raise ValueError
     except ValueError:
         raise MyException("Invalid memory amount")
-    if memory > maxMemory(user):
+    if memory > maxMemory(user, machine):
         raise MyException("Too much memory requested")
-    
-    disk = fields.getfirst('disk')
+    return memory
+
+def validDisk(user, disk, machine=None):
     try:
         disk = float(disk)
-        if disk > maxDisk(user):
+        if disk > maxDisk(user, machine):
             raise MyException("Too much disk requested")
         disk = int(disk * 1024)
         if disk <= 0:
             raise ValueError
     except ValueError:
         raise MyException("Invalid disk amount")
+    return disk
+
+def create(user, fields):
+    name = fields.getfirst('name')
+    if not validMachineName(name):
+        raise MyException("Invalid name '%s'" % name)
+    name = user.username + '_' + name.lower()
+
+    if Machine.get_by(name=name):
+        raise MyException("A machine named '%s' already exists" % name)
+    
+    memory = fields.getfirst('memory')
+    memory = validMemory(user, memory)
     
+    disk = fields.getfirst('disk')
+    disk = validDisk(user, disk)
+
     vm_type = fields.getfirst('vmtype')
     if vm_type not in ('hvm', 'paravm'):
         raise MyException("Invalid vm type '%s'"  % vm_type)    
@@ -260,11 +270,19 @@ def create(user, fields):
                    searchList=d);
 
 def listVms(user, fields):
-    machines = Machine.select()
+    machines = [m for m in Machine.select() if haveAccess(user, m)]    
     on = {}
     has_vnc = {}
     uptimes = getUptimes(machines)
-    on = has_vnc = uptimes
+    on = uptimes
+    for m in machines:
+        if not on.get(m.name):
+            has_vnc[m.name] = 'Off'
+        elif m.type.hvm:
+            has_vnc[m.name] = True
+        else:
+            help_name = 'paravm_console'
+            has_vnc[m.name] = 'ParaVM <span class="helplink"><a href="help?subject=%s&amp;simple=true" target="_blank" onclick="return helppopup(\'%s\')">(?)</a></span>' % (help_name, help_name)
     #     for m in machines:
     #         status = statusInfo(m)
     #         on[m.name] = status is not None
@@ -426,6 +444,7 @@ def info(user, fields):
     display_fields = [('name', 'Name'),
                       ('owner', 'Owner'),
                       ('contact', 'Contact'),
+                      ('type', 'Type'),
                       'NIC_INFO',
                       ('uptime', 'uptime'),
                       ('cputime', 'CPU usage'),
@@ -442,6 +461,7 @@ def info(user, fields):
                       ]
     fields = []
     machine_info = {}
+    machine_info['type'] = machine.type.hvm and 'HVM' or 'ParaVM'
     machine_info['owner'] = machine.owner
     machine_info['contact'] = machine.contact