X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/fbb16ba8e40d6b99bc7501faf4ebd934631900ca..49466ab6194ad35f3857e950721252621c3e539d:/templates/main.py diff --git a/templates/main.py b/templates/main.py index e2a88b3..4a50e43 100755 --- a/templates/main.py +++ b/templates/main.py @@ -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 (?)' % (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