diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 553830e5b..d87d1a4f4 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1298,6 +1298,24 @@ class ServicePortCreateForm(forms.ModelForm, BootstrapMixin): self.fields['ip_address'].queryset = IPAddress.objects.filter(interface__device=device) +class ServiceEditForm(forms.ModelForm, BootstrapMixin): + class Meta: + model = ServicePort + fields = ['ip_address', 'protocol', 'port', 'name', 'description'] + help_texts = { + 'port': '0-65535', + 'name': 'Service running on this port', + 'description': 'Service description' + } + labels = { + 'ip_address': "IP Address", + } + + def __init__(self, *args, **kwargs): + super(ServiceEditForm, self).__init__(*args, **kwargs) + self.fields['ip_address'].queryset = IPAddress.objects.filter(interface__device=kwargs['instance'].device) + + # # Modules # diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index 39ab88a90..0dea7afce 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -169,4 +169,9 @@ urlpatterns = [ url(r'^modules/(?P\d+)/edit/$', views.ModuleEditView.as_view(), name='module_edit'), url(r'^modules/(?P\d+)/delete/$', views.ModuleDeleteView.as_view(), name='module_delete'), + # ServicePorts + url(r'^service-ports/(?P\d+)/$', views.serviceport, name='serviceport'), + url(r'^service-ports/(?P\d+)/edit/$', views.ServicePortEditView.as_view(), name='serviceport_edit'), + url(r'^service-ports/(?P\d+)/delete/$', views.ServicePortDeleteView.as_view(), name='serviceport_delete'), + ] diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index aa049431b..dcd19be04 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1601,6 +1601,45 @@ def ipaddress_assign(request, pk): }) +# +# Service Ports +# + +def serviceport(request, pk): + service_port = get_object_or_404(ServicePort.objects.select_related('device'), pk=pk) + + return render(request, 'ipam/serviceport.html', { + 'service_port': service_port, + }) + + +class ServicePortEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_ipaddress' + model = ServicePort + form_class = forms.ServiceEditForm + fields_initial = ['ip_address', 'port' 'protocol', 'name', 'description'] + template_name = 'ipam/serviceport_edit.html' + + def post(self, request, *args, **kwargs): + service_port = self.get_object(kwargs) + device_url = reverse('dcim:device', kwargs={'pk': service_port.device.pk}) + self.success_url = device_url + self.cancel_url = device_url + + return super(ServicePortEditView, self).post(request, *args, **kwargs) + + +class ServicePortDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_ipaddress' + model = ServicePort + + def post(self, request, *args, **kwargs): + service_port = self.get_object(kwargs) + self.redirect_url = reverse('dcim:device', kwargs={'pk': service_port.device.pk}) + + return super(ServicePortDeleteView, self).post(request, *args, **kwargs) + + @permission_required('ipam.add_ipaddress') def serviceport_assign(request, pk): device = get_object_or_404(Device, pk=pk) @@ -1610,7 +1649,7 @@ def serviceport_assign(request, pk): if form.is_valid(): serv_form = forms.ServicePortForm({ 'device': device.pk, - 'ip_address': form.cleaned_data['ip_address'].pk, + 'ip_address': form.cleaned_data['ip_address'].pk if form.cleaned_data['ip_address'] else None, 'protocol': form.cleaned_data['protocol'], 'port': form.cleaned_data['port'], 'name': form.cleaned_data['name'], diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index c2dbda748..896064968 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -10,7 +10,7 @@ from utilities.forms import ( from .models import ( Aggregate, IPAddress, IPADDRESS_STATUS_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role, VLAN, VLANGroup, - VLAN_STATUS_CHOICES, VRF, ServicePort + VLAN_STATUS_CHOICES, VRF ) @@ -444,29 +444,6 @@ class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm): status = forms.MultipleChoiceField(choices=ipaddress_status_choices, required=False) -# -# Service Port -# - -class ServicePortForm(forms.ModelForm, BootstrapMixin): - class Meta: - model = ServicePort - fields = ['ip_address', 'protocol', 'port', 'name', 'description'] - help_texts = { - 'port': '0-65535', - 'name': 'Service running on this port', - 'description': 'Service description' - } - labels = { - 'ip_address': "IP Address", - } - - def __init__(self, *args, **kwargs): - super(ServicePortForm, self).__init__(*args, **kwargs) - # self.fields['device']. - self.fields['ip_address'].queryset = IPAddress.objects.filter(interface__device=kwargs['instance'].device) - - # # VLAN groups # diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index b0737ce8d..5fade85ad 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -478,7 +478,7 @@ class ServicePort(CreatedUpdatedModel): return u'{}/{}'.format(self.port, port_protocol) def get_absolute_url(self): - return reverse('ipam:serviceport', args=[self.pk]) + return reverse('dcim:serviceport', args=[self.pk]) @property def short_description(self): diff --git a/netbox/ipam/urls.py b/netbox/ipam/urls.py index 3490f75ba..dc5fcc964 100644 --- a/netbox/ipam/urls.py +++ b/netbox/ipam/urls.py @@ -60,11 +60,6 @@ urlpatterns = [ url(r'^ip-addresses/(?P\d+)/remove/$', views.ipaddress_remove, name='ipaddress_remove'), url(r'^ip-addresses/(?P\d+)/delete/$', views.IPAddressDeleteView.as_view(), name='ipaddress_delete'), - # Service Ports - url(r'^service-ports/(?P\d+)/$', views.serviceport, name='serviceport'), - url(r'^service-ports/(?P\d+)/edit/$', views.ServicePortEditView.as_view(), name='serviceport_edit'), - url(r'^service-ports/(?P\d+)/delete/$', views.ServicePortDeleteView.as_view(), name='serviceport_delete'), - # VLAN groups url(r'^vlan-groups/$', views.VLANGroupListView.as_view(), name='vlangroup_list'), url(r'^vlan-groups/add/$', views.VLANGroupEditView.as_view(), name='vlangroup_add'), diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 1571882cd..d28a10e86 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -645,46 +645,6 @@ class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): cls = IPAddress default_redirect_url = 'ipam:ipaddress_list' - -# -# Service Ports -# - -def serviceport(request, pk): - service_port = get_object_or_404(ServicePort.objects.select_related('device'), pk=pk) - - return render(request, 'ipam/serviceport.html', { - 'service_port': service_port, - }) - - -class ServicePortEditView(PermissionRequiredMixin, ObjectEditView): - permission_required = 'ipam.change_ipaddress' - model = ServicePort - form_class = forms.ServicePortForm - fields_initial = ['ip_address', 'port' 'protocol', 'name', 'description'] - template_name = 'ipam/serviceport_edit.html' - - def post(self, request, *args, **kwargs): - service_port = self.get_object(kwargs) - device_url = reverse('dcim:device', kwargs={'pk': service_port.device.pk}) - self.success_url = device_url - self.cancel_url = device_url - - return super(ServicePortEditView, self).post(request, *args, **kwargs) - - -class ServicePortDeleteView(PermissionRequiredMixin, ObjectDeleteView): - permission_required = 'ipam.delete_ipaddress' - model = ServicePort - - def post(self, request, *args, **kwargs): - service_port = self.get_object(kwargs) - self.redirect_url = reverse('dcim:device', kwargs={'pk': service_port.device.pk}) - - return super(ServicePortDeleteView, self).post(request, *args, **kwargs) - - # # VLAN groups # diff --git a/netbox/templates/dcim/inc/_port.html b/netbox/templates/dcim/inc/_port.html index e54720eaa..f0c6310d3 100644 --- a/netbox/templates/dcim/inc/_port.html +++ b/netbox/templates/dcim/inc/_port.html @@ -3,7 +3,7 @@ {{ port.ip_address }} - {{ port }} + {{ port }} {{ port.name }} @@ -16,12 +16,12 @@ {% if perms.ipam.change_ipaddress %} - + {% endif %} {% if perms.ipam.delete_ipaddress %} - + {% endif %} diff --git a/netbox/templates/dcim/serviceport_assign.html b/netbox/templates/dcim/serviceport_assign.html index 409c05022..bb7ff2ace 100644 --- a/netbox/templates/dcim/serviceport_assign.html +++ b/netbox/templates/dcim/serviceport_assign.html @@ -22,7 +22,7 @@
- +

{{ device }}

diff --git a/netbox/templates/ipam/serviceport.html b/netbox/templates/ipam/serviceport.html index 0ee5d2385..867165ec8 100644 --- a/netbox/templates/ipam/serviceport.html +++ b/netbox/templates/ipam/serviceport.html @@ -14,13 +14,13 @@
{% if perms.ipam.change_ipaddress %} - + Edit this Service Port {% endif %} {% if perms.ipam.delete_ipaddress %} - + Delete this Service Port