@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
@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
result = str(err)
else:
result = 'Success!'
+ if 'result' in d:
+ result = d['result']
if not back:
return d
if back == 'list':
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.')
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:
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:
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,