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))
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)
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&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
display_fields = [('name', 'Name'),
('owner', 'Owner'),
('contact', 'Contact'),
+ ('type', 'Type'),
'NIC_INFO',
('uptime', 'uptime'),
('cputime', 'CPU usage'),
]
fields = []
machine_info = {}
+ machine_info['type'] = machine.type.hvm and 'HVM' or 'ParaVM'
machine_info['owner'] = machine.owner
machine_info['contact'] = machine.contact