X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/deb49f12aad253039d9b8907dde04b89321f5e49..f2e4fff07679542f506e2ac3f92a13a663e2cef5:/code/main.py?ds=sidebyside diff --git a/code/main.py b/code/main.py index 7044167..b443640 100755 --- a/code/main.py +++ b/code/main.py @@ -97,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, @@ -168,8 +171,6 @@ wiki, including steps to prepare an HVM guest to boot as a ParaVM

We recommend using a ParaVM when possible and an HVM when necessary. """, - 'CPU Weight': """ -Don't ask us! We're as mystified as you are.""", 'Owner': """ The owner field is used to determine quotas. It must be the name of a @@ -193,6 +194,7 @@ your machine will run just fine, but the applet's display of the console will suffer artifacts. """, 'Windows': """ +Windows 7: The Windows 7 image is licensed for all MIT students and will automatically activate off the network; see the licensing agreement for details. The installer requires 512 MiB RAM and at least 15 GiB disk space (20 GiB or more recommended).
Windows Vista: The Vista image is licensed for all MIT students and will automatically activate off the network; see the licensing confirmation e-mail for details. The installer requires 512 MiB RAM and at least 7.5 GiB disk space (15 GiB or more recommended).
Windows XP: This is the volume license CD image. You will need your own volume license key to complete the install. We do not have these available for the general MIT community; ask your department if they have one, or visit http://msca.mit.edu/ if you are staff/faculty to request one. """ @@ -284,7 +286,7 @@ console will suffer artifacts. machine_id=machine_id).machine d = infoDict(cherrypy.request.login, cherrypy.request.state, machine) return d - index = info + index = list @cherrypy.expose @cherrypy.tools.mako(filename="/info.mako") @@ -456,7 +458,8 @@ def getListDict(username, state): defaults=defaults, machines=machines, has_vnc=has_vnc, - installing=installing) + installing=installing, + disable_creation=False) return d def getHostname(nic): @@ -534,6 +537,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] @@ -541,35 +564,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): @@ -584,8 +604,12 @@ def infoDict(username, state, machine): else: main_status = dict(status[1:]) main_status['host'] = controls.listHost(machine) - start_time = float(main_status.get('start_time', 0)) - uptime = datetime.timedelta(seconds=int(time.time()-start_time)) + start_time = main_status.get('start_time') + if start_time is None: + uptime = "Still booting?" + else: + start_time = float(start_time) + uptime = datetime.timedelta(seconds=int(time.time()-start_time)) cpu_time_float = float(main_status.get('cpu_time', 0)) cputime = datetime.timedelta(seconds=int(cpu_time_float)) display_fields = [('name', 'Name'),