X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/230d47ec0096ba45aeb3a690fa2c4551f4fcbb16..87439d01d15f6f56a7065d42beced901d887f8eb:/code/main.py diff --git a/code/main.py b/code/main.py index 9caf7c4..3b43859 100755 --- a/code/main.py +++ b/code/main.py @@ -11,6 +11,7 @@ import sha import simplejson import sys import time +import urllib from StringIO import StringIO def revertStandardError(): @@ -36,8 +37,10 @@ sys.path.append('/home/ecprice/.local/lib/python2.5/site-packages') import templates from Cheetah.Template import Template -from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess +import sipb_xen_database +from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess, Type, Autoinstall import validation +import cache_acls from webcommon import InvalidInput, CodeError, g import controls @@ -56,12 +59,15 @@ class Checkpoint: checkpoint = Checkpoint() +def jquote(string): + return "'" + string.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n') + "'" def helppopup(subj): """Return HTML code for a (?) link to a specified help topic""" - return ('(?)') + return ('(?)') def makeErrorPre(old, addition): if addition is None: @@ -71,6 +77,7 @@ def makeErrorPre(old, addition): else: return '

STDERR:

' + str(addition) + '
' +Template.sipb_xen_database = sipb_xen_database Template.helppopup = staticmethod(helppopup) Template.err = None @@ -96,9 +103,10 @@ class Defaults: memory = 256 disk = 4.0 cdrom = '' + autoinstall = '' name = '' - vmtype = 'hvm' def __init__(self, max_memory=None, max_disk=None, **kws): + self.type = Type.get('linux-hvm') if max_memory is not None: self.memory = min(self.memory, max_memory) if max_disk is not None: @@ -219,8 +227,7 @@ def getListDict(user): defaults=defaults, machines=machines, has_vnc=has_vnc, - uptimes=g.uptimes, - cdroms=CDROM.select()) + uptimes=g.uptimes) return d def listVms(user, fields): @@ -379,6 +386,10 @@ def modifyDict(user, fields): memory = validation.validMemory(user, memory, machine, on=False) machine.memory = memory + vm_type = validation.validVmType(fields.getfirst('vmtype')) + if vm_type is not None: + machine.type = vm_type + disksize = validation.testDisk(user, fields.getfirst('disk')) if disksize is not None: disksize = validation.validDisk(user, disksize, machine) @@ -388,16 +399,21 @@ def modifyDict(user, fields): disk.size = disksize ctx.current.save(disk) - if owner is not None: + update_acl = False + if owner is not None and owner != machine.owner: machine.owner = owner + update_acl = True if name is not None: machine.name = name - if admin is not None: + if admin is not None and admin != machine.administrator: machine.administrator = admin + update_acl = True if contact is not None: machine.contact = contact ctx.current.save(machine) + if update_acl: + cache_acls.refreshMachine(machine) transaction.commit() except: transaction.rollback() @@ -560,12 +576,11 @@ def infoDict(user, machine): checkpoint.checkpoint('Got mem') max_disk = validation.maxDisk(user, machine) defaults = Defaults() - for name in 'machine_id name administrator owner memory contact'.split(): + for name in 'machine_id name administrator owner memory contact type'.split(): setattr(defaults, name, getattr(machine, name)) defaults.disk = "%0.2f" % (machine.disks[0].size/1024.) checkpoint.checkpoint('Got defaults') d = dict(user=user, - cdroms=CDROM.select(), on=status is not None, machine=machine, defaults=defaults,