Display member interfaces when viewing VC master device

This commit is contained in:
Jeremy Stretch 2017-12-15 15:24:03 -05:00
parent da2bff691b
commit 911ce3f047
2 changed files with 29 additions and 9 deletions

View File

@ -809,31 +809,49 @@ class DeviceView(View):
device = get_object_or_404(Device.objects.select_related(
'site__region', 'rack__group', 'tenant__group', 'device_role', 'platform'
), pk=pk)
# Find virtual chassis memberships
vc_memberships = VCMembership.objects.filter(virtual_chassis=device.virtual_chassis).select_related('device')
vc_peer_ids = [vcm.device_id for vcm in vc_memberships]
# Console ports
console_ports = natsorted(
ConsolePort.objects.filter(device=device).select_related('cs_port__device'), key=attrgetter('name')
)
# Console server ports
cs_ports = ConsoleServerPort.objects.filter(device=device).select_related('connected_console')
# Power ports
power_ports = natsorted(
PowerPort.objects.filter(device=device).select_related('power_outlet__device'), key=attrgetter('name')
)
# Power outlets
power_outlets = PowerOutlet.objects.filter(device=device).select_related('connected_port')
# Interfaces
interfaces_filter = Q(device=device)
if hasattr(device, 'vc_membership') and device.vc_membership.is_master:
interfaces_filter |= Q(device_id__in=vc_peer_ids, mgmt_only=False)
interfaces = Interface.objects.order_naturally(
device.device_type.interface_ordering
).filter(
device=device
).select_related(
'connected_as_a__interface_b__device', 'connected_as_b__interface_a__device',
'circuit_termination__circuit'
).prefetch_related('ip_addresses')
).filter(interfaces_filter).prefetch_related('ip_addresses')
# Device bays
device_bays = natsorted(
DeviceBay.objects.filter(device=device).select_related('installed_device__device_type__manufacturer'),
key=attrgetter('name')
)
services = Service.objects.filter(device=device)
secrets = device.secrets.all()
# Find virtual chassis memberships
vc_memberships = VCMembership.objects.filter(virtual_chassis=device.virtual_chassis).select_related('device')
# Services
services = Service.objects.filter(device=device)
# Secrets
secrets = device.secrets.all()
# Find up to ten devices in the same site with the same functional role for quick reference.
related_devices = Device.objects.filter(

View File

@ -1,9 +1,11 @@
<tr class="interface{% if not iface.enabled %} danger{% elif iface.connection and iface.connection.connection_status or iface.circuit_termination %} success{% elif iface.connection and not iface.connection.connection_status %} info{% elif iface.is_virtual %} warning{% endif %}" id="iface_{{ iface.name }}">
{# Checkbox #}
{# Checkbox (exclude VC members) #}
{% if perms.dcim.change_interface or perms.dcim.delete_interface %}
<td class="pk">
<input name="pk" type="checkbox" value="{{ iface.pk }}" />
{% if iface.device == device %}
<input name="pk" type="checkbox" value="{{ iface.pk }}" />
{% endif %}
</td>
{% endif %}