From c417e31f20190cfeea810cd52e241255c3e33c30 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 8 Dec 2016 12:35:18 -0500 Subject: [PATCH 01/52] Post-release version bump --- netbox/netbox/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index f4b0ccc2c..685ceb2c9 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -12,7 +12,7 @@ except ImportError: "the documentation.") -VERSION = '1.7.3' +VERSION = '1.7.4-dev' # Import local configuration for setting in ['ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY']: From 37f6ccd861569236c31fc8eaca8d5e9359995cc7 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 9 Dec 2016 11:43:50 -0500 Subject: [PATCH 02/52] #49: Allow selection of devices at other sites when connecting an interface --- netbox/dcim/forms.py | 17 +++++++++++++---- netbox/dcim/views.py | 4 +++- netbox/templates/dcim/inc/_interface.html | 2 +- .../dcim/interfaceconnection_edit.html | 11 +++++++++-- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 961d22440..f5cec6474 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1045,8 +1045,11 @@ class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm): class InterfaceConnectionForm(forms.ModelForm, BootstrapMixin): interface_a = forms.ChoiceField(choices=[], widget=SelectWithDisabled, label='Interface') + site_b = forms.ModelChoiceField(queryset=Site.objects.all(), label='Site', required=False, + widget=forms.Select(attrs={'filter-for': 'rack_b'})) rack_b = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False, - widget=forms.Select(attrs={'filter-for': 'device_b'})) + widget=APISelect(api_url='/api/dcim/racks/?site_id={{site_b}}', + attrs={'filter-for': 'device_b'})) device_b = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False, widget=APISelect(api_url='/api/dcim/devices/?rack_id={{rack_b}}', display_field='display_name', @@ -1060,14 +1063,12 @@ class InterfaceConnectionForm(forms.ModelForm, BootstrapMixin): class Meta: model = InterfaceConnection - fields = ['interface_a', 'rack_b', 'device_b', 'interface_b', 'livesearch', 'connection_status'] + fields = ['interface_a', 'site_b', 'rack_b', 'device_b', 'interface_b', 'livesearch', 'connection_status'] def __init__(self, device_a, *args, **kwargs): super(InterfaceConnectionForm, self).__init__(*args, **kwargs) - self.fields['rack_b'].queryset = Rack.objects.filter(site=device_a.rack.site) - # Initialize interface A choices device_a_interfaces = Interface.objects.filter(device=device_a).exclude(form_factor=IFACE_FF_VIRTUAL) \ .select_related('circuit', 'connected_as_a', 'connected_as_b') @@ -1075,6 +1076,14 @@ class InterfaceConnectionForm(forms.ModelForm, BootstrapMixin): (iface.id, {'label': iface.name, 'disabled': iface.is_connected}) for iface in device_a_interfaces ] + # Initialize rack_b choices if site_b is set + if self.is_bound and self.data.get('site_b'): + self.fields['rack_b'].queryset = Rack.objects.filter(site__pk=self.data['site_b']) + elif self.initial.get('site_b'): + self.fields['rack_b'].queryset = Rack.objects.filter(site=self.initial['site_b']) + else: + self.fields['rack_b'].choices = [] + # Initialize device_b choices if rack_b is set if self.is_bound and self.data.get('rack_b'): self.fields['device_b'].queryset = Device.objects.filter(rack__pk=self.data['rack_b']) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d7fc2a88b..21a44c6b4 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1467,9 +1467,11 @@ def interfaceconnection_add(request, pk): else: form = forms.InterfaceConnectionForm(device, initial={ - 'interface_a': request.GET.get('interface', None), + 'interface_a': request.GET.get('interface_a', None), + 'site_b': request.GET.get('site_b', device.rack.site), 'rack_b': request.GET.get('rack_b', None), 'device_b': request.GET.get('device_b', None), + 'interface_b': request.GET.get('interface_b', None), }) return render(request, 'dcim/interfaceconnection_edit.html', { diff --git a/netbox/templates/dcim/inc/_interface.html b/netbox/templates/dcim/inc/_interface.html index a48200c30..4ecede5b0 100644 --- a/netbox/templates/dcim/inc/_interface.html +++ b/netbox/templates/dcim/inc/_interface.html @@ -61,7 +61,7 @@ {% else %} - + {% endif %} diff --git a/netbox/templates/dcim/interfaceconnection_edit.html b/netbox/templates/dcim/interfaceconnection_edit.html index e477ba26d..5da19d4fa 100644 --- a/netbox/templates/dcim/interfaceconnection_edit.html +++ b/netbox/templates/dcim/interfaceconnection_edit.html @@ -27,6 +27,12 @@ A Side
+
+ +
+

{{ device.rack.site }}

+
+
@@ -61,6 +67,7 @@ {% render_field form.livesearch %}
+ {% render_field form.site_b %} {% render_field form.rack_b %} {% render_field form.device_b %}
@@ -77,8 +84,8 @@
- - + + Cancel
From 69dd8cd3c3adb96541bfe7a4f439a0c909cebd02 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 9 Dec 2016 16:23:11 -0500 Subject: [PATCH 03/52] Widened page layout; improved mobile rendering --- netbox/project-static/css/base.css | 11 ++- netbox/templates/circuits/circuit.html | 6 +- netbox/templates/circuits/provider.html | 6 +- netbox/templates/dcim/device.html | 5 +- netbox/templates/dcim/inc/_device_header.html | 5 +- netbox/templates/dcim/rack.html | 6 +- netbox/templates/dcim/site.html | 6 +- netbox/templates/home.html | 14 +-- netbox/templates/ipam/aggregate.html | 6 +- netbox/templates/ipam/inc/prefix_header.html | 5 +- netbox/templates/ipam/ipaddress.html | 6 +- netbox/templates/ipam/prefix.html | 1 - netbox/templates/ipam/vlan.html | 6 +- netbox/templates/ipam/vrf.html | 6 +- netbox/templates/paginator.html | 10 +- netbox/templates/secrets/secret.html | 2 +- netbox/templates/tenancy/tenant.html | 6 +- netbox/templates/users/_user.html | 22 +++++ netbox/templates/users/change_password.html | 58 ++++------- netbox/templates/users/inc/profile_nav.html | 6 -- netbox/templates/users/profile.html | 40 +++----- netbox/templates/users/recent_activity.html | 45 ++++----- netbox/templates/users/userkey.html | 71 ++++++-------- netbox/templates/users/userkey_edit.html | 95 ++++++++----------- netbox/templates/utilities/obj_table.html | 1 + netbox/users/views.py | 7 +- 26 files changed, 205 insertions(+), 247 deletions(-) create mode 100644 netbox/templates/users/_user.html delete mode 100644 netbox/templates/users/inc/profile_nav.html diff --git a/netbox/project-static/css/base.css b/netbox/project-static/css/base.css index ff9eb98c1..8503f465e 100644 --- a/netbox/project-static/css/base.css +++ b/netbox/project-static/css/base.css @@ -13,7 +13,7 @@ body { } .container { width: auto; - max-width: 1340px; + max-width: 1600px; } .wrapper { min-height: 100%; @@ -35,7 +35,8 @@ footer p { margin: 20px 0; } -@media (max-width: 1200px) { +/* Collapse the nav menu on displays less than 1200px wide */ +@media (max-width: 1199px) { .navbar-header { float: none; } @@ -58,7 +59,7 @@ footer p { max-height: none; } .navbar-nav { - float: none!important; + float: none !important; margin-top: 7.5px; } .navbar-nav>li { @@ -90,8 +91,12 @@ tfoot td { } /* Paginator */ +div.paginator { + margin-bottom: 20px; +} nav ul.pagination { margin-top: 0; + margin-bottom: 8px !important; } /* Racks */ diff --git a/netbox/templates/circuits/circuit.html b/netbox/templates/circuits/circuit.html index 5b9f8381f..1c2df3680 100644 --- a/netbox/templates/circuits/circuit.html +++ b/netbox/templates/circuits/circuit.html @@ -5,14 +5,14 @@ {% block content %}
-
+
-
+
@@ -40,6 +40,7 @@ {% endif %}

{{ circuit.provider }} - {{ circuit.cid }}

+{% include 'inc/created_updated.html' with obj=circuit %}
@@ -107,7 +108,6 @@ {% with circuit.get_custom_fields as custom_fields %} {% include 'inc/custom_fields_panel.html' %} {% endwith %} - {% include 'inc/created_updated.html' with obj=circuit %}
diff --git a/netbox/templates/circuits/provider.html b/netbox/templates/circuits/provider.html index c59858626..d7f945ab2 100644 --- a/netbox/templates/circuits/provider.html +++ b/netbox/templates/circuits/provider.html @@ -6,13 +6,13 @@ {% block content %}
-
+
-
+
@@ -46,6 +46,7 @@ {% endif %}

{{ provider }}

+{% include 'inc/created_updated.html' with obj=provider %}
@@ -120,7 +121,6 @@ {% endif %}
- {% include 'inc/created_updated.html' with obj=provider %}
diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 785938970..f3158b98c 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -8,7 +8,7 @@ {% block content %} {% include 'dcim/inc/_device_header.html' with active_tab='info' %}
-
+
Device @@ -301,9 +301,8 @@
None found
{% endif %}
- {% include 'inc/created_updated.html' with obj=device %}
-
+
{% if device_bays or device.device_type.is_parent_device %} {% if perms.dcim.delete_devicebay %} diff --git a/netbox/templates/dcim/inc/_device_header.html b/netbox/templates/dcim/inc/_device_header.html index 7b0b69d61..74b453e1d 100644 --- a/netbox/templates/dcim/inc/_device_header.html +++ b/netbox/templates/dcim/inc/_device_header.html @@ -1,5 +1,5 @@
-
+
{% if device.rack %} {% endif %}
-
+
@@ -41,6 +41,7 @@ {% endif %}

{{ device }}

+{% include 'inc/created_updated.html' with obj=device %}