X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/5703172a60592ef5c8adb22cfb28034d5cc04e32..dd0fb836097b7f9cc92f8d78c45f1bf2b59c3c1e:/code/main.py?ds=inline diff --git a/code/main.py b/code/main.py index c791e82..3be15a6 100755 --- a/code/main.py +++ b/code/main.py @@ -86,7 +86,7 @@ class InvirtWeb(View): def __getattr__(self, name): if name in ("admin", "overlord"): - if not cherrypy.request.login in getAfsGroupMembers(config.adminacl, config.authz[0].cell): + if not cherrypy.request.login in getAfsGroupMembers(config.adminacl, config.authz.afs.cells[0].cell): raise InvalidInput('username', cherrypy.request.login, 'Not in admin group %s.' % config.adminacl) cherrypy.request.state = State(cherrypy.request.login, isadmin=True) @@ -230,7 +230,7 @@ console will suffer artifacts. d['err'] = err if err: for field, value in fields.items(): - setattr(d['defaults'], field, value)) + setattr(d['defaults'], field, value) else: d['new_machine'] = parsed_fields['name'] return d @@ -248,11 +248,17 @@ console will suffer artifacts. raise RuntimeError("test of the emergency broadcast system") class MachineView(View): - # This is hairy. Fix when CherryPy 3.2 is out. (rename to - # _cp_dispatch, and parse the argument as a list instead of - # string - def __getattr__(self, name): + """Synthesize attributes to allow RESTful URLs like + /machine/13/info. This is hairy. CherryPy 3.2 adds a + method called _cp_dispatch that allows you to explicitly + handle URLs that can't be mapped, and it allows you to + rewrite the path components and continue processing. + + This function gets the next path component being resolved + as a string. _cp_dispatch will get an array of strings + representing any subsequent path components as well.""" + try: cherrypy.request.params['machine_id'] = int(name) return self @@ -347,12 +353,12 @@ console will suffer artifacts. def command(self, command_name, machine_id, **kwargs): """Handler for running commands like boot and delete on a VM.""" back = kwargs.get('back') + if command_name == 'delete': + back = 'list' try: d = controls.commandResult(cherrypy.request.login, cherrypy.request.state, command_name, machine_id, kwargs) - if d['command'] == 'Delete VM': - back = 'list' except InvalidInput, err: if not back: raise @@ -436,16 +442,13 @@ def getListDict(username, state): m.uptime = None else: m.uptime = xmlist[m]['uptime'] + installing[m] = bool(xmlist[m].get('autoinstall')) if xmlist[m]['console']: has_vnc[m] = True elif m.type.hvm: has_vnc[m] = "WTF?" else: has_vnc[m] = "ParaVM" - if xmlist[m].get('autoinstall'): - installing[m] = True - else: - installing[m] = False max_memory = validation.maxMemory(username, state) max_disk = validation.maxDisk(username) checkpoint.checkpoint('Got max mem/disk')