Skip to content

Commit 0ad163e

Browse files
committed
Merge branch 'develop' into feature
2 parents 8745f8e + 9cb75e9 commit 0ad163e

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

docs/release-notes/version-3.4.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Enhancements
66

77
* [#10762](https://github.com/netbox-community/netbox/issues/10762) - Permit selection custom fields to have only one choice
8+
* [#11585](https://github.com/netbox-community/netbox/issues/11585) - Add IP address filters for services
89

910
### Bug Fixes
1011

netbox/ipam/filtersets.py

+12
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,18 @@ class ServiceFilterSet(NetBoxModelFilterSet):
923923
to_field_name='name',
924924
label=_('Virtual machine (name)'),
925925
)
926+
ipaddress_id = django_filters.ModelMultipleChoiceFilter(
927+
field_name='ipaddresses',
928+
queryset=IPAddress.objects.all(),
929+
label=_('IP address (ID)'),
930+
)
931+
ipaddress = django_filters.ModelMultipleChoiceFilter(
932+
field_name='ipaddresses__address',
933+
queryset=IPAddress.objects.all(),
934+
to_field_name='address',
935+
label=_('IP address'),
936+
)
937+
926938
port = NumericArrayFilter(
927939
field_name='ports',
928940
lookup_expr='contains'

netbox/ipam/tests/test_filtersets.py

+23
Original file line numberDiff line numberDiff line change
@@ -1420,6 +1420,19 @@ def setUpTestData(cls):
14201420
)
14211421
Device.objects.bulk_create(devices)
14221422

1423+
interface = Interface.objects.create(
1424+
device=devices[0],
1425+
name='eth0',
1426+
type=InterfaceTypeChoices.TYPE_VIRTUAL
1427+
)
1428+
interface_ct = ContentType.objects.get_for_model(Interface).pk
1429+
ip_addresses = (
1430+
IPAddress(address='192.0.2.1/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
1431+
IPAddress(address='192.0.2.2/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
1432+
IPAddress(address='192.0.2.3/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
1433+
)
1434+
IPAddress.objects.bulk_create(ip_addresses)
1435+
14231436
clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
14241437
cluster = Cluster.objects.create(type=clustertype, name='Cluster 1')
14251438

@@ -1439,6 +1452,9 @@ def setUpTestData(cls):
14391452
Service(virtual_machine=virtual_machines[2], name='Service 6', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[2003]),
14401453
)
14411454
Service.objects.bulk_create(services)
1455+
services[0].ipaddresses.add(ip_addresses[0])
1456+
services[1].ipaddresses.add(ip_addresses[1])
1457+
services[2].ipaddresses.add(ip_addresses[2])
14421458

14431459
def test_name(self):
14441460
params = {'name': ['Service 1', 'Service 2']}
@@ -1470,6 +1486,13 @@ def test_virtual_machine(self):
14701486
params = {'virtual_machine': [vms[0].name, vms[1].name]}
14711487
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
14721488

1489+
def test_ipaddress(self):
1490+
ips = IPAddress.objects.all()[:2]
1491+
params = {'ipaddress_id': [ips[0].pk, ips[1].pk]}
1492+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1493+
params = {'ipaddress': [str(ips[0].address), str(ips[1].address)]}
1494+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1495+
14731496

14741497
class L2VPNTestCase(TestCase, ChangeLoggedFilterSetTests):
14751498
queryset = L2VPN.objects.all()

0 commit comments

Comments
 (0)