Просмотр исходного кода

Dropped 'Panel' from FrontPanelPort/RearPanelPort names

Jeremy Stretch 7 лет назад
Родитель
Сommit
b19e2037af

+ 32 - 32
netbox/dcim/api/serializers.py

@@ -6,9 +6,9 @@ from circuits.models import Circuit, CircuitTermination
 from dcim.constants import *
 from dcim.models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceType, DeviceRole, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
+    DeviceBayTemplate, DeviceType, DeviceRole, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
     Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 from extras.api.customfields import CustomFieldModelSerializer
 from ipam.models import IPAddress, VLAN
@@ -302,45 +302,45 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
 
 
 #
-# Rear panel port templates
+# Rear port templates
 #
 
-class RearPanelPortTemplateSerializer(ValidatedModelSerializer):
+class RearPortTemplateSerializer(ValidatedModelSerializer):
     device_type = NestedDeviceTypeSerializer()
-    type = ChoiceField(choices=PANELPORT_TYPE_CHOICES)
+    type = ChoiceField(choices=PORT_TYPE_CHOICES)
 
     class Meta:
-        model = RearPanelPortTemplate
+        model = RearPortTemplate
         fields = ['id', 'device_type', 'name', 'type', 'positions']
 
 
-class NestedRearPanelPortTemplateSerializer(WritableNestedSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearpanelporttemplate-detail')
+class NestedRearPortTemplateSerializer(WritableNestedSerializer):
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearporttemplate-detail')
 
     class Meta:
-        model = RearPanelPortTemplate
+        model = RearPortTemplate
         fields = ['id', 'url', 'name']
 
 
 #
-# Front panel port templates
+# Front port templates
 #
 
-class FrontPanelPortTemplateSerializer(ValidatedModelSerializer):
+class FrontPortTemplateSerializer(ValidatedModelSerializer):
     device_type = NestedDeviceTypeSerializer()
-    type = ChoiceField(choices=PANELPORT_TYPE_CHOICES)
-    rear_port = NestedRearPanelPortTemplateSerializer()
+    type = ChoiceField(choices=PORT_TYPE_CHOICES)
+    rear_port = NestedRearPortTemplateSerializer()
 
     class Meta:
-        model = FrontPanelPortTemplate
+        model = FrontPortTemplate
         fields = ['id', 'device_type', 'name', 'type', 'rear_port', 'rear_port_position']
 
 
-class NestedFrontPanelPortTemplateSerializer(WritableNestedSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontpanelporttemplate-detail')
+class NestedFrontPortTemplateSerializer(WritableNestedSerializer):
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontporttemplate-detail')
 
     class Meta:
-        model = FrontPanelPortTemplate
+        model = FrontPortTemplate
         fields = ['id', 'url', 'name']
 
 
@@ -703,47 +703,47 @@ class InterfaceSerializer(TaggitSerializer, IsConnectedMixin, ValidatedModelSeri
 
 
 #
-# Rear panel ports
+# Rear ports
 #
 
-class RearPanelPortSerializer(ValidatedModelSerializer):
+class RearPortSerializer(ValidatedModelSerializer):
     device = NestedDeviceSerializer()
-    type = ChoiceField(choices=PANELPORT_TYPE_CHOICES)
+    type = ChoiceField(choices=PORT_TYPE_CHOICES)
     tags = TagListSerializerField(required=False)
 
     class Meta:
-        model = RearPanelPort
+        model = RearPort
         fields = ['id', 'device', 'name', 'type', 'positions', 'tags']
 
 
-class NestedRearPanelPortSerializer(WritableNestedSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearpanelport-detail')
+class NestedRearPortSerializer(WritableNestedSerializer):
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
 
     class Meta:
-        model = RearPanelPort
+        model = RearPort
         fields = ['id', 'url', 'name']
 
 
 #
-# Front panel ports
+# Front ports
 #
 
-class FrontPanelPortSerializer(ValidatedModelSerializer):
+class FrontPortSerializer(ValidatedModelSerializer):
     device = NestedDeviceSerializer()
-    type = ChoiceField(choices=PANELPORT_TYPE_CHOICES)
-    rear_port = NestedRearPanelPortSerializer()
+    type = ChoiceField(choices=PORT_TYPE_CHOICES)
+    rear_port = NestedRearPortSerializer()
     tags = TagListSerializerField(required=False)
 
     class Meta:
-        model = FrontPanelPort
+        model = FrontPort
         fields = ['id', 'device', 'name', 'type', 'rear_port', 'rear_port_position', 'tags']
 
 
-class NestedFrontPanelPortSerializer(WritableNestedSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontpanelport-detail')
+class NestedFrontPortSerializer(WritableNestedSerializer):
+    url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
 
     class Meta:
-        model = FrontPanelPort
+        model = FrontPort
         fields = ['id', 'url', 'name']
 
 

+ 4 - 4
netbox/dcim/api/urls.py

@@ -37,8 +37,8 @@ router.register(r'console-server-port-templates', views.ConsoleServerPortTemplat
 router.register(r'power-port-templates', views.PowerPortTemplateViewSet)
 router.register(r'power-outlet-templates', views.PowerOutletTemplateViewSet)
 router.register(r'interface-templates', views.InterfaceTemplateViewSet)
-router.register(r'front-panel-port-templates', views.FrontPanelPortTemplateViewSet)
-router.register(r'rear-panel-port-templates', views.RearPanelPortTemplateViewSet)
+router.register(r'front-port-templates', views.FrontPortTemplateViewSet)
+router.register(r'rear-port-templates', views.RearPortTemplateViewSet)
 router.register(r'device-bay-templates', views.DeviceBayTemplateViewSet)
 
 # Devices
@@ -52,8 +52,8 @@ router.register(r'console-server-ports', views.ConsoleServerPortViewSet)
 router.register(r'power-ports', views.PowerPortViewSet)
 router.register(r'power-outlets', views.PowerOutletViewSet)
 router.register(r'interfaces', views.InterfaceViewSet)
-router.register(r'front-panel-ports', views.FrontPanelPortViewSet)
-router.register(r'rear-panel-ports', views.RearPanelPortViewSet)
+router.register(r'front-ports', views.FrontPortViewSet)
+router.register(r'rear-ports', views.RearPortViewSet)
 router.register(r'device-bays', views.DeviceBayViewSet)
 router.register(r'inventory-items', views.InventoryItemViewSet)
 

+ 18 - 18
netbox/dcim/api/views.py

@@ -15,9 +15,9 @@ from rest_framework.viewsets import GenericViewSet, ViewSet
 from dcim import filters
 from dcim.models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
     Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 from extras.api.serializers import RenderedGraphSerializer
 from extras.api.views import CustomFieldModelViewSet
@@ -191,16 +191,16 @@ class InterfaceTemplateViewSet(ModelViewSet):
     filter_class = filters.InterfaceTemplateFilter
 
 
-class FrontPanelPortTemplateViewSet(ModelViewSet):
-    queryset = FrontPanelPortTemplate.objects.select_related('device_type__manufacturer')
-    serializer_class = serializers.FrontPanelPortTemplateSerializer
-    filter_class = filters.FrontPanelPortTemplateFilter
+class FrontPortTemplateViewSet(ModelViewSet):
+    queryset = FrontPortTemplate.objects.select_related('device_type__manufacturer')
+    serializer_class = serializers.FrontPortTemplateSerializer
+    filter_class = filters.FrontPortTemplateFilter
 
 
-class RearPanelPortTemplateViewSet(ModelViewSet):
-    queryset = RearPanelPortTemplate.objects.select_related('device_type__manufacturer')
-    serializer_class = serializers.RearPanelPortTemplateSerializer
-    filter_class = filters.RearPanelPortTemplateFilter
+class RearPortTemplateViewSet(ModelViewSet):
+    queryset = RearPortTemplate.objects.select_related('device_type__manufacturer')
+    serializer_class = serializers.RearPortTemplateSerializer
+    filter_class = filters.RearPortTemplateFilter
 
 
 class DeviceBayTemplateViewSet(ModelViewSet):
@@ -369,16 +369,16 @@ class InterfaceViewSet(ModelViewSet):
         return Response(serializer.data)
 
 
-class FrontPanelPortViewSet(ModelViewSet):
-    queryset = FrontPanelPort.objects.select_related('device__device_type__manufacturer', 'rear_port')
-    serializer_class = serializers.FrontPanelPortSerializer
-    filter_class = filters.FrontPanelPortFilter
+class FrontPortViewSet(ModelViewSet):
+    queryset = FrontPort.objects.select_related('device__device_type__manufacturer', 'rear_port')
+    serializer_class = serializers.FrontPortSerializer
+    filter_class = filters.FrontPortFilter
 
 
-class RearPanelPortViewSet(ModelViewSet):
-    queryset = RearPanelPort.objects.select_related('device__device_type__manufacturer')
-    serializer_class = serializers.RearPanelPortSerializer
-    filter_class = filters.RearPanelPortFilter
+class RearPortViewSet(ModelViewSet):
+    queryset = RearPort.objects.select_related('device__device_type__manufacturer')
+    serializer_class = serializers.RearPortSerializer
+    filter_class = filters.RearPortFilter
 
 
 class DeviceBayViewSet(ModelViewSet):

+ 26 - 26
netbox/dcim/constants.py

@@ -209,32 +209,32 @@ IFACE_MODE_CHOICES = [
     [IFACE_MODE_TAGGED_ALL, 'Tagged All'],
 ]
 
-# Patch panel port types
-PANELPORT_TYPE_8P8C = 1000
-PANELPORT_TYPE_ST = 2000
-PANELPORT_TYPE_SC_SIMPLEX = 2100
-PANELPORT_TYPE_SC_DUPLEX = 2110
-PANELPORT_TYPE_FC = 2200
-PANELPORT_TYPE_LC = 2300
-PANELPORT_TYPE_MTRJ = 2400
-PANELPORT_TYPE_MPO = 2500
-PANELPORT_TYPE_CHOICES = [
+# Pass-through port types
+PORT_TYPE_8P8C = 1000
+PORT_TYPE_ST = 2000
+PORT_TYPE_SC_SIMPLEX = 2100
+PORT_TYPE_SC_DUPLEX = 2110
+PORT_TYPE_FC = 2200
+PORT_TYPE_LC = 2300
+PORT_TYPE_MTRJ = 2400
+PORT_TYPE_MPO = 2500
+PORT_TYPE_CHOICES = [
     [
         'Copper',
         [
-            [PANELPORT_TYPE_8P8C, '8P8C'],
+            [PORT_TYPE_8P8C, '8P8C'],
         ],
     ],
     [
         'Fiber Optic',
         [
-            [PANELPORT_TYPE_ST, 'ST'],
-            [PANELPORT_TYPE_SC_SIMPLEX, 'SC (Simplex)'],
-            [PANELPORT_TYPE_SC_DUPLEX, 'SC (Duplex)'],
-            [PANELPORT_TYPE_FC, 'FC'],
-            [PANELPORT_TYPE_LC, 'LC'],
-            [PANELPORT_TYPE_MTRJ, 'MTRJ'],
-            [PANELPORT_TYPE_MPO, 'MPO'],
+            [PORT_TYPE_ST, 'ST'],
+            [PORT_TYPE_SC_SIMPLEX, 'SC (Simplex)'],
+            [PORT_TYPE_SC_DUPLEX, 'SC (Duplex)'],
+            [PORT_TYPE_FC, 'FC'],
+            [PORT_TYPE_LC, 'LC'],
+            [PORT_TYPE_MTRJ, 'MTRJ'],
+            [PORT_TYPE_MPO, 'MPO'],
         ]
     ]
 ]
@@ -285,7 +285,7 @@ CONNECTION_STATUS_CHOICES = [
 
 # Cable endpoint types
 CABLE_TERMINATION_TYPES = [
-    'consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontpanelport', 'rearpanelport',
+    'consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontport', 'rearport',
 ]
 
 # Cable types
@@ -304,16 +304,16 @@ CABLE_TERMINATION_TYPE_CHOICES = {
     'powerport': ('power-ports', 'Power port'),
     'poweroutlet': ('power-outlets', 'Power outlet'),
     'interface': ('interfaces', 'Interface'),
-    'frontpanelport': ('front-panel-ports', 'Front panel port'),
-    'rearpanelport': ('rear-panel-ports', 'Rear panel port'),
+    'frontport': ('front-ports', 'Front panel port'),
+    'rearport': ('rear-ports', 'Rear panel port'),
 }
 
 COMPATIBLE_TERMINATION_TYPES = {
-    'consoleport': ['consoleserverport', 'frontpanelport', 'rearpanelport'],
-    'consoleserverport': ['consoleport', 'frontpanelport', 'rearpanelport'],
+    'consoleport': ['consoleserverport', 'frontport', 'rearport'],
+    'consoleserverport': ['consoleport', 'frontport', 'rearport'],
     'powerport': ['poweroutlet'],
     'poweroutlet': ['powerport'],
-    'interface': ['interface', 'frontpanelport', 'rearpanelport'],
-    'frontpanelport': ['consoleport', 'consoleserverport', 'interface', 'frontpanelport', 'rearpanelport'],
-    'rearpanelport': ['consoleport', 'consoleserverport', 'interface', 'frontpanelport', 'rearpanelport'],
+    'interface': ['interface', 'frontport', 'rearport'],
+    'frontport': ['consoleport', 'consoleserverport', 'interface', 'frontport', 'rearport'],
+    'rearport': ['consoleport', 'consoleserverport', 'interface', 'frontport', 'rearport'],
 }

+ 10 - 10
netbox/dcim/filters.py

@@ -14,9 +14,9 @@ from .constants import (
 )
 from .models import (
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
     InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 
 
@@ -368,17 +368,17 @@ class InterfaceTemplateFilter(DeviceTypeComponentFilterSet):
         fields = ['name', 'form_factor', 'mgmt_only']
 
 
-class FrontPanelPortTemplateFilter(DeviceTypeComponentFilterSet):
+class FrontPortTemplateFilter(DeviceTypeComponentFilterSet):
 
     class Meta:
-        model = FrontPanelPortTemplate
+        model = FrontPortTemplate
         fields = ['name', 'type']
 
 
-class RearPanelPortTemplateFilter(DeviceTypeComponentFilterSet):
+class RearPortTemplateFilter(DeviceTypeComponentFilterSet):
 
     class Meta:
-        model = RearPanelPortTemplate
+        model = RearPortTemplate
         fields = ['name', 'type']
 
 
@@ -681,17 +681,17 @@ class InterfaceFilter(django_filters.FilterSet):
             return queryset.none()
 
 
-class FrontPanelPortFilter(DeviceComponentFilterSet):
+class FrontPortFilter(DeviceComponentFilterSet):
 
     class Meta:
-        model = FrontPanelPort
+        model = FrontPort
         fields = ['name', 'type']
 
 
-class RearPanelPortFilter(DeviceComponentFilterSet):
+class RearPortFilter(DeviceComponentFilterSet):
 
     class Meta:
-        model = RearPanelPort
+        model = RearPort
         fields = ['name', 'type']
 
 

+ 31 - 31
netbox/dcim/forms.py

@@ -27,9 +27,9 @@ from virtualization.models import Cluster
 from .constants import *
 from .models import (
     Cable, DeviceBay, DeviceBayTemplate, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate,
-    Device, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate, Manufacturer,
+    Device, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate, Manufacturer,
     InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
-    RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 
 DEVICE_BY_PK_RE = r'{\d+\}'
@@ -702,22 +702,22 @@ class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = []
 
 
-class FrontPanelPortTemplateForm(BootstrapMixin, forms.ModelForm):
+class FrontPortTemplateForm(BootstrapMixin, forms.ModelForm):
 
     class Meta:
-        model = FrontPanelPortTemplate
+        model = FrontPortTemplate
         fields = ['device_type', 'name', 'type', 'rear_port', 'rear_port_position']
         widgets = {
             'device_type': forms.HiddenInput(),
         }
 
 
-class FrontPanelPortTemplateCreateForm(ComponentForm):
+class FrontPortTemplateCreateForm(ComponentForm):
     name_pattern = ExpandableNameField(
         label='Name'
     )
     type = forms.ChoiceField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     rear_port_set = forms.MultipleChoiceField(
         choices=[],
@@ -727,17 +727,17 @@ class FrontPanelPortTemplateCreateForm(ComponentForm):
 
     def __init__(self, *args, **kwargs):
 
-        super(FrontPanelPortTemplateCreateForm, self).__init__(*args, **kwargs)
+        super(FrontPortTemplateCreateForm, self).__init__(*args, **kwargs)
 
         # Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
         occupied_port_positions = [
             (front_port.rear_port_id, front_port.rear_port_position)
-            for front_port in self.parent.front_panel_port_templates.all()
+            for front_port in self.parent.front_port_templates.all()
         ]
 
         # Populate rear port choices
         choices = []
-        rear_ports = natsorted(RearPanelPortTemplate.objects.filter(device_type=self.parent), key=attrgetter('name'))
+        rear_ports = natsorted(RearPortTemplate.objects.filter(device_type=self.parent), key=attrgetter('name'))
         for rear_port in rear_ports:
             for i in range(1, rear_port.positions + 1):
                 if (rear_port.pk, i) not in occupied_port_positions:
@@ -768,22 +768,22 @@ class FrontPanelPortTemplateCreateForm(ComponentForm):
         }
 
 
-class RearPanelPortTemplateForm(BootstrapMixin, forms.ModelForm):
+class RearPortTemplateForm(BootstrapMixin, forms.ModelForm):
 
     class Meta:
-        model = RearPanelPortTemplate
+        model = RearPortTemplate
         fields = ['device_type', 'name', 'type', 'positions']
         widgets = {
             'device_type': forms.HiddenInput(),
         }
 
 
-class RearPanelPortTemplateCreateForm(ComponentForm):
+class RearPortTemplateCreateForm(ComponentForm):
     name_pattern = ExpandableNameField(
         label='Name'
     )
     type = forms.ChoiceField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     positions = forms.IntegerField(
         min_value=1,
@@ -2018,27 +2018,27 @@ class InterfaceBulkDisconnectForm(ConfirmationForm):
 
 
 #
-# Front panel ports
+# Front pass-through ports
 #
 
-class FrontPanelPortForm(BootstrapMixin, forms.ModelForm):
+class FrontPortForm(BootstrapMixin, forms.ModelForm):
     tags = TagField(required=False)
 
     class Meta:
-        model = FrontPanelPort
+        model = FrontPort
         fields = ['device', 'name', 'type', 'rear_port', 'rear_port_position', 'tags']
         widgets = {
             'device': forms.HiddenInput(),
         }
 
 
-# TODO: Merge with  FrontPanelPortTemplateCreateForm to remove duplicate logic
-class FrontPanelPortCreateForm(ComponentForm):
+# TODO: Merge with  FrontPortTemplateCreateForm to remove duplicate logic
+class FrontPortCreateForm(ComponentForm):
     name_pattern = ExpandableNameField(
         label='Name'
     )
     type = forms.ChoiceField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     rear_port_set = forms.MultipleChoiceField(
         choices=[],
@@ -2048,17 +2048,17 @@ class FrontPanelPortCreateForm(ComponentForm):
 
     def __init__(self, *args, **kwargs):
 
-        super(FrontPanelPortCreateForm, self).__init__(*args, **kwargs)
+        super(FrontPortCreateForm, self).__init__(*args, **kwargs)
 
         # Determine which rear port positions are occupied. These will be excluded from the list of available mappings.
         occupied_port_positions = [
             (front_port.rear_port_id, front_port.rear_port_position)
-            for front_port in self.parent.front_panel_port_templates.all()
+            for front_port in self.parent.front_port_templates.all()
         ]
 
         # Populate rear port choices
         choices = []
-        rear_ports = natsorted(RearPanelPort.objects.filter(device=self.parent), key=attrgetter('name'))
+        rear_ports = natsorted(RearPort.objects.filter(device=self.parent), key=attrgetter('name'))
         for rear_port in rear_ports:
             for i in range(1, rear_port.positions + 1):
                 if (rear_port.pk, i) not in occupied_port_positions:
@@ -2089,34 +2089,34 @@ class FrontPanelPortCreateForm(ComponentForm):
         }
 
 
-class FrontPanelPortBulkRenameForm(BulkRenameForm):
+class FrontPortBulkRenameForm(BulkRenameForm):
     pk = forms.ModelMultipleChoiceField(
-        queryset=FrontPanelPort.objects.all(),
+        queryset=FrontPort.objects.all(),
         widget=forms.MultipleHiddenInput
     )
 
 
 #
-# Rear panel ports
+# Rear pass-through ports
 #
 
-class RearPanelPortForm(BootstrapMixin, forms.ModelForm):
+class RearPortForm(BootstrapMixin, forms.ModelForm):
     tags = TagField(required=False)
 
     class Meta:
-        model = RearPanelPort
+        model = RearPort
         fields = ['device', 'name', 'type', 'positions', 'tags']
         widgets = {
             'device': forms.HiddenInput(),
         }
 
 
-class RearPanelPortCreateForm(ComponentForm):
+class RearPortCreateForm(ComponentForm):
     name_pattern = ExpandableNameField(
         label='Name'
     )
     type = forms.ChoiceField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     positions = forms.IntegerField(
         min_value=1,
@@ -2126,9 +2126,9 @@ class RearPanelPortCreateForm(ComponentForm):
     )
 
 
-class RearPanelPortBulkRenameForm(BulkRenameForm):
+class RearPortBulkRenameForm(BulkRenameForm):
     pk = forms.ModelMultipleChoiceField(
-        queryset=RearPanelPort.objects.all(),
+        queryset=RearPort.objects.all(),
         widget=forms.MultipleHiddenInput
     )
 

+ 19 - 19
netbox/dcim/migrations/0065_patch_panel_ports.py → netbox/dcim/migrations/0065_front_rear_ports.py

@@ -15,20 +15,20 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='FrontPanelPort',
+            name='FrontPort',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
                 ('name', models.CharField(max_length=64)),
                 ('type', models.PositiveSmallIntegerField()),
                 ('rear_port_position', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(64)])),
-                ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_panel_ports', to='dcim.Device')),
+                ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_ports', to='dcim.Device')),
             ],
             options={
                 'ordering': ['device', 'name'],
             },
         ),
         migrations.CreateModel(
-            name='FrontPanelPortTemplate',
+            name='FrontPortTemplate',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
                 ('name', models.CharField(max_length=64)),
@@ -40,13 +40,13 @@ class Migration(migrations.Migration):
             },
         ),
         migrations.CreateModel(
-            name='RearPanelPort',
+            name='RearPort',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
                 ('name', models.CharField(max_length=64)),
                 ('type', models.PositiveSmallIntegerField()),
                 ('positions', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(64)])),
-                ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rear_panel_ports', to='dcim.Device')),
+                ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rear_ports', to='dcim.Device')),
                 ('tags', taggit.managers.TaggableManager(through='taggit.TaggedItem', to='taggit.Tag')),
             ],
             options={
@@ -54,7 +54,7 @@ class Migration(migrations.Migration):
             },
         ),
         migrations.CreateModel(
-            name='RearPanelPortTemplate',
+            name='RearPortTemplate',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
                 ('name', models.CharField(max_length=64)),
@@ -71,44 +71,44 @@ class Migration(migrations.Migration):
             field=models.BooleanField(default=False),
         ),
         migrations.AddField(
-            model_name='rearpanelporttemplate',
+            model_name='rearporttemplate',
             name='device_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rear_panel_port_templates', to='dcim.DeviceType'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rear_port_templates', to='dcim.DeviceType'),
         ),
         migrations.AddField(
-            model_name='frontpanelporttemplate',
+            model_name='frontporttemplate',
             name='device_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_panel_port_templates', to='dcim.DeviceType'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_port_templates', to='dcim.DeviceType'),
         ),
         migrations.AddField(
-            model_name='frontpanelporttemplate',
+            model_name='frontporttemplate',
             name='rear_port',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_panel_port_templates', to='dcim.RearPanelPortTemplate'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_port_templates', to='dcim.RearPortTemplate'),
         ),
         migrations.AddField(
-            model_name='frontpanelport',
+            model_name='frontport',
             name='rear_port',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_panel_ports', to='dcim.RearPanelPort'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='front_ports', to='dcim.RearPort'),
         ),
         migrations.AddField(
-            model_name='frontpanelport',
+            model_name='frontport',
             name='tags',
             field=taggit.managers.TaggableManager(through='taggit.TaggedItem', to='taggit.Tag'),
         ),
         migrations.AlterUniqueTogether(
-            name='rearpanelporttemplate',
+            name='rearporttemplate',
             unique_together={('device_type', 'name')},
         ),
         migrations.AlterUniqueTogether(
-            name='rearpanelport',
+            name='rearport',
             unique_together={('device', 'name')},
         ),
         migrations.AlterUniqueTogether(
-            name='frontpanelporttemplate',
+            name='frontporttemplate',
             unique_together={('rear_port', 'rear_port_position'), ('device_type', 'name')},
         ),
         migrations.AlterUniqueTogether(
-            name='frontpanelport',
+            name='frontport',
             unique_together={('device', 'name'), ('rear_port', 'rear_port_position')},
         ),
     ]

+ 3 - 3
netbox/dcim/migrations/0066_cables.py

@@ -105,7 +105,7 @@ class Migration(migrations.Migration):
 
     dependencies = [
         ('contenttypes', '0002_remove_content_type_name'),
-        ('dcim', '0065_patch_panel_ports'),
+        ('dcim', '0065_front_rear_ports'),
     ]
 
     operations = [
@@ -123,8 +123,8 @@ class Migration(migrations.Migration):
                 ('status', models.BooleanField(default=True)),
                 ('label', models.CharField(blank=True, max_length=100)),
                 ('color', utilities.fields.ColorField(blank=True, max_length=6)),
-                ('termination_a_type', models.ForeignKey(limit_choices_to={'model__in': ['consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontpanelport', 'rearpanelport']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.ContentType')),
-                ('termination_b_type', models.ForeignKey(limit_choices_to={'model__in': ['consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontpanelport', 'rearpanelport']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.ContentType')),
+                ('termination_a_type', models.ForeignKey(limit_choices_to={'model__in': ['consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontport', 'rearport']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.ContentType')),
+                ('termination_b_type', models.ForeignKey(limit_choices_to={'model__in': ['consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontport', 'rearport']}, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.ContentType')),
             ],
         ),
         migrations.AlterUniqueTogether(

+ 33 - 33
netbox/dcim/models.py

@@ -869,7 +869,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel):
             })
 
         if not self.is_patch_panel and (
-                self.front_panel_port_templates.exists() or self.rear_panel_port_templates.exists()
+                self.front_port_templates.exists() or self.rear_port_templates.exists()
         ):
             raise ValidationError({
                 'is_patch_panel': "Must delete all patch panel port templates associated with this device before "
@@ -1015,25 +1015,25 @@ class InterfaceTemplate(ComponentTemplateModel):
         return self.name
 
 
-class FrontPanelPortTemplate(ComponentTemplateModel):
+class FrontPortTemplate(ComponentTemplateModel):
     """
-    A template for a front patch panel port on a new Device.
+    Template for a pass-through port on the front of a new Device.
     """
     device_type = models.ForeignKey(
         to='dcim.DeviceType',
         on_delete=models.CASCADE,
-        related_name='front_panel_port_templates'
+        related_name='front_port_templates'
     )
     name = models.CharField(
         max_length=64
     )
     type = models.PositiveSmallIntegerField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     rear_port = models.ForeignKey(
-        to='dcim.RearPanelPortTemplate',
+        to='dcim.RearPortTemplate',
         on_delete=models.CASCADE,
-        related_name='front_panel_port_templates'
+        related_name='front_port_templates'
     )
     rear_port_position = models.PositiveSmallIntegerField(
         default=1,
@@ -1067,20 +1067,20 @@ class FrontPanelPortTemplate(ComponentTemplateModel):
             )
 
 
-class RearPanelPortTemplate(ComponentTemplateModel):
+class RearPortTemplate(ComponentTemplateModel):
     """
-    A template for a rear patch panel port on a new Device.
+    Template for a pass-through port on the rear of a new Device.
     """
     device_type = models.ForeignKey(
         to='dcim.DeviceType',
         on_delete=models.CASCADE,
-        related_name='rear_panel_port_templates'
+        related_name='rear_port_templates'
     )
     name = models.CharField(
         max_length=64
     )
     type = models.PositiveSmallIntegerField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     positions = models.PositiveSmallIntegerField(
         default=1,
@@ -1512,22 +1512,22 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
                 [Interface(device=self, name=template.name, form_factor=template.form_factor,
                            mgmt_only=template.mgmt_only) for template in self.device_type.interface_templates.all()]
             )
-            RearPanelPort.objects.bulk_create([
-                RearPanelPort(
+            RearPort.objects.bulk_create([
+                RearPort(
                     device=self,
                     name=template.name,
                     type=template.type,
                     positions=template.positions
-                ) for template in self.device_type.rear_panel_port_templates.all()
+                ) for template in self.device_type.rear_port_templates.all()
             ])
-            FrontPanelPort.objects.bulk_create([
-                FrontPanelPort(
+            FrontPort.objects.bulk_create([
+                FrontPort(
                     device=self,
                     name=template.name,
                     type=template.type,
-                    rear_port=RearPanelPort.objects.get(device=self, name=template.rear_port.name),
+                    rear_port=RearPort.objects.get(device=self, name=template.rear_port.name),
                     rear_port_position=template.rear_port_position,
-                ) for template in self.device_type.front_panel_port_templates.all()
+                ) for template in self.device_type.front_port_templates.all()
             ])
             DeviceBay.objects.bulk_create(
                 [DeviceBay(device=self, name=template.name) for template in
@@ -2046,28 +2046,28 @@ class Interface(ComponentModel):
 
 
 #
-# Patch panel ports
+# Pass-through ports
 #
 
-class FrontPanelPort(ComponentModel):
+class FrontPort(ComponentModel):
     """
-    A port on the front of a patch panel.
+    A pass-through port on the front of a Device.
     """
     device = models.ForeignKey(
         to='dcim.Device',
         on_delete=models.CASCADE,
-        related_name='front_panel_ports'
+        related_name='front_ports'
     )
     name = models.CharField(
         max_length=64
     )
     type = models.PositiveSmallIntegerField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     rear_port = models.ForeignKey(
-        to='dcim.RearPanelPort',
+        to='dcim.RearPort',
         on_delete=models.CASCADE,
-        related_name='front_panel_ports'
+        related_name='front_ports'
     )
     rear_port_position = models.PositiveSmallIntegerField(
         default=1,
@@ -2103,20 +2103,20 @@ class FrontPanelPort(ComponentModel):
             )
 
 
-class RearPanelPort(ComponentModel):
+class RearPort(ComponentModel):
     """
-    A port on the rear of a patch panel.
+    A pass-through port on the rear of a Device.
     """
     device = models.ForeignKey(
         to='dcim.Device',
         on_delete=models.CASCADE,
-        related_name='rear_panel_ports'
+        related_name='rear_ports'
     )
     name = models.CharField(
         max_length=64
     )
     type = models.PositiveSmallIntegerField(
-        choices=PANELPORT_TYPE_CHOICES
+        choices=PORT_TYPE_CHOICES
     )
     positions = models.PositiveSmallIntegerField(
         default=1,
@@ -2380,23 +2380,23 @@ class Cable(ChangeLoggedModel):
         def trace_cable(termination, position=1):
 
             # Given a front port, follow the cable connected to the corresponding rear port/position
-            if isinstance(termination, FrontPanelPort):
+            if isinstance(termination, FrontPort):
                 peer_port = termination.rear_port
                 position = termination.rear_port_position
 
             # Given a rear port/position, follow the cable connected to the corresponding front port
-            elif isinstance(termination, RearPanelPort):
+            elif isinstance(termination, RearPort):
                 if position not in range(1, termination.positions + 1):
                     raise Exception("Invalid position for {} ({} positions): {})".format(
                         termination, termination.positions, position
                     ))
-                peer_port = FrontPanelPort.objects.get(
+                peer_port = FrontPort.objects.get(
                     rear_port=termination,
                     rear_port_position=position,
                 )
                 position=1
 
-            # Termination is not a panel port, so we've reached the end of the path
+            # Termination is not a pass-through port, so we've reached the end of the path
             else:
                 return termination
 

+ 10 - 10
netbox/dcim/tables.py

@@ -5,9 +5,9 @@ from tenancy.tables import COL_TENANT
 from utilities.tables import BaseTable, BooleanColumn, ToggleColumn
 from .models import (
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
     InventoryItem, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackGroup, RackReservation, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 
 REGION_LINK = """
@@ -416,20 +416,20 @@ class InterfaceTemplateTable(BaseTable):
         empty_text = "None"
 
 
-class FrontPanelPortTemplateTable(BaseTable):
+class FrontPortTemplateTable(BaseTable):
     pk = ToggleColumn()
 
     class Meta(BaseTable.Meta):
-        model = FrontPanelPortTemplate
+        model = FrontPortTemplate
         fields = ('pk', 'name', 'type', 'rear_port', 'rear_port_position')
         empty_text = "None"
 
 
-class RearPanelPortTemplateTable(BaseTable):
+class RearPortTemplateTable(BaseTable):
     pk = ToggleColumn()
 
     class Meta(BaseTable.Meta):
-        model = RearPanelPortTemplate
+        model = RearPortTemplate
         fields = ('pk', 'name', 'type', 'positions')
         empty_text = "None"
 
@@ -593,18 +593,18 @@ class InterfaceTable(BaseTable):
         fields = ('name', 'form_factor', 'lag', 'enabled', 'mgmt_only', 'description')
 
 
-class FrontPanelPortTable(BaseTable):
+class FrontPortTable(BaseTable):
 
     class Meta(BaseTable.Meta):
-        model = FrontPanelPort
+        model = FrontPort
         fields = ('name', 'type', 'rear_port', 'rear_port_position')
         empty_text = "None"
 
 
-class RearPanelPortTable(BaseTable):
+class RearPortTable(BaseTable):
 
     class Meta(BaseTable.Meta):
-        model = RearPanelPort
+        model = RearPort
         fields = ('name', 'type', 'positions')
         empty_text = "None"
 

+ 21 - 21
netbox/dcim/urls.py

@@ -109,13 +109,13 @@ urlpatterns = [
     url(r'^device-types/(?P<pk>\d+)/interfaces/edit/$', views.InterfaceTemplateBulkEditView.as_view(), name='devicetype_bulkedit_interface'),
     url(r'^device-types/(?P<pk>\d+)/interfaces/delete/$', views.InterfaceTemplateBulkDeleteView.as_view(), name='devicetype_delete_interface'),
 
-    # Front panel port templates
-    url(r'^device-types/(?P<pk>\d+)/front-panel-ports/add/$', views.FrontPanelPortTemplateCreateView.as_view(), name='devicetype_add_frontpanelport'),
-    url(r'^device-types/(?P<pk>\d+)/front-panel-ports/delete/$', views.FrontPanelPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_frontpanelport'),
+    # Front port templates
+    url(r'^device-types/(?P<pk>\d+)/front-ports/add/$', views.FrontPortTemplateCreateView.as_view(), name='devicetype_add_frontport'),
+    url(r'^device-types/(?P<pk>\d+)/front-ports/delete/$', views.FrontPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_frontport'),
 
-    # Front panel port templates
-    url(r'^device-types/(?P<pk>\d+)/rear-panel-ports/add/$', views.RearPanelPortTemplateCreateView.as_view(), name='devicetype_add_rearpanelport'),
-    url(r'^device-types/(?P<pk>\d+)/rear-panel-ports/delete/$', views.RearPanelPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_rearpanelport'),
+    # Rear port templates
+    url(r'^device-types/(?P<pk>\d+)/rear-ports/add/$', views.RearPortTemplateCreateView.as_view(), name='devicetype_add_rearport'),
+    url(r'^device-types/(?P<pk>\d+)/rear-ports/delete/$', views.RearPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_rearport'),
 
     # Device bay templates
     url(r'^device-types/(?P<pk>\d+)/device-bays/add/$', views.DeviceBayTemplateCreateView.as_view(), name='devicetype_add_devicebay'),
@@ -215,21 +215,21 @@ urlpatterns = [
     url(r'^interfaces/(?P<pk>\d+)/changelog/$', ObjectChangeLogView.as_view(), name='interface_changelog', kwargs={'model': Interface}),
     url(r'^interfaces/rename/$', views.InterfaceBulkRenameView.as_view(), name='interface_bulk_rename'),
 
-    # Front panel ports
-    # url(r'^devices/front-panel-ports/add/$', views.DeviceBulkAddFrontPanelPortView.as_view(), name='device_bulk_add_frontpanelport'),
-    url(r'^devices/(?P<pk>\d+)/front-panel-ports/add/$', views.FrontPanelPortCreateView.as_view(), name='frontpanelport_add'),
-    url(r'^devices/(?P<pk>\d+)/front-panel-ports/delete/$', views.FrontPanelPortBulkDeleteView.as_view(), name='frontpanelport_bulk_delete'),
-    url(r'^front-panel-ports/(?P<pk>\d+)/edit/$', views.FrontPanelPortEditView.as_view(), name='frontpanelport_edit'),
-    url(r'^front-panel-ports/(?P<pk>\d+)/delete/$', views.FrontPanelPortDeleteView.as_view(), name='frontpanelport_delete'),
-    url(r'^front-panel-ports/rename/$', views.FrontPanelPortBulkRenameView.as_view(), name='frontpanelport_bulk_rename'),
-
-    # Rear panel ports
-    # url(r'^devices/rear-panel-ports/add/$', views.DeviceBulkAddRearPanelPortView.as_view(), name='device_bulk_add_rearpanelport'),
-    url(r'^devices/(?P<pk>\d+)/rear-panel-ports/add/$', views.RearPanelPortCreateView.as_view(), name='rearpanelport_add'),
-    url(r'^devices/(?P<pk>\d+)/rear-panel-ports/delete/$', views.RearPanelPortBulkDeleteView.as_view(), name='rearpanelport_bulk_delete'),
-    url(r'^rear-panel-ports/(?P<pk>\d+)/edit/$', views.RearPanelPortEditView.as_view(), name='rearpanelport_edit'),
-    url(r'^rear-panel-ports/(?P<pk>\d+)/delete/$', views.RearPanelPortDeleteView.as_view(), name='rearpanelport_delete'),
-    url(r'^rear-panel-ports/rename/$', views.RearPanelPortBulkRenameView.as_view(), name='rearpanelport_bulk_rename'),
+    # Front ports
+    # url(r'^devices/front-ports/add/$', views.DeviceBulkAddFrontPortView.as_view(), name='device_bulk_add_frontport'),
+    url(r'^devices/(?P<pk>\d+)/front-ports/add/$', views.FrontPortCreateView.as_view(), name='frontport_add'),
+    url(r'^devices/(?P<pk>\d+)/front-ports/delete/$', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'),
+    url(r'^front-ports/(?P<pk>\d+)/edit/$', views.FrontPortEditView.as_view(), name='frontport_edit'),
+    url(r'^front-ports/(?P<pk>\d+)/delete/$', views.FrontPortDeleteView.as_view(), name='frontport_delete'),
+    url(r'^front-ports/rename/$', views.FrontPortBulkRenameView.as_view(), name='frontport_bulk_rename'),
+
+    # Rear ports
+    # url(r'^devices/rear-ports/add/$', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'),
+    url(r'^devices/(?P<pk>\d+)/rear-ports/add/$', views.RearPortCreateView.as_view(), name='rearport_add'),
+    url(r'^devices/(?P<pk>\d+)/rear-ports/delete/$', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'),
+    url(r'^rear-ports/(?P<pk>\d+)/edit/$', views.RearPortEditView.as_view(), name='rearport_edit'),
+    url(r'^rear-ports/(?P<pk>\d+)/delete/$', views.RearPortDeleteView.as_view(), name='rearport_delete'),
+    url(r'^rear-ports/rename/$', views.RearPortBulkRenameView.as_view(), name='rearport_bulk_rename'),
 
     # Device bays
     url(r'^devices/device-bays/add/$', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'),

+ 76 - 76
netbox/dcim/views.py

@@ -29,9 +29,9 @@ from . import filters, forms, tables
 from .constants import CONNECTION_STATUS_CONNECTED
 from .models import (
     Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
-    DeviceBayTemplate, DeviceRole, DeviceType, FrontPanelPort, FrontPanelPortTemplate, Interface, InterfaceTemplate,
+    DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
     Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack,
-    RackGroup, RackReservation, RackRole, RearPanelPort, RearPanelPortTemplate, Region, Site, VirtualChassis,
+    RackGroup, RackReservation, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
 )
 
 
@@ -557,12 +557,12 @@ class DeviceTypeView(View):
             ).filter(device_type=devicetype)),
             orderable=False
         )
-        front_panel_port_table = tables.FrontPanelPortTemplateTable(
-            natsorted(FrontPanelPortTemplate.objects.filter(device_type=devicetype), key=attrgetter('name')),
+        front_port_table = tables.FrontPortTemplateTable(
+            natsorted(FrontPortTemplate.objects.filter(device_type=devicetype), key=attrgetter('name')),
             orderable=False
         )
-        rear_panel_port_table = tables.RearPanelPortTemplateTable(
-            natsorted(RearPanelPortTemplate.objects.filter(device_type=devicetype), key=attrgetter('name')),
+        rear_port_table = tables.RearPortTemplateTable(
+            natsorted(RearPortTemplate.objects.filter(device_type=devicetype), key=attrgetter('name')),
             orderable=False
         )
         devicebay_table = tables.DeviceBayTemplateTable(
@@ -575,8 +575,8 @@ class DeviceTypeView(View):
             powerport_table.columns.show('pk')
             poweroutlet_table.columns.show('pk')
             interface_table.columns.show('pk')
-            front_panel_port_table.columns.show('pk')
-            rear_panel_port_table.columns.show('pk')
+            front_port_table.columns.show('pk')
+            rear_port_table.columns.show('pk')
             devicebay_table.columns.show('pk')
 
         return render(request, 'dcim/devicetype.html', {
@@ -586,8 +586,8 @@ class DeviceTypeView(View):
             'powerport_table': powerport_table,
             'poweroutlet_table': poweroutlet_table,
             'interface_table': interface_table,
-            'front_panel_port_table': front_panel_port_table,
-            'rear_panel_port_table': rear_panel_port_table,
+            'front_port_table': front_port_table,
+            'rear_port_table': rear_port_table,
             'devicebay_table': devicebay_table,
         })
 
@@ -731,38 +731,38 @@ class InterfaceTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     table = tables.InterfaceTemplateTable
 
 
-class FrontPanelPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
-    permission_required = 'dcim.add_frontpanelporttemplate'
+class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
+    permission_required = 'dcim.add_frontporttemplate'
     parent_model = DeviceType
     parent_field = 'device_type'
-    model = FrontPanelPortTemplate
-    form = forms.FrontPanelPortTemplateCreateForm
-    model_form = forms.FrontPanelPortTemplateForm
+    model = FrontPortTemplate
+    form = forms.FrontPortTemplateCreateForm
+    model_form = forms.FrontPortTemplateForm
     template_name = 'dcim/device_component_add.html'
 
 
-class FrontPanelPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
-    permission_required = 'dcim.delete_frontpanelporttemplate'
-    queryset = FrontPanelPortTemplate.objects.all()
+class FrontPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'dcim.delete_frontporttemplate'
+    queryset = FrontPortTemplate.objects.all()
     parent_model = DeviceType
-    table = tables.FrontPanelPortTemplateTable
+    table = tables.FrontPortTemplateTable
 
 
-class RearPanelPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
-    permission_required = 'dcim.add_rearpanelporttemplate'
+class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
+    permission_required = 'dcim.add_rearporttemplate'
     parent_model = DeviceType
     parent_field = 'device_type'
-    model = RearPanelPortTemplate
-    form = forms.RearPanelPortTemplateCreateForm
-    model_form = forms.RearPanelPortTemplateForm
+    model = RearPortTemplate
+    form = forms.RearPortTemplateCreateForm
+    model_form = forms.RearPortTemplateForm
     template_name = 'dcim/device_component_add.html'
 
 
-class RearPanelPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
-    permission_required = 'dcim.delete_rearpanelporttemplate'
-    queryset = RearPanelPortTemplate.objects.all()
+class RearPortTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'dcim.delete_rearporttemplate'
+    queryset = RearPortTemplate.objects.all()
     parent_model = DeviceType
-    table = tables.RearPanelPortTemplateTable
+    table = tables.RearPortTemplateTable
 
 
 class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
@@ -903,11 +903,11 @@ class DeviceView(View):
             'connected_endpoint__device', 'circuit_termination__circuit'
         ).prefetch_related('ip_addresses')
 
-        # Front panel ports
-        front_panel_ports = device.front_panel_ports.select_related('rear_port')
+        # Front ports
+        front_ports = device.front_ports.select_related('rear_port')
 
-        # Rear panel ports
-        rear_panel_ports = device.rear_panel_ports.all()
+        # Rear ports
+        rear_ports = device.rear_ports.all()
 
         # Device bays
         device_bays = natsorted(
@@ -941,8 +941,8 @@ class DeviceView(View):
             'poweroutlets': poweroutlets,
             'interfaces': interfaces,
             'device_bays': device_bays,
-            'front_panel_ports': front_panel_ports,
-            'rear_panel_ports': rear_panel_ports,
+            'front_ports': front_ports,
+            'rear_ports': rear_ports,
             'services': services,
             'secrets': secrets,
             'vc_members': vc_members,
@@ -1757,79 +1757,79 @@ class InterfaceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 
 
 #
-# Front panel ports
+# Front ports
 #
 
-class FrontPanelPortCreateView(PermissionRequiredMixin, ComponentCreateView):
-    permission_required = 'dcim.add_frontpanelport'
+class FrontPortCreateView(PermissionRequiredMixin, ComponentCreateView):
+    permission_required = 'dcim.add_frontport'
     parent_model = Device
     parent_field = 'device'
-    model = FrontPanelPort
-    form = forms.FrontPanelPortCreateForm
-    model_form = forms.FrontPanelPortForm
+    model = FrontPort
+    form = forms.FrontPortCreateForm
+    model_form = forms.FrontPortForm
     template_name = 'dcim/device_component_add.html'
 
 
-class FrontPanelPortEditView(PermissionRequiredMixin, ObjectEditView):
-    permission_required = 'dcim.change_frontpanelport'
-    model = FrontPanelPort
-    model_form = forms.FrontPanelPortForm
+class FrontPortEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'dcim.change_frontport'
+    model = FrontPort
+    model_form = forms.FrontPortForm
 
 
-class FrontPanelPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
-    permission_required = 'dcim.delete_frontpanelport'
-    model = FrontPanelPort
+class FrontPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
+    permission_required = 'dcim.delete_frontport'
+    model = FrontPort
 
 
-class FrontPanelPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_frontpanelport'
-    queryset = FrontPanelPort.objects.all()
-    form = forms.FrontPanelPortBulkRenameForm
+class FrontPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
+    permission_required = 'dcim.change_frontport'
+    queryset = FrontPort.objects.all()
+    form = forms.FrontPortBulkRenameForm
 
 
-class FrontPanelPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
-    permission_required = 'dcim.delete_frontpanelport'
-    queryset = FrontPanelPort.objects.all()
+class FrontPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'dcim.delete_frontport'
+    queryset = FrontPort.objects.all()
     parent_model = Device
-    table = tables.FrontPanelPortTable
+    table = tables.FrontPortTable
 
 
 #
-# Rear panel ports
+# Rear ports
 #
 
-class RearPanelPortCreateView(PermissionRequiredMixin, ComponentCreateView):
-    permission_required = 'dcim.add_rearpanelport'
+class RearPortCreateView(PermissionRequiredMixin, ComponentCreateView):
+    permission_required = 'dcim.add_rearport'
     parent_model = Device
     parent_field = 'device'
-    model = RearPanelPort
-    form = forms.RearPanelPortCreateForm
-    model_form = forms.RearPanelPortForm
+    model = RearPort
+    form = forms.RearPortCreateForm
+    model_form = forms.RearPortForm
     template_name = 'dcim/device_component_add.html'
 
 
-class RearPanelPortEditView(PermissionRequiredMixin, ObjectEditView):
-    permission_required = 'dcim.change_rearpanelport'
-    model = RearPanelPort
-    model_form = forms.RearPanelPortForm
+class RearPortEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'dcim.change_rearport'
+    model = RearPort
+    model_form = forms.RearPortForm
 
 
-class RearPanelPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
-    permission_required = 'dcim.delete_rearpanelport'
-    model = RearPanelPort
+class RearPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
+    permission_required = 'dcim.delete_rearport'
+    model = RearPort
 
 
-class RearPanelPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_rearpanelport'
-    queryset = RearPanelPort.objects.all()
-    form = forms.RearPanelPortBulkRenameForm
+class RearPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
+    permission_required = 'dcim.change_rearport'
+    queryset = RearPort.objects.all()
+    form = forms.RearPortBulkRenameForm
 
 
-class RearPanelPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
-    permission_required = 'dcim.delete_rearpanelport'
-    queryset = RearPanelPort.objects.all()
+class RearPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'dcim.delete_rearport'
+    queryset = RearPort.objects.all()
     parent_model = Device
-    table = tables.RearPanelPortTable
+    table = tables.RearPortTable
 
 
 #

+ 20 - 20
netbox/templates/dcim/device.html

@@ -689,7 +689,7 @@
                     </form>
                 {% endif %}
             {% endif %}
-            {% if front_panel_ports or device.device_type.is_patch_panel %}
+            {% if front_ports or device.device_type.is_patch_panel %}
                 <form method="post">
                 {% csrf_token %}
                     <div class="panel panel-default">
@@ -699,7 +699,7 @@
                         <table class="table table-hover table-headings panel-body component-list">
                             <thead>
                                 <tr>
-                                    {% if perms.dcim.change_frontpanelport or perms.dcim.delete_frontpanelport %}
+                                    {% if perms.dcim.change_frontport or perms.dcim.delete_frontport %}
                                         <th class="pk"><input type="checkbox" class="toggle" title="Toggle all" /></th>
                                     {% endif %}
                                     <th>Name</th>
@@ -710,8 +710,8 @@
                                 </tr>
                             </thead>
                             <tbody>
-                                {% for frontpanelport in front_panel_ports %}
-                                    {% include 'dcim/inc/frontpanelport.html' %}
+                                {% for frontport in front_ports %}
+                                    {% include 'dcim/inc/frontport.html' %}
                                 {% empty %}
                                     <tr>
                                         <td colspan="5" class="text-center text-muted">&mdash; No front panel ports defined &mdash;</td>
@@ -720,19 +720,19 @@
                             </tbody>
                         </table>
                         <div class="panel-footer">
-                            {% if front_panel_ports and perms.dcim.change_frontpanelport %}
-                                <button type="submit" name="_rename" formaction="{% url 'dcim:frontpanelport_bulk_rename' %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
+                            {% if front_ports and perms.dcim.change_frontport %}
+                                <button type="submit" name="_rename" formaction="{% url 'dcim:frontport_bulk_rename' %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
                                     <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Rename
                                 </button>
                             {% endif %}
-                            {% if front_panel_ports and perms.dcim.delete_frontpanelport %}
-                                <button type="submit" formaction="{% url 'dcim:frontpanelport_bulk_delete' pk=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
+                            {% if front_ports and perms.dcim.delete_frontport %}
+                                <button type="submit" formaction="{% url 'dcim:frontport_bulk_delete' pk=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
                                     <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete
                                 </button>
                             {% endif %}
-                            {% if perms.dcim.add_frontpanelport %}
+                            {% if perms.dcim.add_frontport %}
                                 <div class="pull-right">
-                                    <a href="{% url 'dcim:frontpanelport_add' pk=device.pk %}" class="btn btn-primary btn-xs">
+                                    <a href="{% url 'dcim:frontport_add' pk=device.pk %}" class="btn btn-primary btn-xs">
                                         <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add front panel ports
                                     </a>
                                 </div>
@@ -742,7 +742,7 @@
                     </div>
                 </form>
             {% endif %}
-            {% if rear_panel_ports or device.device_type.is_patch_panel %}
+            {% if rear_ports or device.device_type.is_patch_panel %}
                 <form method="post">
                 {% csrf_token %}
                     <div class="panel panel-default">
@@ -752,7 +752,7 @@
                         <table class="table table-hover table-headings panel-body component-list">
                             <thead>
                                 <tr>
-                                    {% if perms.dcim.change_rearpanelport or perms.dcim.delete_rearpanelport %}
+                                    {% if perms.dcim.change_rearport or perms.dcim.delete_rearport %}
                                         <th class="pk"><input type="checkbox" class="toggle" title="Toggle all" /></th>
                                     {% endif %}
                                     <th>Name</th>
@@ -762,8 +762,8 @@
                                 </tr>
                             </thead>
                             <tbody>
-                                {% for rearpanelport in rear_panel_ports %}
-                                    {% include 'dcim/inc/rearpanelport.html' %}
+                                {% for rearport in rear_ports %}
+                                    {% include 'dcim/inc/rearport.html' %}
                                 {% empty %}
                                     <tr>
                                         <td colspan="5" class="text-center text-muted">&mdash; No rear panel ports defined &mdash;</td>
@@ -772,19 +772,19 @@
                             </tbody>
                         </table>
                         <div class="panel-footer">
-                            {% if rear_panel_ports and perms.dcim.change_rearpanelport %}
-                                <button type="submit" name="_rename" formaction="{% url 'dcim:rearpanelport_bulk_rename' %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
+                            {% if rear_ports and perms.dcim.change_rearport %}
+                                <button type="submit" name="_rename" formaction="{% url 'dcim:rearport_bulk_rename' %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
                                     <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Rename
                                 </button>
                             {% endif %}
-                            {% if rear_panel_ports and perms.dcim.delete_rearpanelport %}
-                                <button type="submit" formaction="{% url 'dcim:rearpanelport_bulk_delete' pk=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
+                            {% if rear_ports and perms.dcim.delete_rearport %}
+                                <button type="submit" formaction="{% url 'dcim:rearport_bulk_delete' pk=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
                                     <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete
                                 </button>
                             {% endif %}
-                            {% if perms.dcim.add_rearpanelport %}
+                            {% if perms.dcim.add_rearport %}
                                 <div class="pull-right">
-                                    <a href="{% url 'dcim:rearpanelport_add' pk=device.pk %}" class="btn btn-primary btn-xs">
+                                    <a href="{% url 'dcim:rearport_add' pk=device.pk %}" class="btn btn-primary btn-xs">
                                         <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add rear panel ports
                                     </a>
                                 </div>

+ 4 - 4
netbox/templates/dcim/devicetype.html

@@ -201,11 +201,11 @@
         {% 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 %}
-        {% if devicetype.is_patch_panel or front_panel_port_table.rows %}
-            {% include 'dcim/inc/devicetype_component_table.html' with table=front_panel_port_table title='Front Panel Ports' add_url='dcim:devicetype_add_frontpanelport' delete_url='dcim:devicetype_delete_frontpanelport' %}
+        {% if devicetype.is_patch_panel or front_port_table.rows %}
+            {% include 'dcim/inc/devicetype_component_table.html' with table=front_port_table title='Front Panel Ports' add_url='dcim:devicetype_add_frontport' delete_url='dcim:devicetype_delete_frontport' %}
         {% endif %}
-        {% if devicetype.is_patch_panel or rear_panel_port_table.rows %}
-            {% include 'dcim/inc/devicetype_component_table.html' with table=rear_panel_port_table title='Rear Panel Ports' add_url='dcim:devicetype_add_rearpanelport' delete_url='dcim:devicetype_delete_rearpanelport' %}
+        {% if devicetype.is_patch_panel or rear_port_table.rows %}
+            {% include 'dcim/inc/devicetype_component_table.html' with table=rear_port_table title='Rear Panel Ports' add_url='dcim:devicetype_add_rearport' delete_url='dcim:devicetype_delete_rearport' %}
         {% endif %}
     </div>
 </div>

+ 0 - 25
netbox/templates/dcim/inc/frontpanelport.html

@@ -1,25 +0,0 @@
-<tr class="frontpanelport">
-    {% if perms.dcim.change_frontpanelport or perms.dcim.delete_frontpanelport %}
-        <td class="pk">
-            <input name="pk" type="checkbox" value="{{ frontpanelport.pk }}" />
-        </td>
-    {% endif %}
-    <td>
-        <i class="fa fa-fw fa-square-o"></i> {{ frontpanelport }}
-    </td>
-    <td>{{ frontpanelport.get_type_display }}</td>
-    <td>{{ frontpanelport.rear_port }}</td>
-    <td>{{ frontpanelport.rear_port_position }}</td>
-    <td class="text-right">
-        {% if perms.dcim.change_frontpanelport %}
-            <a href="{% url 'dcim:frontpanelport_edit' pk=frontpanelport.pk %}?return_url={{ device.get_absolute_url }}" title="Edit port" class="btn btn-info btn-xs">
-                <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
-            </a>
-        {% endif %}
-        {% if perms.dcim.delete_frontpanelport %}
-            <a href="{% url 'dcim:frontpanelport_delete' pk=frontpanelport.pk %}?return_url={{ device.get_absolute_url }}" title="Delete port" class="btn btn-danger btn-xs">
-                <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
-            </a>
-        {% endif %}
-    </td>
-</tr>

+ 25 - 0
netbox/templates/dcim/inc/frontport.html

@@ -0,0 +1,25 @@
+<tr class="frontport">
+    {% if perms.dcim.change_frontport or perms.dcim.delete_frontport %}
+        <td class="pk">
+            <input name="pk" type="checkbox" value="{{ frontport.pk }}" />
+        </td>
+    {% endif %}
+    <td>
+        <i class="fa fa-fw fa-square-o"></i> {{ frontport }}
+    </td>
+    <td>{{ frontport.get_type_display }}</td>
+    <td>{{ frontport.rear_port }}</td>
+    <td>{{ frontport.rear_port_position }}</td>
+    <td class="text-right">
+        {% if perms.dcim.change_frontport %}
+            <a href="{% url 'dcim:frontport_edit' pk=frontport.pk %}?return_url={{ device.get_absolute_url }}" title="Edit port" class="btn btn-info btn-xs">
+                <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
+            </a>
+        {% endif %}
+        {% if perms.dcim.delete_frontport %}
+            <a href="{% url 'dcim:frontport_delete' pk=frontport.pk %}?return_url={{ device.get_absolute_url }}" title="Delete port" class="btn btn-danger btn-xs">
+                <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
+            </a>
+        {% endif %}
+    </td>
+</tr>

+ 0 - 24
netbox/templates/dcim/inc/rearpanelport.html

@@ -1,24 +0,0 @@
-<tr class="rearpanelport">
-    {% if perms.dcim.change_rearpanelport or perms.dcim.delete_rearpanelport %}
-        <td class="pk">
-            <input name="pk" type="checkbox" value="{{ rearpanelport.pk }}" />
-        </td>
-    {% endif %}
-    <td>
-        <i class="fa fa-fw fa-square-o"></i> {{ rearpanelport }}
-    </td>
-    <td>{{ rearpanelport.get_type_display }}</td>
-    <td>{{ rearpanelport.positions }}</td>
-    <td class="text-right">
-        {% if perms.dcim.change_rearpanelport %}
-            <a href="{% url 'dcim:rearpanelport_edit' pk=rearpanelport.pk %}?return_url={{ device.get_absolute_url }}" title="Edit port" class="btn btn-info btn-xs">
-                <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
-            </a>
-        {% endif %}
-        {% if perms.dcim.delete_rearpanelport %}
-            <a href="{% url 'dcim:rearpanelport_delete' pk=rearpanelport.pk %}?return_url={{ device.get_absolute_url }}" title="Delete port" class="btn btn-danger btn-xs">
-                <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
-            </a>
-        {% endif %}
-    </td>
-</tr>

+ 24 - 0
netbox/templates/dcim/inc/rearport.html

@@ -0,0 +1,24 @@
+<tr class="rearport">
+    {% if perms.dcim.change_rearport or perms.dcim.delete_rearport %}
+        <td class="pk">
+            <input name="pk" type="checkbox" value="{{ rearport.pk }}" />
+        </td>
+    {% endif %}
+    <td>
+        <i class="fa fa-fw fa-square-o"></i> {{ rearport }}
+    </td>
+    <td>{{ rearport.get_type_display }}</td>
+    <td>{{ rearport.positions }}</td>
+    <td class="text-right">
+        {% if perms.dcim.change_rearport %}
+            <a href="{% url 'dcim:rearport_edit' pk=rearport.pk %}?return_url={{ device.get_absolute_url }}" title="Edit port" class="btn btn-info btn-xs">
+                <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
+            </a>
+        {% endif %}
+        {% if perms.dcim.delete_rearport %}
+            <a href="{% url 'dcim:rearport_delete' pk=rearport.pk %}?return_url={{ device.get_absolute_url }}" title="Delete port" class="btn btn-danger btn-xs">
+                <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
+            </a>
+        {% endif %}
+    </td>
+</tr>