X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/019114e2aa0d96600a168cda53fc6f1365c57520..b9e068a6e15e1726faa7c688244642b2dfebff09:/code/main.py diff --git a/code/main.py b/code/main.py index 4237d18..b4e659e 100755 --- a/code/main.py +++ b/code/main.py @@ -279,12 +279,14 @@ console will suffer artifacts. @cherrypy.expose @cherrypy.tools.mako(filename="/info.mako") - def info(self, machine_id): + def info(self, machine_id, result=None): """Handler for info on a single VM.""" machine = validation.Validate(cherrypy.request.login, cherrypy.request.state, machine_id=machine_id).machine d = infoDict(cherrypy.request.login, cherrypy.request.state, machine) + if result: + d['result'] = result return d index = info @@ -318,7 +320,18 @@ console will suffer artifacts. @cherrypy.expose @cherrypy.tools.mako(filename="/vnc.mako") def vnc(self, machine_id): - """VNC applet page. + """VNC applet page""" + return self._vnc(machine_id) + + @cherrypy.expose + @cherrypy.tools.response_headers(headers=[('Content-Disposition', 'attachment; filename=vnc.jnlp')]) + @cherrypy.tools.mako(filename="/vnc_jnlp.mako", content_type="application/x-java-jnlp-file") + def vnc_jnlp(self, machine_id): + """VNC applet exposed as a Java Web Start app (JNLP file)""" + return self._vnc(machine_id) + + def _vnc(self, machine_id): + """VNC applet page functionality. Note that due to same-domain restrictions, the applet connects to the webserver, which needs to forward those requests to the xen @@ -377,6 +390,8 @@ console will suffer artifacts. result = str(err) else: result = 'Success!' + if 'result' in d: + result = d['result'] if not back: return d if back == 'list': @@ -384,8 +399,10 @@ console will suffer artifacts. raise cherrypy.InternalRedirect('/list?result=%s' % urllib.quote(result)) elif back == 'info': - raise cherrypy.HTTPRedirect(cherrypy.request.base - + '/machine/%d/' % machine_id, + url = cherrypy.request.base + '/machine/%d/' % machine_id + if result: + url += '?result='+urllib.quote(result) + raise cherrypy.HTTPRedirect(url, status=303) else: raise InvalidInput('back', back, 'Not a known back page.') @@ -497,19 +514,21 @@ def getNicInfo(data_dict, machine): data_dict['nic%s_hostname' % i] = getHostname(machine.nics[i]) data_dict['nic%s_mac' % i] = machine.nics[i].mac_addr data_dict['nic%s_ip' % i] = machine.nics[i].ip - data_dict['nic%s_netmask' % i] = machine.nics[i].ip + data_dict['nic%s_netmask' % i] = machine.nics[i].netmask data_dict['nic%s_gateway' % i] = machine.nics[i].gateway if machine.nics[i].other_ip: - nic_fields.append(('nic%s_other' % i, 'NIC %s Other Address')) + nic_fields.append(('nic%s_other' % i, 'NIC %s Other Address' % i)) other = '%s/%s via %s' % (machine.nics[i].other_ip, machine.nics[i].other_netmask, machine.nics[i].other_gateway) other_action = machine.nics[i].other_action if other_action == 'dnat': other += " (NAT to primary IP)" elif other_action == 'renumber': - other += " (cold boot to swap)" + other += " (cold boot or renew DHCP lease to swap)" + elif other_action == 'renumber_dhcp': + other += " (renew DHCP lease to swap)" + elif other_action == 'remove': + other += " (will be removed at next cold boot or DHCP lease renewal)" else: - # No message for renumber_dhcp since we don't know if - # they're using DHCP. other += " (pending assignment)" data_dict['nic%s_other' % i] = other if len(machine.nics) == 1: @@ -666,6 +685,11 @@ def infoDict(username, state, machine): display_fields = (display_fields[:disk_point] + disk_fields + display_fields[disk_point+1:]) + renumber = False + for n in machine.nics: + if n.other_action == 'renumber_dhcp': + renumber = True + main_status['memory'] += ' MiB' for field, disp in display_fields: if field in ('uptime', 'cputime') and locals()[field] is not None: @@ -688,6 +712,7 @@ def infoDict(username, state, machine): defaults.disk = "%0.2f" % (machine.disks[0].size/1024.) d = dict(user=username, on=status is not None, + renumber=renumber, machine=machine, defaults=defaults, has_vnc=has_vnc,