1
0
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:
Jeremy Stretch
2018-10-24 14:38:44 -04:00
parent 9985f2cb82
commit 54c917beff
14 changed files with 100 additions and 100 deletions

View File

@ -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'],

View File

@ -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)
)

View File

@ -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

View File

@ -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)

View File

@ -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()

View File

@ -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

View File

@ -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'),

View File

@ -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

View File

@ -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>

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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 %}