diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index df1261d55..80f54a2a3 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -504,8 +504,8 @@ class ConsoleServerPortSerializer(TaggitSerializer, ValidatedModelSerializer): class Meta: model = ConsoleServerPort - fields = ['id', 'device', 'name', 'connected_console', 'tags'] - read_only_fields = ['connected_console'] + fields = ['id', 'device', 'name', 'connected_endpoint', 'tags'] + read_only_fields = ['connected_endpoint'] class NestedConsoleServerPortSerializer(WritableNestedSerializer): @@ -518,7 +518,7 @@ class NestedConsoleServerPortSerializer(WritableNestedSerializer): fields = ['id', 'url', 'device', 'name', 'is_connected'] def get_is_connected(self, obj): - return hasattr(obj, 'connected_console') and obj.connected_console is not None + return hasattr(obj, 'connected_endpoint') and obj.connected_endpoint is not None # @@ -527,12 +527,12 @@ class NestedConsoleServerPortSerializer(WritableNestedSerializer): class ConsolePortSerializer(TaggitSerializer, ValidatedModelSerializer): device = NestedDeviceSerializer() - cs_port = NestedConsoleServerPortSerializer(required=False, allow_null=True) + connected_endpoint = NestedConsoleServerPortSerializer(required=False, allow_null=True) tags = TagListSerializerField(required=False) class Meta: model = ConsolePort - fields = ['id', 'device', 'name', 'cs_port', 'connection_status', 'tags'] + fields = ['id', 'device', 'name', 'connected_endpoint', 'connection_status', 'tags'] class NestedConsolePortSerializer(TaggitSerializer, ValidatedModelSerializer): @@ -545,7 +545,7 @@ class NestedConsolePortSerializer(TaggitSerializer, ValidatedModelSerializer): fields = ['id', 'url', 'device', 'name', 'is_connected'] def get_is_connected(self, obj): - return obj.cs_port is not None + return obj.connected_endpoint is not None # diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 127784e83..ef4bec9cd 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -331,13 +331,13 @@ class DeviceViewSet(CustomFieldModelViewSet): # class ConsolePortViewSet(ModelViewSet): - queryset = ConsolePort.objects.select_related('device', 'cs_port__device').prefetch_related('tags') + queryset = ConsolePort.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags') serializer_class = serializers.ConsolePortSerializer filter_class = filters.ConsolePortFilter class ConsoleServerPortViewSet(ModelViewSet): - queryset = ConsoleServerPort.objects.select_related('device', 'connected_console__device').prefetch_related('tags') + queryset = ConsoleServerPort.objects.select_related('device', 'connected_endpoint__device').prefetch_related('tags') serializer_class = serializers.ConsoleServerPortSerializer filter_class = filters.ConsoleServerPortFilter @@ -399,7 +399,7 @@ class InventoryItemViewSet(ModelViewSet): # class ConsoleConnectionViewSet(ListModelMixin, GenericViewSet): - queryset = ConsolePort.objects.select_related('device', 'cs_port__device').filter(cs_port__isnull=False) + queryset = ConsolePort.objects.select_related('device', 'connected_endpoint__device').filter(connected_endpoint__isnull=False) serializer_class = serializers.ConsolePortSerializer filter_class = filters.ConsoleConnectionFilter diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 3b370654e..3b854dd61 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -803,14 +803,14 @@ class ConsoleConnectionFilter(django_filters.FilterSet): def filter_site(self, queryset, name, value): if not value.strip(): return queryset - return queryset.filter(cs_port__device__site__slug=value) + return queryset.filter(connected_endpoint__device__site__slug=value) def filter_device(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(device__name__icontains=value) | - Q(cs_port__device__name__icontains=value) + Q(connected_endpoint__device__name__icontains=value) ) diff --git a/netbox/dcim/fixtures/dcim.json b/netbox/dcim/fixtures/dcim.json index 709995f95..148ce8ca6 100644 --- a/netbox/dcim/fixtures/dcim.json +++ b/netbox/dcim/fixtures/dcim.json @@ -2151,7 +2151,7 @@ "fields": { "device": 1, "name": "Console (RE0)", - "cs_port": 27, + "connected_endpoint": 27, "connection_status": true } }, @@ -2161,7 +2161,7 @@ "fields": { "device": 1, "name": "Console (RE1)", - "cs_port": 38, + "connected_endpoint": 38, "connection_status": true } }, @@ -2171,7 +2171,7 @@ "fields": { "device": 2, "name": "Console (RE0)", - "cs_port": 5, + "connected_endpoint": 5, "connection_status": true } }, @@ -2181,7 +2181,7 @@ "fields": { "device": 2, "name": "Console (RE1)", - "cs_port": 16, + "connected_endpoint": 16, "connection_status": true } }, @@ -2191,7 +2191,7 @@ "fields": { "device": 3, "name": "Console", - "cs_port": 49, + "connected_endpoint": 49, "connection_status": true } }, @@ -2201,7 +2201,7 @@ "fields": { "device": 4, "name": "Console", - "cs_port": 48, + "connected_endpoint": 48, "connection_status": true } }, @@ -2211,7 +2211,7 @@ "fields": { "device": 5, "name": "Console", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2221,7 +2221,7 @@ "fields": { "device": 6, "name": "Console", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2231,7 +2231,7 @@ "fields": { "device": 7, "name": "Console (RE0)", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2241,7 +2241,7 @@ "fields": { "device": 7, "name": "Console (RE1)", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2251,7 +2251,7 @@ "fields": { "device": 8, "name": "Console (RE0)", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2261,7 +2261,7 @@ "fields": { "device": 8, "name": "Console (RE1)", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2271,7 +2271,7 @@ "fields": { "device": 9, "name": "Console", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2281,7 +2281,7 @@ "fields": { "device": 11, "name": "Serial", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, @@ -2291,7 +2291,7 @@ "fields": { "device": 12, "name": "Serial", - "cs_port": null, + "connected_endpoint": null, "connection_status": true } }, diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 0777d20aa..a59553b49 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1301,8 +1301,8 @@ class ConsoleConnectionCSVForm(forms.ModelForm): 'invalid_choice': 'Console server not found', } ) - cs_port = forms.CharField( - help_text='Console server port name' + connected_endpoint = forms.CharField( + help_text='Console server port' ) device = FlexibleModelChoiceField( queryset=Device.objects.all(), @@ -1322,7 +1322,7 @@ class ConsoleConnectionCSVForm(forms.ModelForm): class Meta: model = ConsolePort - fields = ['console_server', 'cs_port', 'device', 'console_port', 'connection_status'] + fields = ['console_server', 'connected_endpoint', 'device', 'console_port', 'connection_status'] def clean_console_port(self): @@ -1336,7 +1336,7 @@ class ConsoleConnectionCSVForm(forms.ModelForm): device=self.cleaned_data['device'], name=console_port_name ) # Check if the console port is already connected - if consoleport.cs_port is not None: + if consoleport.connected_endpoint is not None: raise forms.ValidationError("{} {} is already connected".format( self.cleaned_data['device'], console_port_name )) @@ -1348,28 +1348,28 @@ class ConsoleConnectionCSVForm(forms.ModelForm): self.instance = consoleport return consoleport - def clean_cs_port(self): + def clean_connected_endpoint(self): - cs_port_name = self.cleaned_data.get('cs_port') - if not self.cleaned_data.get('console_server') or not cs_port_name: + consoleserverport_name = self.cleaned_data.get('connected_endpoint') + if not self.cleaned_data.get('console_server') or not consoleserverport_name: return None try: # Retrieve console server port by name - cs_port = ConsoleServerPort.objects.get( - device=self.cleaned_data['console_server'], name=cs_port_name + consoleserverport = ConsoleServerPort.objects.get( + device=self.cleaned_data['console_server'], name=consoleserverport_name ) # Check if the console server port is already connected - if ConsolePort.objects.filter(cs_port=cs_port).count(): + if ConsolePort.objects.filter(connected_endpoint=consoleserverport).count(): raise forms.ValidationError("{} {} is already connected".format( - self.cleaned_data['console_server'], cs_port_name + self.cleaned_data['console_server'], consoleserverport_name )) except ConsoleServerPort.DoesNotExist: raise forms.ValidationError("Invalid console server port ({} {})".format( - self.cleaned_data['console_server'], cs_port_name + self.cleaned_data['console_server'], consoleserverport_name )) - return cs_port + return consoleserverport class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm): @@ -1403,7 +1403,7 @@ class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelF widget=APISelect( api_url='/api/dcim/devices/?site_id={{site}}&rack_id={{rack}}&is_console_server=True', display_field='display_name', - attrs={'filter-for': 'cs_port'} + attrs={'filter-for': 'connected_endpoint'} ) ) livesearch = forms.CharField( @@ -1415,7 +1415,7 @@ class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelF field_to_update='console_server', ) ) - cs_port = ChainedModelChoiceField( + connected_endpoint = ChainedModelChoiceField( queryset=ConsoleServerPort.objects.all(), chains=( ('device', 'console_server'), @@ -1429,9 +1429,9 @@ class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelF class Meta: model = ConsolePort - fields = ['site', 'rack', 'console_server', 'livesearch', 'cs_port', 'connection_status'] + fields = ['site', 'rack', 'console_server', 'livesearch', 'connected_endpoint', 'connection_status'] labels = { - 'cs_port': 'Port', + 'connected_endpoint': 'Port', 'connection_status': 'Status', } diff --git a/netbox/dcim/migrations/0066_cables.py b/netbox/dcim/migrations/0066_cables.py index 342590d20..d160e57d7 100644 --- a/netbox/dcim/migrations/0066_cables.py +++ b/netbox/dcim/migrations/0066_cables.py @@ -1,5 +1,3 @@ -# Generated by Django 2.0.8 on 2018-10-18 19:41 - from django.db import migrations, models import django.db.models.deletion import utilities.fields @@ -19,13 +17,13 @@ def console_connections_to_cables(apps, schema_editor): consoleserverport_type = ContentType.objects.get_for_model(ConsoleServerPort) # Create a new Cable instance from each console connection - for consoleport in ConsolePort.objects.filter(cs_port__isnull=False): + for consoleport in ConsolePort.objects.filter(connected_endpoint__isnull=False): c = Cable() # We have to assign GFK fields manually because we're inside a migration. c.endpoint_a_type = consoleport_type c.endpoint_a_id = consoleport.id c.endpoint_b_type = consoleserverport_type - c.endpoint_b_id = consoleport.cs_port_id + c.endpoint_b_id = consoleport.connected_endpoint_id c.connection_status = consoleport.connection_status c.save() @@ -87,6 +85,8 @@ class Migration(migrations.Migration): ] operations = [ + + # Create the Cable model migrations.CreateModel( name='Cable', fields=[ @@ -99,8 +99,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)), - ('endpoint_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')), - ('endpoint_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')), + ('endpoint_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')), + ('endpoint_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')), ], ), migrations.AlterUniqueTogether( @@ -108,6 +108,23 @@ class Migration(migrations.Migration): unique_together={('endpoint_b_type', 'endpoint_b_id'), ('endpoint_a_type', 'endpoint_a_id')}, ), + # Rename model fields + migrations.RenameField( + model_name='consoleport', + old_name='cs_port', + new_name='connected_endpoint' + ), + migrations.AlterField( + model_name='consoleport', + name='connected_endpoint', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='connected_endpoint', to='dcim.ConsoleServerPort'), + ), + migrations.AlterField( + model_name='consoleserverport', + name='device', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='consoleserverports', to='dcim.Device'), + ), + # Copy console/power/interface connections as Cables migrations.RunPython(console_connections_to_cables), migrations.RunPython(power_connections_to_cables), diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index bc3812c29..412079682 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -1629,11 +1629,10 @@ class ConsolePort(ComponentModel): name = models.CharField( max_length=50 ) - cs_port = models.OneToOneField( + connected_endpoint = models.OneToOneField( to='dcim.ConsoleServerPort', on_delete=models.SET_NULL, - related_name='connected_console', - verbose_name='Console server port', + related_name='connected_endpoint', blank=True, null=True ) @@ -1644,7 +1643,7 @@ class ConsolePort(ComponentModel): tags = TaggableManager() - csv_headers = ['console_server', 'cs_port', 'device', 'console_port', 'connection_status'] + csv_headers = ['console_server', 'connected_endpoint', 'device', 'console_port', 'connection_status'] class Meta: ordering = ['device', 'name'] @@ -1658,8 +1657,8 @@ class ConsolePort(ComponentModel): def to_csv(self): return ( - self.cs_port.device.identifier if self.cs_port else None, - self.cs_port.name if self.cs_port else None, + self.connected_endpoint.device.identifier if self.connected_endpoint else None, + self.connected_endpoint.name if self.connected_endpoint else None, self.device.identifier, self.name, self.get_connection_status_display(), @@ -1687,7 +1686,7 @@ class ConsoleServerPort(ComponentModel): device = models.ForeignKey( to='dcim.Device', on_delete=models.CASCADE, - related_name='cs_ports' + related_name='consoleserverports' ) name = models.CharField( max_length=50 diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index a1a2c7a4d..b5f62e792 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -622,15 +622,19 @@ class DeviceBayTable(BaseTable): # class ConsoleConnectionTable(BaseTable): - console_server = tables.LinkColumn('dcim:device', accessor=Accessor('cs_port.device'), - args=[Accessor('cs_port.device.pk')], verbose_name='Console server') - cs_port = tables.Column(verbose_name='Port') + console_server = tables.LinkColumn( + 'dcim:device', + accessor=Accessor('connected_endpoint.device'), + args=[Accessor('connected_endpoint.device.pk')], + verbose_name='Console server' + ) + connected_endpoint = tables.Column(verbose_name='Port') device = tables.LinkColumn('dcim:device', args=[Accessor('device.pk')], verbose_name='Device') name = tables.Column(verbose_name='Console port') class Meta(BaseTable.Meta): model = ConsolePort - fields = ('console_server', 'cs_port', 'device', 'name') + fields = ('console_server', 'connected_endpoint', 'device', 'name') class PowerConnectionTable(BaseTable): diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 52ee16a44..040c6dab5 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -2005,7 +2005,7 @@ class ConsolePortTest(APITestCase): data = { 'device': self.device.pk, 'name': 'Test Console Port X', - 'cs_port': consoleserverport.pk, + 'connected_endpoint': consoleserverport.pk, } url = reverse('dcim-api:consoleport-detail', kwargs={'pk': self.consoleport1.pk}) @@ -2015,7 +2015,7 @@ class ConsolePortTest(APITestCase): self.assertEqual(ConsolePort.objects.count(), 3) consoleport1 = ConsolePort.objects.get(pk=response.data['id']) self.assertEqual(consoleport1.name, data['name']) - self.assertEqual(consoleport1.cs_port_id, data['cs_port']) + self.assertEqual(consoleport1.connected_endpoint_id, data['connected_endpoint']) def test_delete_consoleport(self): @@ -2820,17 +2820,17 @@ class ConsoleConnectionTest(APITestCase): device2 = Device.objects.create( device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site ) - cs_port1 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 1') - cs_port2 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 2') - cs_port3 = ConsoleServerPort.objects.create(device=device1, name='Test CS Port 3') + consoleserverport1 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 1') + consoleserverport2 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 2') + consoleserverport3 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 3') ConsolePort.objects.create( - device=device2, cs_port=cs_port1, name='Test Console Port 1', connection_status=True + device=device2, connected_endpoint=consoleserverport1, name='Test Console Port 1', connection_status=True ) ConsolePort.objects.create( - device=device2, cs_port=cs_port2, name='Test Console Port 2', connection_status=True + device=device2, connected_endpoint=consoleserverport2, name='Test Console Port 2', connection_status=True ) ConsolePort.objects.create( - device=device2, cs_port=cs_port3, name='Test Console Port 3', connection_status=True + device=device2, connected_endpoint=consoleserverport3, name='Test Console Port 3', connection_status=True ) def test_list_consoleconnections(self): diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index a97b3a98a..bcf39f626 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -886,11 +886,11 @@ class DeviceView(View): # Console ports console_ports = natsorted( - ConsolePort.objects.filter(device=device).select_related('cs_port__device'), key=attrgetter('name') + ConsolePort.objects.filter(device=device).select_related('connected_endpoint__device'), key=attrgetter('name') ) # Console server ports - cs_ports = ConsoleServerPort.objects.filter(device=device).select_related('connected_console') + consoleserverports = ConsoleServerPort.objects.filter(device=device).select_related('connected_endpoint') # Power ports power_ports = natsorted( @@ -941,7 +941,7 @@ class DeviceView(View): return render(request, 'dcim/device.html', { 'device': device, 'console_ports': console_ports, - 'cs_ports': cs_ports, + 'consoleserverports': consoleserverports, 'power_ports': power_ports, 'power_outlets': power_outlets, 'interfaces': interfaces, @@ -1133,9 +1133,9 @@ class ConsolePortConnectView(PermissionRequiredMixin, View): consoleport.device.get_absolute_url(), escape(consoleport.device), escape(consoleport.name), - consoleport.cs_port.device.get_absolute_url(), - escape(consoleport.cs_port.device), - escape(consoleport.cs_port.name), + consoleport.connected_endpoint.device.get_absolute_url(), + escape(consoleport.connected_endpoint.device), + escape(consoleport.connected_endpoint.name), ) messages.success(request, mark_safe(msg)) @@ -1156,7 +1156,7 @@ class ConsolePortDisconnectView(PermissionRequiredMixin, View): consoleport = get_object_or_404(ConsolePort, pk=pk) form = ConfirmationForm() - if not consoleport.cs_port: + if not consoleport.connected_endpoint: messages.warning( request, "Cannot disconnect console port {}: It is not connected to anything.".format(consoleport) ) @@ -1174,18 +1174,17 @@ class ConsolePortDisconnectView(PermissionRequiredMixin, View): form = ConfirmationForm(request.POST) if form.is_valid(): - - cs_port = consoleport.cs_port - consoleport.cs_port = None + consoleserverport = consoleport.connected_endpoint + consoleport.connected_endpoint = None consoleport.connection_status = None consoleport.save() msg = 'Disconnected {} {} from {} {}'.format( consoleport.device.get_absolute_url(), escape(consoleport.device), escape(consoleport.name), - cs_port.device.get_absolute_url(), - escape(cs_port.device), - escape(cs_port.name), + consoleserverport.device.get_absolute_url(), + escape(consoleserverport.device), + escape(consoleserverport.name), ) messages.success(request, mark_safe(msg)) @@ -1264,7 +1263,7 @@ class ConsoleServerPortConnectView(PermissionRequiredMixin, View): if form.is_valid(): consoleport = form.cleaned_data['port'] - consoleport.cs_port = consoleserverport + consoleport.connected_endpoint = consoleserverport consoleport.connection_status = form.cleaned_data['connection_status'] consoleport.save() msg = 'Connected {} {} to {} {}'.format( @@ -1294,7 +1293,7 @@ class ConsoleServerPortDisconnectView(PermissionRequiredMixin, View): consoleserverport = get_object_or_404(ConsoleServerPort, pk=pk) form = ConfirmationForm() - if not hasattr(consoleserverport, 'connected_console'): + if not hasattr(consoleserverport, 'connected_endpoint'): messages.warning( request, "Cannot disconnect console server port {}: Nothing is connected to it.".format(consoleserverport) @@ -1314,8 +1313,8 @@ class ConsoleServerPortDisconnectView(PermissionRequiredMixin, View): if form.is_valid(): - consoleport = consoleserverport.connected_console - consoleport.cs_port = None + consoleport = consoleserverport.connected_endpoint + consoleport.connected_endpoint = None consoleport.connection_status = None consoleport.save() msg = 'Disconnected {} {} from {} {}'.format( @@ -1359,8 +1358,13 @@ class ConsoleServerPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnec model = ConsoleServerPort form = forms.ConsoleServerPortBulkDisconnectForm - def disconnect_objects(self, cs_ports): - return ConsolePort.objects.filter(cs_port__in=cs_ports).update(cs_port=None, connection_status=None) + def disconnect_objects(self, consoleserverports): + return ConsolePort.objects.filter( + connected_endpoint__in=consoleserverports + ).update( + connected_endpoint=None, + connection_status=None + ) class ConsoleServerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): @@ -2125,8 +2129,13 @@ class InterfaceConnectionsBulkImportView(PermissionRequiredMixin, BulkImportView # class ConsoleConnectionsListView(ObjectListView): - queryset = ConsolePort.objects.select_related('device', 'cs_port__device').filter(cs_port__isnull=False) \ - .order_by('cs_port__device__name', 'cs_port__name') + queryset = ConsolePort.objects.select_related( + 'device', 'connected_endpoint__device' + ).filter( + connected_endpoint__isnull=False + ).order_by( + 'connected_endpoint__device__name', 'connected_endpoint__name' + ) filter = filters.ConsoleConnectionFilter filter_form = forms.ConsoleConnectionFilterForm table = tables.ConsoleConnectionTable diff --git a/netbox/extras/models.py b/netbox/extras/models.py index a9c0b9ef5..5e7dbac24 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -526,10 +526,10 @@ class TopologyMap(models.Model): from dcim.models import ConsolePort # Add all console connections to the graph - console_ports = ConsolePort.objects.filter(device__in=devices, cs_port__device__in=devices) + console_ports = ConsolePort.objects.filter(device__in=devices, connected_endpoint__device__in=devices) for cp in console_ports: style = 'solid' if cp.connection_status == CONNECTION_STATUS_CONNECTED else 'dashed' - self.graph.edge(cp.cs_port.device.name, cp.device.name, style=style) + self.graph.edge(cp.connected_endpoint.device.name, cp.device.name, style=style) def add_power_connections(self, devices): diff --git a/netbox/netbox/views.py b/netbox/netbox/views.py index b2f726060..d7bb29f2e 100644 --- a/netbox/netbox/views.py +++ b/netbox/netbox/views.py @@ -167,7 +167,7 @@ class HomeView(View): 'rack_count': Rack.objects.count(), 'device_count': Device.objects.count(), 'interface_connections_count': InterfaceConnection.objects.count(), - 'console_connections_count': ConsolePort.objects.filter(cs_port__isnull=False).count(), + 'console_connections_count': ConsolePort.objects.filter(connected_endpoint__isnull=False).count(), 'power_connections_count': PowerPort.objects.filter(power_outlet__isnull=False).count(), # IPAM diff --git a/netbox/templates/dcim/consoleport_connect.html b/netbox/templates/dcim/consoleport_connect.html index 679540960..5d8596fd5 100644 --- a/netbox/templates/dcim/consoleport_connect.html +++ b/netbox/templates/dcim/consoleport_connect.html @@ -35,7 +35,7 @@ {% render_field form.console_server %} - {% render_field form.cs_port %} + {% render_field form.connected_endpoint %} {% render_field form.connection_status %} diff --git a/netbox/templates/dcim/consoleport_disconnect.html b/netbox/templates/dcim/consoleport_disconnect.html index dfd5cf2e7..f83329832 100644 --- a/netbox/templates/dcim/consoleport_disconnect.html +++ b/netbox/templates/dcim/consoleport_disconnect.html @@ -4,5 +4,5 @@ {% block title %}Disconnect console port {{ consoleport }}?{% endblock %} {% block message %} -

Are you sure you want to disconnect this console port from {{ consoleport.cs_port.device }} {{ consoleport.cs_port }}?

+

Are you sure you want to disconnect this console port from {{ consoleport.connected_endpoint.device }} {{ consoleport.connected_endpoint }}?

{% endblock %} diff --git a/netbox/templates/dcim/consoleserverport_disconnect.html b/netbox/templates/dcim/consoleserverport_disconnect.html index 5c0594464..8404f9e94 100644 --- a/netbox/templates/dcim/consoleserverport_disconnect.html +++ b/netbox/templates/dcim/consoleserverport_disconnect.html @@ -4,5 +4,5 @@ {% block title %}Disconnect {{ consoleserverport.device }} {{ consoleserverport }}?{% endblock %} {% block message %} -

Are you sure you want to disconnect {{ consoleserverport.connected_console.device }} {{ consoleserverport.connected_console }} from this port?

+

Are you sure you want to disconnect {{ consoleserverport.connected_endpoint.device }} {{ consoleserverport.connected_endpoint }} from this port?

{% endblock %} diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 50f8ebbb5..194b6ab64 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -573,7 +573,7 @@ {% endif %} {% endif %} - {% if cs_ports or device.device_type.is_console_server %} + {% if consoleserverports or device.device_type.is_console_server %} {% if perms.dcim.delete_consoleserverport %}
{% csrf_token %} @@ -594,7 +594,7 @@ - {% for csp in cs_ports %} + {% for csp in consoleserverports %} {% include 'dcim/inc/consoleserverport.html' %} {% empty %} @@ -604,7 +604,7 @@