Add button to trigger renumbering
[invirt/packages/invirt-web.git] / code / main.py
index b712696..0f77cee 100755 (executable)
@@ -488,6 +488,8 @@ def getNicInfo(data_dict, machine):
     nic_fields_template = [('nic%s_hostname', 'NIC %s Hostname'),
                            ('nic%s_mac', 'NIC %s MAC Addr'),
                            ('nic%s_ip', 'NIC %s IP'),
+                           ('nic%s_netmask', 'NIC %s Netmask'),
+                           ('nic%s_gateway', 'NIC %s Gateway'),
                            ]
     nic_fields = []
     for i in range(len(machine.nics)):
@@ -495,6 +497,23 @@ 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].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' % 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 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:
+                other += " (pending assignment)"
+            data_dict['nic%s_other' % i] = other
     if len(machine.nics) == 1:
         nic_fields = [(x, y.replace('NIC 0 ', '')) for x, y in nic_fields]
     return nic_fields
@@ -594,7 +613,11 @@ def modifyDict(username, state, machine_id, fields):
 
 def infoDict(username, state, machine):
     """Get the variables used by info.tmpl."""
-    status = controls.statusInfo(machine)
+    try:
+        status = controls.statusInfo(machine)
+    except CodeError, e:
+        # machine was shut down in between the call to listInfoDict and this
+        status = None
     has_vnc = hasVnc(status)
     if status is None:
         main_status = dict(name=machine.name,
@@ -645,6 +668,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 in ('renumber', '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:
@@ -667,6 +695,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,