Change VM creation auth failure message
[invirt/packages/invirt-web.git] / code / main.py
index 5e37889..b4e659e 100755 (executable)
@@ -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.')
@@ -509,9 +526,9 @@ def getNicInfo(data_dict, machine):
                 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:
@@ -668,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:
@@ -690,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,