Skip to content

Commit 23d2cf1

Browse files
committed
Closes #9081: Add fhrpgroup_id filter for IP addresses
1 parent d11031c commit 23d2cf1

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

docs/release-notes/version-3.2.md

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
* [#5479](https://github.com/netbox-community/netbox/issues/5479) - Allow custom job timeouts for scripts & reports
88
* [#8973](https://github.com/netbox-community/netbox/issues/8973) - Display VLAN group count under site view
9+
* [#9081](https://github.com/netbox-community/netbox/issues/9081) - Add `fhrpgroup_id` filter for IP addresses
910
* [#9099](https://github.com/netbox-community/netbox/issues/9099) - Enable display of installed module serial & asset tag in module bays list
1011

1112
### Bug Fixes

netbox/ipam/filtersets.py

+5
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,11 @@ class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
535535
queryset=VMInterface.objects.all(),
536536
label='VM interface (ID)',
537537
)
538+
fhrpgroup_id = django_filters.ModelMultipleChoiceFilter(
539+
field_name='fhrpgroup',
540+
queryset=FHRPGroup.objects.all(),
541+
label='FHRP group (ID)',
542+
)
538543
assigned_to_interface = django_filters.BooleanFilter(
539544
method='_assigned_to_interface',
540545
label='Is assigned to an interface',

netbox/ipam/tests/test_filtersets.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,12 @@ def setUpTestData(cls):
771771
)
772772
VMInterface.objects.bulk_create(vminterfaces)
773773

774+
fhrp_groups = (
775+
FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, group_id=101),
776+
FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, group_id=102),
777+
)
778+
FHRPGroup.objects.bulk_create(fhrp_groups)
779+
774780
tenant_groups = (
775781
TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
776782
TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@@ -791,18 +797,22 @@ def setUpTestData(cls):
791797
IPAddress(address='10.0.0.2/24', tenant=tenants[0], vrf=vrfs[0], assigned_object=interfaces[0], status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-b'),
792798
IPAddress(address='10.0.0.3/24', tenant=tenants[1], vrf=vrfs[1], assigned_object=interfaces[1], status=IPAddressStatusChoices.STATUS_RESERVED, role=IPAddressRoleChoices.ROLE_VIP, dns_name='ipaddress-c'),
793799
IPAddress(address='10.0.0.4/24', tenant=tenants[2], vrf=vrfs[2], assigned_object=interfaces[2], status=IPAddressStatusChoices.STATUS_DEPRECATED, role=IPAddressRoleChoices.ROLE_SECONDARY, dns_name='ipaddress-d'),
800+
IPAddress(address='10.0.0.5/24', tenant=None, vrf=None, assigned_object=fhrp_groups[0], status=IPAddressStatusChoices.STATUS_ACTIVE),
794801
IPAddress(address='10.0.0.1/25', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE),
795802
IPAddress(address='2001:db8::1/64', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-a', description='foobar2'),
796803
IPAddress(address='2001:db8::2/64', tenant=tenants[0], vrf=vrfs[0], assigned_object=vminterfaces[0], status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-b'),
797804
IPAddress(address='2001:db8::3/64', tenant=tenants[1], vrf=vrfs[1], assigned_object=vminterfaces[1], status=IPAddressStatusChoices.STATUS_RESERVED, role=IPAddressRoleChoices.ROLE_VIP, dns_name='ipaddress-c'),
798805
IPAddress(address='2001:db8::4/64', tenant=tenants[2], vrf=vrfs[2], assigned_object=vminterfaces[2], status=IPAddressStatusChoices.STATUS_DEPRECATED, role=IPAddressRoleChoices.ROLE_SECONDARY, dns_name='ipaddress-d'),
806+
IPAddress(address='2001:db8::5/64', tenant=None, vrf=None, assigned_object=fhrp_groups[1], status=IPAddressStatusChoices.STATUS_ACTIVE),
799807
IPAddress(address='2001:db8::1/65', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE),
800808
)
801809
IPAddress.objects.bulk_create(ipaddresses)
802810

803811
def test_family(self):
812+
params = {'family': '4'}
813+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
804814
params = {'family': '6'}
805-
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
815+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
806816

807817
def test_dns_name(self):
808818
params = {'dns_name': ['ipaddress-a', 'ipaddress-b']}
@@ -814,9 +824,9 @@ def test_description(self):
814824

815825
def test_parent(self):
816826
params = {'parent': '10.0.0.0/24'}
817-
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
827+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
818828
params = {'parent': '2001:db8::/64'}
819-
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
829+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
820830

821831
def test_filter_address(self):
822832
# Check IPv4 and IPv6, with and without a mask
@@ -835,7 +845,7 @@ def test_filter_address(self):
835845

836846
def test_mask_length(self):
837847
params = {'mask_length': '24'}
838-
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
848+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
839849

840850
def test_vrf(self):
841851
vrfs = VRF.objects.all()[:2]
@@ -872,6 +882,11 @@ def test_vminterface(self):
872882
params = {'vminterface': ['Interface 1', 'Interface 2']}
873883
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
874884

885+
def test_fhrpgroup(self):
886+
fhrp_groups = FHRPGroup.objects.all()[:2]
887+
params = {'fhrpgroup_id': [fhrp_groups[0].pk, fhrp_groups[1].pk]}
888+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
889+
875890
def test_assigned_to_interface(self):
876891
params = {'assigned_to_interface': 'true'}
877892
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)

0 commit comments

Comments
 (0)