From 0edf9b17f65636aa36275c8b35f68553226f3989 Mon Sep 17 00:00:00 2001 From: Will Irvine Date: Sat, 13 Nov 2021 13:27:49 +1300 Subject: [PATCH] Closes #7665 add new boolen for filtering assigned prefixes, adjust current filter for avaliabile prefixes to only return avaliable --- netbox/ipam/utils.py | 7 +------ netbox/ipam/views.py | 19 +++++++++++++++---- .../templates/ipam/inc/toggle_available.html | 11 +++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/netbox/ipam/utils.py b/netbox/ipam/utils.py index 0e79e7f78..888a2ad17 100644 --- a/netbox/ipam/utils.py +++ b/netbox/ipam/utils.py @@ -13,12 +13,7 @@ def add_available_prefixes(parent, prefix_list): available_prefixes = netaddr.IPSet(parent) ^ netaddr.IPSet([p.prefix for p in prefix_list]) available_prefixes = [Prefix(prefix=p, status=None) for p in available_prefixes.iter_cidrs()] - # Concatenate and sort complete list of children - prefix_list = list(prefix_list) + available_prefixes - prefix_list.sort(key=lambda p: p.prefix) - - return prefix_list - + return available_prefixes def add_available_ipaddresses(prefix, ipaddress_list, is_pool=False): """ diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index c24a80124..300f2f6d7 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -393,14 +393,24 @@ class PrefixPrefixesView(generic.ObjectView): template_name = 'ipam/prefix/prefixes.html' def get_extra_context(self, request, instance): - # Child prefixes table - child_prefixes = instance.get_child_prefixes().restrict(request.user, 'view').prefetch_related( + # Initial pull of currently assigned child prefixes + child_prefixes_assigned = instance.get_child_prefixes().restrict(request.user, 'view').prefetch_related( 'site', 'vlan', 'role', ) + # List to append filtered prefixes to + child_prefixes = [] + # Add available prefixes to the table if requested - if child_prefixes and request.GET.get('show_available', 'true') == 'true': - child_prefixes = add_available_prefixes(instance.prefix, child_prefixes) + if child_prefixes_assigned and request.GET.get('show_available', 'true') == 'true': + child_prefixes = child_prefixes + add_available_prefixes(instance.prefix, child_prefixes_assigned) + + # Add assigned prefixes to the table if requested + if child_prefixes_assigned and request.GET.get('show_assigned', 'true') == 'true': + child_prefixes = child_prefixes + list(child_prefixes_assigned) + + # Sort child prefixes after additions + child_prefixes.sort(key=lambda p: p.prefix) table = tables.PrefixTable(child_prefixes, user=request.user, exclude=('utilization',)) if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'): @@ -422,6 +432,7 @@ class PrefixPrefixesView(generic.ObjectView): 'active_tab': 'prefixes', 'first_available_prefix': instance.get_first_available_prefix(), 'show_available': request.GET.get('show_available', 'true') == 'true', + 'show_assigned': request.GET.get('show_assigned', 'true') == 'true', } diff --git a/netbox/templates/ipam/inc/toggle_available.html b/netbox/templates/ipam/inc/toggle_available.html index 234218a01..f0d286128 100644 --- a/netbox/templates/ipam/inc/toggle_available.html +++ b/netbox/templates/ipam/inc/toggle_available.html @@ -1,5 +1,16 @@ {% load helpers %} +{% if show_assigned is not None %} +
+ + Show Assigned + + + Hide Assigned + +
+{% endif %} + {% if show_available is not None %}