mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 03:56:53 -06:00
Display member interfaces when viewing VC master device
This commit is contained in:
parent
da2bff691b
commit
911ce3f047
@ -809,31 +809,49 @@ class DeviceView(View):
|
|||||||
device = get_object_or_404(Device.objects.select_related(
|
device = get_object_or_404(Device.objects.select_related(
|
||||||
'site__region', 'rack__group', 'tenant__group', 'device_role', 'platform'
|
'site__region', 'rack__group', 'tenant__group', 'device_role', 'platform'
|
||||||
), pk=pk)
|
), 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(
|
console_ports = natsorted(
|
||||||
ConsolePort.objects.filter(device=device).select_related('cs_port__device'), key=attrgetter('name')
|
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')
|
cs_ports = ConsoleServerPort.objects.filter(device=device).select_related('connected_console')
|
||||||
|
|
||||||
|
# Power ports
|
||||||
power_ports = natsorted(
|
power_ports = natsorted(
|
||||||
PowerPort.objects.filter(device=device).select_related('power_outlet__device'), key=attrgetter('name')
|
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')
|
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(
|
interfaces = Interface.objects.order_naturally(
|
||||||
device.device_type.interface_ordering
|
device.device_type.interface_ordering
|
||||||
).filter(
|
|
||||||
device=device
|
|
||||||
).select_related(
|
).select_related(
|
||||||
'connected_as_a__interface_b__device', 'connected_as_b__interface_a__device',
|
'connected_as_a__interface_b__device', 'connected_as_b__interface_a__device',
|
||||||
'circuit_termination__circuit'
|
'circuit_termination__circuit'
|
||||||
).prefetch_related('ip_addresses')
|
).filter(interfaces_filter).prefetch_related('ip_addresses')
|
||||||
|
|
||||||
|
# Device bays
|
||||||
device_bays = natsorted(
|
device_bays = natsorted(
|
||||||
DeviceBay.objects.filter(device=device).select_related('installed_device__device_type__manufacturer'),
|
DeviceBay.objects.filter(device=device).select_related('installed_device__device_type__manufacturer'),
|
||||||
key=attrgetter('name')
|
key=attrgetter('name')
|
||||||
)
|
)
|
||||||
services = Service.objects.filter(device=device)
|
|
||||||
secrets = device.secrets.all()
|
|
||||||
|
|
||||||
# Find virtual chassis memberships
|
# Services
|
||||||
vc_memberships = VCMembership.objects.filter(virtual_chassis=device.virtual_chassis).select_related('device')
|
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.
|
# Find up to ten devices in the same site with the same functional role for quick reference.
|
||||||
related_devices = Device.objects.filter(
|
related_devices = Device.objects.filter(
|
||||||
|
@ -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 }}">
|
<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 %}
|
{% if perms.dcim.change_interface or perms.dcim.delete_interface %}
|
||||||
<td class="pk">
|
<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>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user