mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 18:08:38 -06:00
Closes #11585: Add IP address filters for services
This commit is contained in:
parent
55b1549895
commit
9cb75e9834
@ -5,6 +5,7 @@
|
|||||||
### Enhancements
|
### Enhancements
|
||||||
|
|
||||||
* [#10762](https://github.com/netbox-community/netbox/issues/10762) - Permit selection custom fields to have only one choice
|
* [#10762](https://github.com/netbox-community/netbox/issues/10762) - Permit selection custom fields to have only one choice
|
||||||
|
* [#11585](https://github.com/netbox-community/netbox/issues/11585) - Add IP address filters for services
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
|
@ -923,6 +923,18 @@ class ServiceFilterSet(NetBoxModelFilterSet):
|
|||||||
to_field_name='name',
|
to_field_name='name',
|
||||||
label=_('Virtual machine (name)'),
|
label=_('Virtual machine (name)'),
|
||||||
)
|
)
|
||||||
|
ipaddress_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='ipaddresses',
|
||||||
|
queryset=IPAddress.objects.all(),
|
||||||
|
label=_('IP address (ID)'),
|
||||||
|
)
|
||||||
|
ipaddress = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='ipaddresses__address',
|
||||||
|
queryset=IPAddress.objects.all(),
|
||||||
|
to_field_name='address',
|
||||||
|
label=_('IP address'),
|
||||||
|
)
|
||||||
|
|
||||||
port = NumericArrayFilter(
|
port = NumericArrayFilter(
|
||||||
field_name='ports',
|
field_name='ports',
|
||||||
lookup_expr='contains'
|
lookup_expr='contains'
|
||||||
|
@ -1420,6 +1420,19 @@ class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
)
|
)
|
||||||
Device.objects.bulk_create(devices)
|
Device.objects.bulk_create(devices)
|
||||||
|
|
||||||
|
interface = Interface.objects.create(
|
||||||
|
device=devices[0],
|
||||||
|
name='eth0',
|
||||||
|
type=InterfaceTypeChoices.TYPE_VIRTUAL
|
||||||
|
)
|
||||||
|
interface_ct = ContentType.objects.get_for_model(Interface).pk
|
||||||
|
ip_addresses = (
|
||||||
|
IPAddress(address='192.0.2.1/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
|
||||||
|
IPAddress(address='192.0.2.2/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
|
||||||
|
IPAddress(address='192.0.2.3/24', assigned_object_type_id=interface_ct, assigned_object_id=interface.pk),
|
||||||
|
)
|
||||||
|
IPAddress.objects.bulk_create(ip_addresses)
|
||||||
|
|
||||||
clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
|
clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
|
||||||
cluster = Cluster.objects.create(type=clustertype, name='Cluster 1')
|
cluster = Cluster.objects.create(type=clustertype, name='Cluster 1')
|
||||||
|
|
||||||
@ -1439,6 +1452,9 @@ class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
Service(virtual_machine=virtual_machines[2], name='Service 6', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[2003]),
|
Service(virtual_machine=virtual_machines[2], name='Service 6', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[2003]),
|
||||||
)
|
)
|
||||||
Service.objects.bulk_create(services)
|
Service.objects.bulk_create(services)
|
||||||
|
services[0].ipaddresses.add(ip_addresses[0])
|
||||||
|
services[1].ipaddresses.add(ip_addresses[1])
|
||||||
|
services[2].ipaddresses.add(ip_addresses[2])
|
||||||
|
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
params = {'name': ['Service 1', 'Service 2']}
|
params = {'name': ['Service 1', 'Service 2']}
|
||||||
@ -1470,6 +1486,13 @@ class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
params = {'virtual_machine': [vms[0].name, vms[1].name]}
|
params = {'virtual_machine': [vms[0].name, vms[1].name]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_ipaddress(self):
|
||||||
|
ips = IPAddress.objects.all()[:2]
|
||||||
|
params = {'ipaddress_id': [ips[0].pk, ips[1].pk]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
params = {'ipaddress': [str(ips[0].address), str(ips[1].address)]}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
|
||||||
class L2VPNTestCase(TestCase, ChangeLoggedFilterSetTests):
|
class L2VPNTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||||
queryset = L2VPN.objects.all()
|
queryset = L2VPN.objects.all()
|
||||||
|
Loading…
Reference in New Issue
Block a user