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,
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
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]
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):