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)
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
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
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
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')