Browse Source

Added virtual_chassis_id API filter for interfaces

Jeremy Stretch 7 years ago
parent
commit
67a30fdf91
1 changed files with 14 additions and 1 deletions
  1. 14 1
      netbox/dcim/filters.py

+ 14 - 1
netbox/dcim/filters.py

@@ -17,7 +17,7 @@ from .models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
     InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
-    RackReservation, RackRole, Region, Site, VCMembership,
+    RackReservation, RackRole, Region, Site, VirtualChassis, VCMembership,
 )
 
 
@@ -569,6 +569,11 @@ class InterfaceFilter(django_filters.FilterSet):
         method='_mac_address',
         label='MAC address',
     )
+    virtual_chassis_id = django_filters.NumberFilter(
+        method='_virtual_chassis_id',
+        name='pk',
+        label='Virtual chassis (ID)',
+    )
 
     class Meta:
         model = Interface
@@ -601,6 +606,14 @@ class InterfaceFilter(django_filters.FilterSet):
         except AddrFormatError:
             return queryset.none()
 
+    def _virtual_chassis_id(self, queryset, name, value):
+        try:
+            virtual_chassis = VirtualChassis.objects.get(**{name: value})
+            ordering = virtual_chassis.master.device_type.interface_ordering
+            return queryset.filter(device__vc_membership__virtual_chassis=virtual_chassis).order_naturally(ordering)
+        except VirtualChassis.DoesNotExist:
+            return queryset.none()
+
 
 class DeviceBayFilter(DeviceComponentFilterSet):