mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Renamed Cable endpoints to terminations
This commit is contained in:
@ -284,7 +284,7 @@ CONNECTION_STATUS_CHOICES = [
|
||||
]
|
||||
|
||||
# Cable endpoint types
|
||||
CABLE_ENDPOINT_TYPES = [
|
||||
CABLE_TERMINATION_TYPES = [
|
||||
'consoleport', 'consoleserverport', 'interface', 'poweroutlet', 'powerport', 'frontpanelport', 'rearpanelport',
|
||||
]
|
||||
|
||||
@ -297,7 +297,7 @@ CABLE_TYPE_CHOICES = (
|
||||
(CABLE_TYPE_FIBER, 'Fiber'),
|
||||
)
|
||||
|
||||
CABLE_ENDPOINT_TYPE_CHOICES = {
|
||||
CABLE_TERMINATION_TYPE_CHOICES = {
|
||||
# (API endpoint, human-friendly name)
|
||||
'consoleport': ('console-ports', 'Console port'),
|
||||
'consoleserverport': ('console-server-ports', 'Console server port'),
|
||||
@ -308,7 +308,7 @@ CABLE_ENDPOINT_TYPE_CHOICES = {
|
||||
'rearpanelport': ('rear-panel-ports', 'Rear panel port'),
|
||||
}
|
||||
|
||||
COMPATIBLE_ENDPOINT_TYPES = {
|
||||
COMPATIBLE_TERMINATION_TYPES = {
|
||||
'consoleport': ['consoleserverport', 'frontpanelport', 'rearpanelport'],
|
||||
'consoleserverport': ['consoleport', 'frontpanelport', 'rearpanelport'],
|
||||
'powerport': ['poweroutlet'],
|
||||
|
@ -2137,38 +2137,38 @@ class RearPanelPortBulkRenameForm(BulkRenameForm):
|
||||
#
|
||||
|
||||
class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
endpoint_b_site = forms.ModelChoiceField(
|
||||
termination_b_site = forms.ModelChoiceField(
|
||||
queryset=Site.objects.all(),
|
||||
label='Site',
|
||||
required=False,
|
||||
widget=forms.Select(
|
||||
attrs={'filter-for': 'endpoint_b_rack'}
|
||||
attrs={'filter-for': 'termination_b_rack'}
|
||||
)
|
||||
)
|
||||
endpoint_b_rack = ChainedModelChoiceField(
|
||||
termination_b_rack = ChainedModelChoiceField(
|
||||
queryset=Rack.objects.all(),
|
||||
chains=(
|
||||
('site', 'endpoint_b_site'),
|
||||
('site', 'termination_b_site'),
|
||||
),
|
||||
label='Rack',
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/racks/?site_id={{endpoint_b_site}}',
|
||||
attrs={'filter-for': 'endpoint_b_device', 'nullable': 'true'}
|
||||
api_url='/api/dcim/racks/?site_id={{termination_b_site}}',
|
||||
attrs={'filter-for': 'termination_b_device', 'nullable': 'true'}
|
||||
)
|
||||
)
|
||||
endpoint_b_device = ChainedModelChoiceField(
|
||||
termination_b_device = ChainedModelChoiceField(
|
||||
queryset=Device.objects.all(),
|
||||
chains=(
|
||||
('site', 'endpoint_b_site'),
|
||||
('rack', 'endpoint_b_rack'),
|
||||
('site', 'termination_b_site'),
|
||||
('rack', 'termination_b_rack'),
|
||||
),
|
||||
label='Device',
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/devices/?site_id={{endpoint_b_site}}&rack_id={{endpoint_b_rack}}',
|
||||
api_url='/api/dcim/devices/?site_id={termination_b_site}}&rack_id={{termination_b_rack}}',
|
||||
display_field='display_name',
|
||||
attrs={'filter-for': 'endpoint_b_id'}
|
||||
attrs={'filter-for': 'termination_b_id'}
|
||||
)
|
||||
)
|
||||
livesearch = forms.CharField(
|
||||
@ -2177,20 +2177,20 @@ class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
widget=Livesearch(
|
||||
query_key='q',
|
||||
query_url='dcim-api:device-list',
|
||||
field_to_update='endpoint_b_device'
|
||||
field_to_update='termination_b_device'
|
||||
)
|
||||
)
|
||||
endpoint_b_type = forms.ModelChoiceField(
|
||||
termination_b_type = forms.ModelChoiceField(
|
||||
queryset=ContentType.objects.all(),
|
||||
label='Type',
|
||||
widget=ContentTypeSelect(
|
||||
attrs={'filter-for': 'endpoint_b_id'}
|
||||
attrs={'filter-for': 'termination_b_id'}
|
||||
)
|
||||
)
|
||||
endpoint_b_id = forms.IntegerField(
|
||||
termination_b_id = forms.IntegerField(
|
||||
label='Name',
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/{{endpoint_b_type}}s/?device_id={{endpoint_b_device}}',
|
||||
api_url='/api/dcim/{{termination_b_type}}s/?device_id={{termination_b_device}}',
|
||||
disabled_indicator='is_connected'
|
||||
)
|
||||
)
|
||||
@ -2198,17 +2198,17 @@ class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
class Meta:
|
||||
model = Cable
|
||||
fields = [
|
||||
'endpoint_b_site', 'endpoint_b_rack', 'endpoint_b_device', 'livesearch', 'endpoint_b_type',
|
||||
'endpoint_b_id', 'status', 'label',
|
||||
'termination_b_site', 'termination_b_rack', 'termination_b_device', 'livesearch', 'termination_b_type',
|
||||
'termination_b_id', 'status', 'label',
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(CableForm, self).__init__(*args, **kwargs)
|
||||
|
||||
# Define available types for endpoint B based on the type of endpoint A
|
||||
endpoint_a_type = self.instance.endpoint_a._meta.model_name
|
||||
self.fields['endpoint_b_type'].queryset = ContentType.objects.filter(
|
||||
model__in=COMPATIBLE_ENDPOINT_TYPES.get(endpoint_a_type)
|
||||
termination_a_type = self.instance.termination_a._meta.model_name
|
||||
self.fields['termination_b_type'].queryset = ContentType.objects.filter(
|
||||
model__in=COMPATIBLE_TERMINATION_TYPES.get(termination_a_type)
|
||||
)
|
||||
|
||||
|
||||
|
@ -21,14 +21,14 @@ def console_connections_to_cables(apps, schema_editor):
|
||||
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.connected_endpoint_id
|
||||
c.termination_a_type = consoleport_type
|
||||
c.termination_a_id = consoleport.id
|
||||
c.termination_b_type = consoleserverport_type
|
||||
c.termination_b_id = consoleport.connected_endpoint_id
|
||||
c.connection_status = consoleport.connection_status
|
||||
c.save()
|
||||
|
||||
cable_count = Cable.objects.filter(endpoint_a_type=consoleport_type).count()
|
||||
cable_count = Cable.objects.filter(termination_a_type=consoleport_type).count()
|
||||
print("{} cables created".format(cable_count))
|
||||
|
||||
|
||||
@ -50,14 +50,14 @@ def power_connections_to_cables(apps, schema_editor):
|
||||
for powerport in PowerPort.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 = powerport_type
|
||||
c.endpoint_a_id = powerport.id
|
||||
c.endpoint_b_type = poweroutlet_type
|
||||
c.endpoint_b_id = powerport.connected_endpoint_id
|
||||
c.termination_a_type = powerport_type
|
||||
c.termination_a_id = powerport.id
|
||||
c.termination_b_type = poweroutlet_type
|
||||
c.termination_b_id = powerport.connected_endpoint_id
|
||||
c.connection_status = powerport.connection_status
|
||||
c.save()
|
||||
|
||||
cable_count = Cable.objects.filter(endpoint_a_type=powerport_type).count()
|
||||
cable_count = Cable.objects.filter(termination_a_type=powerport_type).count()
|
||||
print("{} cables created".format(cable_count))
|
||||
|
||||
|
||||
@ -78,10 +78,10 @@ def interface_connections_to_cables(apps, schema_editor):
|
||||
for conn in InterfaceConnection.objects.all():
|
||||
c = Cable()
|
||||
# We have to assign GFK fields manually because we're inside a migration.
|
||||
c.endpoint_a_type = interface_type
|
||||
c.endpoint_a_id = conn.interface_a_id
|
||||
c.endpoint_b_type = interface_type
|
||||
c.endpoint_b_id = conn.interface_b_id
|
||||
c.termination_a_type = interface_type
|
||||
c.termination_a_id = conn.interface_a_id
|
||||
c.termination_b_type = interface_type
|
||||
c.termination_b_id = conn.interface_b_id
|
||||
c.connection_status = conn.connection_status
|
||||
c.save()
|
||||
|
||||
@ -96,7 +96,7 @@ def interface_connections_to_cables(apps, schema_editor):
|
||||
connection_status=conn.connection_status
|
||||
)
|
||||
|
||||
cable_count = Cable.objects.filter(endpoint_a_type=interface_type).count()
|
||||
cable_count = Cable.objects.filter(termination_a_type=interface_type).count()
|
||||
print("{} cables created".format(cable_count))
|
||||
|
||||
|
||||
@ -117,19 +117,19 @@ class Migration(migrations.Migration):
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
('endpoint_a_id', models.PositiveIntegerField()),
|
||||
('endpoint_b_id', models.PositiveIntegerField()),
|
||||
('termination_a_id', models.PositiveIntegerField()),
|
||||
('termination_b_id', models.PositiveIntegerField()),
|
||||
('type', models.PositiveSmallIntegerField(blank=True, null=True)),
|
||||
('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')),
|
||||
('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')),
|
||||
],
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='cable',
|
||||
unique_together={('endpoint_b_type', 'endpoint_b_id'), ('endpoint_a_type', 'endpoint_a_id')},
|
||||
unique_together={('termination_b_type', 'termination_b_id'), ('termination_a_type', 'termination_a_id')},
|
||||
),
|
||||
|
||||
# Alter console port models
|
||||
|
@ -2327,27 +2327,27 @@ class Cable(ChangeLoggedModel):
|
||||
"""
|
||||
A physical connection between two endpoints.
|
||||
"""
|
||||
endpoint_a_type = models.ForeignKey(
|
||||
termination_a_type = models.ForeignKey(
|
||||
to=ContentType,
|
||||
limit_choices_to={'model__in': CABLE_ENDPOINT_TYPES},
|
||||
limit_choices_to={'model__in': CABLE_TERMINATION_TYPES},
|
||||
on_delete=models.PROTECT,
|
||||
related_name='+'
|
||||
)
|
||||
endpoint_a_id = models.PositiveIntegerField()
|
||||
endpoint_a = GenericForeignKey(
|
||||
ct_field='endpoint_a_type',
|
||||
fk_field='endpoint_a_id'
|
||||
termination_a_id = models.PositiveIntegerField()
|
||||
termination_a = GenericForeignKey(
|
||||
ct_field='termination_a_type',
|
||||
fk_field='termination_a_id'
|
||||
)
|
||||
endpoint_b_type = models.ForeignKey(
|
||||
termination_b_type = models.ForeignKey(
|
||||
to=ContentType,
|
||||
limit_choices_to={'model__in': CABLE_ENDPOINT_TYPES},
|
||||
limit_choices_to={'model__in': CABLE_TERMINATION_TYPES},
|
||||
on_delete=models.PROTECT,
|
||||
related_name='+'
|
||||
)
|
||||
endpoint_b_id = models.PositiveIntegerField()
|
||||
endpoint_b = GenericForeignKey(
|
||||
ct_field='endpoint_b_type',
|
||||
fk_field='endpoint_b_id'
|
||||
termination_b_id = models.PositiveIntegerField()
|
||||
termination_b = GenericForeignKey(
|
||||
ct_field='termination_b_type',
|
||||
fk_field='termination_b_id'
|
||||
)
|
||||
type = models.PositiveSmallIntegerField(
|
||||
choices=CABLE_TYPE_CHOICES,
|
||||
@ -2368,8 +2368,8 @@ class Cable(ChangeLoggedModel):
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
('endpoint_a_type', 'endpoint_a_id'),
|
||||
('endpoint_b_type', 'endpoint_b_id'),
|
||||
('termination_a_type', 'termination_a_id'),
|
||||
('termination_b_type', 'termination_b_id'),
|
||||
)
|
||||
|
||||
# TODO: This should follow all cables in a path
|
||||
@ -2377,4 +2377,4 @@ class Cable(ChangeLoggedModel):
|
||||
"""
|
||||
Return the endpoints connected by this cable path.
|
||||
"""
|
||||
return (self.endpoint_a, self.endpoint_b)
|
||||
return (self.termination_a, self.termination_b)
|
||||
|
@ -26,11 +26,11 @@ def update_connected_endpoints(instance, **kwargs):
|
||||
"""
|
||||
When a Cable is saved, update its connected endpoints.
|
||||
"""
|
||||
endpoint_a, endpoint_b = instance.get_path_endpoints()
|
||||
endpoint_a.connected_endpoint = endpoint_b
|
||||
endpoint_a.save()
|
||||
endpoint_b.connected_endpoint = endpoint_a
|
||||
endpoint_b.save()
|
||||
termination_a, termination_b = instance.get_path_endpoints()
|
||||
termination_a.connected_endpoint = termination_b
|
||||
termination_a.save()
|
||||
termination_b.connected_endpoint = termination_a
|
||||
termination_b.save()
|
||||
|
||||
|
||||
@receiver(post_delete, sender=Cable)
|
||||
@ -38,8 +38,8 @@ def nullify_connected_endpoints(instance, **kwargs):
|
||||
"""
|
||||
When a Cable is deleted, nullify its connected endpoints.
|
||||
"""
|
||||
endpoint_a, endpoint_b = instance.get_path_endpoints()
|
||||
endpoint_a.connected_endpoint = None
|
||||
endpoint_a.save()
|
||||
endpoint_b.connected_endpoint = None
|
||||
endpoint_b.save()
|
||||
termination_a, termination_b = instance.get_path_endpoints()
|
||||
termination_a.connected_endpoint = None
|
||||
termination_a.save()
|
||||
termination_b.connected_endpoint = None
|
||||
termination_b.save()
|
||||
|
@ -623,22 +623,22 @@ class DeviceBayTable(BaseTable):
|
||||
class CableTable(BaseTable):
|
||||
device_a = tables.LinkColumn(
|
||||
viewname='dcim:device',
|
||||
accessor=Accessor('endpoint_a.device'),
|
||||
args=[Accessor('endpoint_a.device.pk')],
|
||||
accessor=Accessor('termination_a.device'),
|
||||
args=[Accessor('termination_a.device.pk')],
|
||||
verbose_name='Device A'
|
||||
)
|
||||
termination_a = tables.Column(
|
||||
accessor=Accessor('endpoint_a.name'),
|
||||
accessor=Accessor('termination_a.name'),
|
||||
verbose_name='Component'
|
||||
)
|
||||
device_b = tables.LinkColumn(
|
||||
viewname='dcim:device',
|
||||
accessor=Accessor('endpoint_b.device'),
|
||||
args=[Accessor('endpoint_b.device.pk')],
|
||||
accessor=Accessor('termination_b.device'),
|
||||
args=[Accessor('termination_b.device.pk')],
|
||||
verbose_name='Device B'
|
||||
)
|
||||
termination_b = tables.Column(
|
||||
accessor=Accessor('endpoint_b.name'),
|
||||
accessor=Accessor('termination_b.name'),
|
||||
verbose_name='Component'
|
||||
)
|
||||
# django-tables2 adds CSS `class="label"` which causes rendering issues
|
||||
|
@ -162,7 +162,7 @@ urlpatterns = [
|
||||
url(r'^devices/(?P<pk>\d+)/console-ports/add/$', views.ConsolePortCreateView.as_view(), name='consoleport_add'),
|
||||
url(r'^devices/(?P<pk>\d+)/console-ports/delete/$', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'),
|
||||
# url(r'^console-ports/(?P<pk>\d+)/connect/$', views.ConsolePortConnectView.as_view(), name='consoleport_connect'),
|
||||
url(r'^console-ports/(?P<endpoint_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='consoleport_connect', kwargs={'endpoint_a_type': ConsolePort}),
|
||||
url(r'^console-ports/(?P<termination_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='consoleport_connect', kwargs={'termination_a_type': ConsolePort}),
|
||||
url(r'^console-ports/(?P<pk>\d+)/disconnect/$', views.ConsolePortDisconnectView.as_view(), name='consoleport_disconnect'),
|
||||
url(r'^console-ports/(?P<pk>\d+)/edit/$', views.ConsolePortEditView.as_view(), name='consoleport_edit'),
|
||||
url(r'^console-ports/(?P<pk>\d+)/delete/$', views.ConsolePortDeleteView.as_view(), name='consoleport_delete'),
|
||||
@ -173,7 +173,7 @@ urlpatterns = [
|
||||
url(r'^devices/(?P<pk>\d+)/console-server-ports/disconnect/$', views.ConsoleServerPortBulkDisconnectView.as_view(), name='consoleserverport_bulk_disconnect'),
|
||||
url(r'^devices/(?P<pk>\d+)/console-server-ports/delete/$', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'),
|
||||
# url(r'^console-server-ports/(?P<pk>\d+)/connect/$', views.ConsoleServerPortConnectView.as_view(), name='consoleserverport_connect'),
|
||||
url(r'^console-server-ports/(?P<endpoint_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='consoleserverport_connect', kwargs={'endpoint_a_type': ConsoleServerPort}),
|
||||
url(r'^console-server-ports/(?P<termination_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='consoleserverport_connect', kwargs={'termination_a_type': ConsoleServerPort}),
|
||||
url(r'^console-server-ports/(?P<pk>\d+)/disconnect/$', views.ConsoleServerPortDisconnectView.as_view(), name='consoleserverport_disconnect'),
|
||||
url(r'^console-server-ports/(?P<pk>\d+)/edit/$', views.ConsoleServerPortEditView.as_view(), name='consoleserverport_edit'),
|
||||
url(r'^console-server-ports/(?P<pk>\d+)/delete/$', views.ConsoleServerPortDeleteView.as_view(), name='consoleserverport_delete'),
|
||||
@ -184,7 +184,7 @@ urlpatterns = [
|
||||
url(r'^devices/(?P<pk>\d+)/power-ports/add/$', views.PowerPortCreateView.as_view(), name='powerport_add'),
|
||||
url(r'^devices/(?P<pk>\d+)/power-ports/delete/$', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'),
|
||||
# url(r'^power-ports/(?P<pk>\d+)/connect/$', views.PowerPortConnectView.as_view(), name='powerport_connect'),
|
||||
url(r'^power-ports/(?P<endpoint_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='powerport_connect', kwargs={'endpoint_a_type': PowerPort}),
|
||||
url(r'^power-ports/(?P<termination_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='powerport_connect', kwargs={'termination_a_type': PowerPort}),
|
||||
url(r'^power-ports/(?P<pk>\d+)/disconnect/$', views.PowerPortDisconnectView.as_view(), name='powerport_disconnect'),
|
||||
url(r'^power-ports/(?P<pk>\d+)/edit/$', views.PowerPortEditView.as_view(), name='powerport_edit'),
|
||||
url(r'^power-ports/(?P<pk>\d+)/delete/$', views.PowerPortDeleteView.as_view(), name='powerport_delete'),
|
||||
@ -195,7 +195,7 @@ urlpatterns = [
|
||||
url(r'^devices/(?P<pk>\d+)/power-outlets/disconnect/$', views.PowerOutletBulkDisconnectView.as_view(), name='poweroutlet_bulk_disconnect'),
|
||||
url(r'^devices/(?P<pk>\d+)/power-outlets/delete/$', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'),
|
||||
# url(r'^power-outlets/(?P<pk>\d+)/connect/$', views.PowerOutletConnectView.as_view(), name='poweroutlet_connect'),
|
||||
url(r'^power-outlets/(?P<endpoint_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='poweroutlet_connect', kwargs={'endpoint_a_type': PowerOutlet}),
|
||||
url(r'^power-outlets/(?P<termination_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='poweroutlet_connect', kwargs={'termination_a_type': PowerOutlet}),
|
||||
url(r'^power-outlets/(?P<pk>\d+)/disconnect/$', views.PowerOutletDisconnectView.as_view(), name='poweroutlet_disconnect'),
|
||||
url(r'^power-outlets/(?P<pk>\d+)/edit/$', views.PowerOutletEditView.as_view(), name='poweroutlet_edit'),
|
||||
url(r'^power-outlets/(?P<pk>\d+)/delete/$', views.PowerOutletDeleteView.as_view(), name='poweroutlet_delete'),
|
||||
@ -207,7 +207,7 @@ urlpatterns = [
|
||||
url(r'^devices/(?P<pk>\d+)/interfaces/edit/$', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'),
|
||||
url(r'^devices/(?P<pk>\d+)/interfaces/disconnect/$', views.InterfaceBulkDisconnectView.as_view(), name='interface_bulk_disconnect'),
|
||||
url(r'^devices/(?P<pk>\d+)/interfaces/delete/$', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'),
|
||||
url(r'^interfaces/(?P<endpoint_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='interface_connect', kwargs={'endpoint_a_type': Interface}),
|
||||
url(r'^interfaces/(?P<termination_a_id>\d+)/connect/$', views.CableCreateView.as_view(), name='interface_connect', kwargs={'termination_a_type': Interface}),
|
||||
url(r'^interfaces/(?P<pk>\d+)/$', views.InterfaceView.as_view(), name='interface'),
|
||||
url(r'^interfaces/(?P<pk>\d+)/edit/$', views.InterfaceEditView.as_view(), name='interface_edit'),
|
||||
url(r'^interfaces/(?P<pk>\d+)/assign-vlans/$', views.InterfaceAssignVLANsView.as_view(), name='interface_assign_vlans'),
|
||||
|
@ -2015,7 +2015,7 @@ class DeviceBulkAddDeviceBayView(PermissionRequiredMixin, BulkComponentCreateVie
|
||||
|
||||
class CableListView(ObjectListView):
|
||||
queryset = Cable.objects.prefetch_related(
|
||||
'endpoint_a__device', 'endpoint_b__device'
|
||||
'termination_a__device', 'termination_b__device'
|
||||
)
|
||||
# filter = filters.CableFilter
|
||||
# filter_form = forms.CableFilterForm
|
||||
@ -2032,9 +2032,9 @@ class CableCreateView(PermissionRequiredMixin, ObjectEditView):
|
||||
def alter_obj(self, obj, request, url_args, url_kwargs):
|
||||
|
||||
# Retrieve endpoint A based on the given type and PK
|
||||
endpoint_a_type = url_kwargs.get('endpoint_a_type')
|
||||
endpoint_a_id = url_kwargs.get('endpoint_a_id')
|
||||
obj.endpoint_a = endpoint_a_type.objects.get(pk=endpoint_a_id)
|
||||
termination_a_type = url_kwargs.get('termination_a_type')
|
||||
termination_a_id = url_kwargs.get('termination_a_id')
|
||||
obj.termination_a = termination_a_type.objects.get(pk=termination_a_id)
|
||||
|
||||
return obj
|
||||
|
||||
|
@ -20,8 +20,8 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% with endpoint_a=form.instance.endpoint_a %}
|
||||
<h3>{% block title %}Connect {{ endpoint_a.device }} {{ endpoint_a }}{% endblock %}</h3>
|
||||
{% with termination_a=form.instance.termination_a %}
|
||||
<h3>{% block title %}Connect {{ termination_a.device }} {{ termination_a }}{% endblock %}</h3>
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<div class="panel panel-default">
|
||||
@ -32,25 +32,25 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-3 control-label required">Site</label>
|
||||
<div class="col-md-9">
|
||||
<p class="form-control-static">{{ endpoint_a.device.site }}</p>
|
||||
<p class="form-control-static">{{ termination_a.device.site }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-md-3 control-label required">Rack</label>
|
||||
<div class="col-md-9">
|
||||
<p class="form-control-static">{{ endpoint_a.device.rack|default:"None" }}</p>
|
||||
<p class="form-control-static">{{ termination_a.device.rack|default:"None" }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-md-3 control-label required">Device</label>
|
||||
<div class="col-md-9">
|
||||
<p class="form-control-static">{{ endpoint_a.device }}</p>
|
||||
<p class="form-control-static">{{ termination_a.device }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-md-3 control-label required">Name</label>
|
||||
<div class="col-md-9">
|
||||
<p class="form-control-static">{{ endpoint_a }}</p>
|
||||
<p class="form-control-static">{{ termination_a }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -74,13 +74,13 @@
|
||||
{% render_field form.livesearch %}
|
||||
</div>
|
||||
<div class="tab-pane" id="select">
|
||||
{% render_field form.endpoint_b_site %}
|
||||
{% render_field form.endpoint_b_rack %}
|
||||
{% render_field form.endpoint_b_device %}
|
||||
{% render_field form.termination_b_site %}
|
||||
{% render_field form.termination_b_rack %}
|
||||
{% render_field form.termination_b_device %}
|
||||
</div>
|
||||
</div>
|
||||
{% render_field form.endpoint_b_type %}
|
||||
{% render_field form.endpoint_b_id %}
|
||||
{% render_field form.termination_b_type %}
|
||||
{% render_field form.termination_b_id %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,7 +30,7 @@
|
||||
<i class="glyphicon glyphicon-resize-full" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'dcim:consoleport_connect' endpoint_a_id=cp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<a href="{% url 'dcim:consoleport_connect' termination_a_id=cp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<i class="glyphicon glyphicon-resize-small" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -35,7 +35,7 @@
|
||||
<i class="glyphicon glyphicon-resize-full" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'dcim:consoleserverport_connect' endpoint_a_id=csp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<a href="{% url 'dcim:consoleserverport_connect' termination_a_id=csp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<i class="glyphicon glyphicon-resize-small" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -106,7 +106,7 @@
|
||||
<i class="glyphicon glyphicon-resize-full" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'dcim:interface_connect' endpoint_a_id=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-success btn-xs" title="Connect">
|
||||
<a href="{% url 'dcim:interface_connect' termination_a_id=device.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-success btn-xs" title="Connect">
|
||||
<i class="glyphicon glyphicon-resize-small" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -35,7 +35,7 @@
|
||||
<i class="glyphicon glyphicon-resize-full" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'dcim:poweroutlet_connect' endpoint_a_id=po.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<a href="{% url 'dcim:poweroutlet_connect' termination_a_id=po.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<i class="glyphicon glyphicon-resize-small" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -30,7 +30,7 @@
|
||||
<i class="glyphicon glyphicon-resize-full" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'dcim:powerport_connect' endpoint_a_id=pp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<a href="{% url 'dcim:powerport_connect' termination_a_id=pp.pk %}" title="Connect" class="btn btn-success btn-xs">
|
||||
<i class="glyphicon glyphicon-resize-small" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
Reference in New Issue
Block a user