Browse Source

Combined mgmt and non-mgmt interfaces into same list on device and device type views

Jeremy Stretch 7 years ago
parent
commit
789ac5dfd4

+ 2 - 1
netbox/dcim/tables.py

@@ -368,10 +368,11 @@ class PowerOutletTemplateTable(BaseTable):
 
 class InterfaceTemplateTable(BaseTable):
     pk = ToggleColumn()
+    mgmt_only = tables.TemplateColumn("{% if value %}OOB Management{% endif %}")
 
     class Meta(BaseTable.Meta):
         model = InterfaceTemplate
-        fields = ('pk', 'name', 'form_factor')
+        fields = ('pk', 'name', 'mgmt_only', 'form_factor')
         empty_text = "None"
         show_header = False
 

+ 7 - 19
netbox/dcim/views.py

@@ -573,15 +573,10 @@ class DeviceTypeView(View):
         poweroutlet_table = tables.PowerOutletTemplateTable(
             natsorted(PowerOutletTemplate.objects.filter(device_type=devicetype), key=attrgetter('name'))
         )
-        mgmt_interface_table = tables.InterfaceTemplateTable(
-            list(InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(
-                device_type=devicetype, mgmt_only=True
-            ))
-        )
         interface_table = tables.InterfaceTemplateTable(
-            list(InterfaceTemplate.objects.order_naturally(devicetype.interface_ordering).filter(
-                device_type=devicetype, mgmt_only=False
-            ))
+            list(InterfaceTemplate.objects.order_naturally(
+                devicetype.interface_ordering
+            ).filter(device_type=devicetype))
         )
         devicebay_table = tables.DeviceBayTemplateTable(
             natsorted(DeviceBayTemplate.objects.filter(device_type=devicetype), key=attrgetter('name'))
@@ -591,7 +586,6 @@ class DeviceTypeView(View):
             consoleserverport_table.base_columns['pk'].visible = True
             powerport_table.base_columns['pk'].visible = True
             poweroutlet_table.base_columns['pk'].visible = True
-            mgmt_interface_table.base_columns['pk'].visible = True
             interface_table.base_columns['pk'].visible = True
             devicebay_table.base_columns['pk'].visible = True
 
@@ -601,7 +595,6 @@ class DeviceTypeView(View):
             'consoleserverport_table': consoleserverport_table,
             'powerport_table': powerport_table,
             'poweroutlet_table': poweroutlet_table,
-            'mgmt_interface_table': mgmt_interface_table,
             'interface_table': interface_table,
             'devicebay_table': devicebay_table,
         })
@@ -835,14 +828,10 @@ class DeviceView(View):
         power_outlets = natsorted(
             PowerOutlet.objects.filter(device=device).select_related('connected_port'), key=attrgetter('name')
         )
-        interfaces = Interface.objects.order_naturally(device.device_type.interface_ordering).filter(
-            device=device, mgmt_only=False
-        ).select_related(
-            'connected_as_a__interface_b__device', 'connected_as_b__interface_a__device',
-            'circuit_termination__circuit'
-        ).prefetch_related('ip_addresses')
-        mgmt_interfaces = Interface.objects.order_naturally(device.device_type.interface_ordering).filter(
-            device=device, mgmt_only=True
+        interfaces = Interface.objects.order_naturally(
+            device.device_type.interface_ordering
+        ).filter(
+            device=device
         ).select_related(
             'connected_as_a__interface_b__device', 'connected_as_b__interface_a__device',
             'circuit_termination__circuit'
@@ -873,7 +862,6 @@ class DeviceView(View):
             'power_ports': power_ports,
             'power_outlets': power_outlets,
             'interfaces': interfaces,
-            'mgmt_interfaces': mgmt_interfaces,
             'device_bays': device_bays,
             'services': services,
             'secrets': secrets,

+ 3 - 22
netbox/templates/dcim/device.html

@@ -7,7 +7,7 @@
 {% block content %}
 {% include 'dcim/inc/device_header.html' with active_tab='info' %}
 <div class="row">
-	<div class="col-md-5 col-lg-6">
+	<div class="col-md-5">
         <div class="panel panel-default">
             <div class="panel-heading">
                 <strong>Device</strong>
@@ -214,23 +214,9 @@
         </div>
         <div class="panel panel-default">
             <div class="panel-heading">
-                <strong>Critical Connections</strong>
+                <strong>Console / Power</strong>
             </div>
             <table class="table table-hover panel-body component-list">
-                {% for iface in mgmt_interfaces %}
-                    {% include 'dcim/inc/interface.html' with icon='wrench' %}
-                {% empty %}
-                    {% if device.device_type.interface_templates.exists %}
-                        <tr>
-                            <td colspan="6" class="alert-warning">
-                                <i class="fa fa-fw fa-warning"></i> No management interfaces defined
-                                {% if perms.dcim.add_interface %}
-                                    <a href="{% url 'dcim:interface_add' pk=device.pk %}?mgmt_only=1" class="btn btn-primary btn-xs pull-right"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></a>
-                                {% endif %}
-                            </td>
-                        </tr>
-                    {% endif %}
-                {% endfor %}
                 {% for cp in console_ports %}
                     {% include 'dcim/inc/consoleport.html' %}
                 {% empty %}
@@ -262,11 +248,6 @@
             </table>
             {% if perms.dcim.add_interface or perms.dcim.add_consoleport or perms.dcim.add_powerport %}
                 <div class="panel-footer text-right">
-                    {% if perms.dcim.add_interface %}
-                        <a href="{% url 'dcim:interface_add' pk=device.pk %}?mgmt_only=1" class="btn btn-xs btn-primary">
-                            <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add interface
-                        </a>
-                    {% endif %}
                     {% if perms.dcim.add_consoleport %}
                         <a href="{% url 'dcim:consoleport_add' pk=device.pk %}" class="btn btn-xs btn-primary">
                             <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add console port
@@ -333,7 +314,7 @@
             {% endif %}
         </div>
 	</div>
-	<div class="col-md-7 col-lg-6">
+	<div class="col-md-7">
         {% if device_bays or device.device_type.is_parent_device %}
             {% if perms.dcim.delete_devicebay %}
                 <form method="post" action="{% url 'dcim:devicebay_bulk_delete' pk=device.pk %}">

+ 7 - 8
netbox/templates/dcim/devicetype.html

@@ -33,7 +33,7 @@
 
 <h1>{{ devicetype.manufacturer }} {{ devicetype.model }}</h1>
 <div class="row">
-    <div class="col-md-6">
+    <div class="col-md-5">
         <div class="panel panel-default">
             <div class="panel-heading">
                 <strong>Chassis</strong>
@@ -163,21 +163,20 @@
                 {% endif %}
             </div>
         </div>
+    </div>
+    <div class="col-md-7">
         {% include 'dcim/inc/devicetype_component_table.html' with table=consoleport_table title='Console Ports' add_url='dcim:devicetype_add_consoleport' delete_url='dcim:devicetype_delete_consoleport' %}
         {% include 'dcim/inc/devicetype_component_table.html' with table=powerport_table title='Power Ports' add_url='dcim:devicetype_add_powerport' delete_url='dcim:devicetype_delete_powerport' %}
-        {% include 'dcim/inc/devicetype_component_table.html' with table=mgmt_interface_table title='Management Interfaces' add_url='dcim:devicetype_add_interface' add_url_extra='?mgmt_only=1' edit_url='dcim:devicetype_bulkedit_interface' delete_url='dcim:devicetype_delete_interface' %}
-    </div>
-    <div class="col-md-6">
-        {% if devicetype.is_parent_device %}
+        {% if devicetype.is_parent_device or devicebay_table.rows %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=devicebay_table title='Device Bays' add_url='dcim:devicetype_add_devicebay' delete_url='dcim:devicetype_delete_devicebay' %}
         {% endif %}
-        {% if devicetype.is_network_device %}
+        {% if devicetype.is_network_device or interface_table.rows %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' add_url='dcim:devicetype_add_interface' edit_url='dcim:devicetype_bulkedit_interface' delete_url='dcim:devicetype_delete_interface' %}
         {% endif %}
-        {% if devicetype.is_console_server %}
+        {% if devicetype.is_console_server or consoleserverport_table.rows %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=consoleserverport_table title='Console Server Ports' add_url='dcim:devicetype_add_consoleserverport' delete_url='dcim:devicetype_delete_consoleserverport' %}
         {% endif %}
-        {% if devicetype.is_pdu %}
+        {% if devicetype.is_pdu or poweroutlet_table.rows %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=poweroutlet_table title='Power Outlets' add_url='dcim:devicetype_add_poweroutlet' delete_url='dcim:devicetype_delete_poweroutlet' %}
         {% endif %}
     </div>

+ 1 - 7
netbox/templates/dcim/inc/consoleport.html

@@ -1,13 +1,7 @@
 <tr class="consoleport{% if cp.cs_port and not cp.connection_status %} info{% endif %}">
-    {% if selectable and perms.dcim.change_consoleport or perms.dcim.delete_consoleport %}
-        <td class="pk">
-            <input name="pk" type="checkbox" value="{{ cp.pk }}" />
-        </td>
-    {% endif %}
     <td>
         <i class="fa fa-fw fa-keyboard-o"></i> {{ cp.name }}
     </td>
-    <td></td>
     {% if cp.cs_port %}
         <td>
             <a href="{% url 'dcim:device' pk=cp.cs_port.device.pk %}">{{ cp.cs_port.device }}</a>
@@ -20,7 +14,7 @@
             <span class="text-muted">Not connected</span>
         </td>
     {% endif %}
-    <td colspan="2" class="text-right">
+    <td class="text-right">
         {% if perms.dcim.change_consoleport %}
             {% if cp.cs_port %}
                 {% if cp.connection_status %}

+ 2 - 1
netbox/templates/dcim/inc/interface.html

@@ -5,7 +5,8 @@
         </td>
     {% endif %}
     <td>
-        <i class="fa fa-fw fa-{{ icon|default:"exchange" }}"></i> <span title="{{ iface.get_form_factor_display }}">{{ iface.name }}</span>
+        <i class="fa fa-fw fa-{% if iface.mgmt_only %}wrench{% else %}exchange{% endif %}"></i>
+        <span title="{{ iface.get_form_factor_display }}">{{ iface.name }}</span>
         {% if iface.lag %}
             <span class="label label-primary">{{ iface.lag.name }}</span>
         {% endif %}

+ 1 - 7
netbox/templates/dcim/inc/powerport.html

@@ -1,13 +1,7 @@
 <tr class="powerport{% if pp.power_outlet and not pp.connection_status %} info{% endif %}">
-    {% if selectable and perms.dcim.change_powerport or perms.dcim.delete_powerport %}
-        <td class="pk">
-            <input name="pk" type="checkbox" value="{{ pp.pk }}" />
-        </td>
-    {% endif %}
     <td>
         <i class="fa fa-fw fa-bolt"></i> {{ pp.name }}
     </td>
-    <td></td>
     {% if pp.power_outlet %}
         <td>
             <a href="{% url 'dcim:device' pk=pp.power_outlet.device.pk %}">{{ pp.power_outlet.device }}</a>
@@ -20,7 +14,7 @@
             <span class="text-muted">Not connected</span>
         </td>
     {% endif %}
-    <td colspan="2" class="text-right">
+    <td class="text-right">
         {% if perms.dcim.change_powerport %}
             {% if pp.power_outlet %}
                 {% if pp.connection_status %}