X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/c540be1b6b42026b142e3675e008298f7ff672ce..754c1c8b18cf49c42cb4eb704642466d2d1f4279:/code/main.py diff --git a/code/main.py b/code/main.py index b05906e..f754ca0 100755 --- a/code/main.py +++ b/code/main.py @@ -51,13 +51,7 @@ class InvirtUnauthWeb(View): @cherrypy.expose @cherrypy.tools.mako(filename="/unauth.mako") def index(self): - if(os.path.exists("/etc/invirt/message")): - f = open('/etc/invirt/message') - message = f.read() - else:message = None - d = dict(simple = True, serviceMessage = message) - return d - + return dict(simple=True) class InvirtWeb(View): def __init__(self): @@ -103,6 +97,9 @@ class InvirtWeb(View): return d def __getattr__(self, name): + # At the point __getattr__ is called, tools haven't been run. Make sure the user is logged in. + cherrypy.tools.remote_user_login.callable() + if name in ("admin", "overlord"): if not cherrypy.request.login in getAfsGroupMembers(config.adminacl, config.authz.afs.cells[0].cell): raise InvalidInput('username', cherrypy.request.login, @@ -462,7 +459,8 @@ def getListDict(username, state): defaults=defaults, machines=machines, has_vnc=has_vnc, - installing=installing) + installing=installing, + disable_creation=True) return d def getHostname(nic): @@ -526,9 +524,9 @@ def modifyDict(username, state, machine_id, fields): olddisk = {} session.begin() try: - kws = dict([(kw, fields[kw]) for kw in + kws = dict((kw, fields[kw]) for kw in 'owner admin contact name description memory vmtype disksize'.split() - if fields[kw]]) + if fields.get(kw)) kws['machine_id'] = machine_id validate = validation.Validate(username, state, **kws) machine = validate.machine @@ -540,6 +538,26 @@ def modifyDict(username, state, machine_id, fields): if hasattr(validate, 'vmtype'): machine.type = validate.vmtype + update_acl = False + if hasattr(validate, 'owner') and validate.owner != machine.owner: + machine.owner = validate.owner + update_acl = True + if hasattr(validate, 'description'): + machine.description = validate.description + if hasattr(validate, 'admin') and validate.admin != machine.administrator: + machine.administrator = validate.admin + update_acl = True + if hasattr(validate, 'contact'): + machine.contact = validate.contact + + session.save_or_update(machine) + session.commit() + except: + session.rollback() + raise + + session.begin() + try: if hasattr(validate, 'disksize'): disksize = validate.disksize disk = machine.disks[0] @@ -547,35 +565,32 @@ def modifyDict(username, state, machine_id, fields): olddisk[disk.guest_device_name] = disksize disk.size = disksize session.save_or_update(disk) + for diskname in olddisk: + controls.resizeDisk(oldname, diskname, str(olddisk[diskname])) + session.save_or_update(machine) + session.commit() + except: + session.rollback() + raise - update_acl = False - if hasattr(validate, 'owner') and validate.owner != machine.owner: - machine.owner = validate.owner - update_acl = True + session.begin() + try: if hasattr(validate, 'name'): machine.name = validate.name for n in machine.nics: if n.hostname == oldname: n.hostname = validate.name - if hasattr(validate, 'description'): - machine.description = validate.description - if hasattr(validate, 'admin') and validate.admin != machine.administrator: - machine.administrator = validate.admin - update_acl = True - if hasattr(validate, 'contact'): - machine.contact = validate.contact - + if hasattr(validate, 'name'): + controls.renameMachine(machine, oldname, validate.name) session.save_or_update(machine) - if update_acl: - cache_acls.refreshMachine(machine) session.commit() except: session.rollback() raise - for diskname in olddisk: - controls.resizeDisk(oldname, diskname, str(olddisk[diskname])) - if hasattr(validate, 'name'): - controls.renameMachine(machine, oldname, validate.name) + + if update_acl: + cache_acls.refreshMachine(machine) + return dict(machine=machine) def infoDict(username, state, machine):