mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 17:59:11 -06:00
Merge pull request #8573 from 991jo/asn_search_fix
Fixes 8553: Fix contacts and ASNs missing in the search dropdown and …
This commit is contained in:
commit
db52fe475a
@ -1,4 +1,5 @@
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
from circuits.filtersets import CircuitFilterSet, ProviderFilterSet, ProviderNetworkFilterSet
|
from circuits.filtersets import CircuitFilterSet, ProviderFilterSet, ProviderNetworkFilterSet
|
||||||
from circuits.models import Circuit, ProviderNetwork, Provider
|
from circuits.models import Circuit, ProviderNetwork, Provider
|
||||||
@ -26,8 +27,9 @@ from virtualization.models import Cluster, VirtualMachine
|
|||||||
from virtualization.tables import ClusterTable, VirtualMachineTable
|
from virtualization.tables import ClusterTable, VirtualMachineTable
|
||||||
|
|
||||||
SEARCH_MAX_RESULTS = 15
|
SEARCH_MAX_RESULTS = 15
|
||||||
SEARCH_TYPES = OrderedDict((
|
|
||||||
# Circuits
|
CIRCUIT_TYPES = OrderedDict(
|
||||||
|
(
|
||||||
('provider', {
|
('provider', {
|
||||||
'queryset': Provider.objects.annotate(
|
'queryset': Provider.objects.annotate(
|
||||||
count_circuits=count_related(Circuit, 'provider')
|
count_circuits=count_related(Circuit, 'provider')
|
||||||
@ -50,7 +52,12 @@ SEARCH_TYPES = OrderedDict((
|
|||||||
'table': ProviderNetworkTable,
|
'table': ProviderNetworkTable,
|
||||||
'url': 'circuits:providernetwork_list',
|
'url': 'circuits:providernetwork_list',
|
||||||
}),
|
}),
|
||||||
# DCIM
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
DCIM_TYPES = OrderedDict(
|
||||||
|
(
|
||||||
('site', {
|
('site', {
|
||||||
'queryset': Site.objects.prefetch_related('region', 'tenant'),
|
'queryset': Site.objects.prefetch_related('region', 'tenant'),
|
||||||
'filterset': SiteFilterSet,
|
'filterset': SiteFilterSet,
|
||||||
@ -123,25 +130,11 @@ SEARCH_TYPES = OrderedDict((
|
|||||||
'table': PowerFeedTable,
|
'table': PowerFeedTable,
|
||||||
'url': 'dcim:powerfeed_list',
|
'url': 'dcim:powerfeed_list',
|
||||||
}),
|
}),
|
||||||
# Virtualization
|
)
|
||||||
('cluster', {
|
)
|
||||||
'queryset': Cluster.objects.prefetch_related('type', 'group').annotate(
|
|
||||||
device_count=count_related(Device, 'cluster'),
|
IPAM_TYPES = OrderedDict(
|
||||||
vm_count=count_related(VirtualMachine, 'cluster')
|
(
|
||||||
),
|
|
||||||
'filterset': ClusterFilterSet,
|
|
||||||
'table': ClusterTable,
|
|
||||||
'url': 'virtualization:cluster_list',
|
|
||||||
}),
|
|
||||||
('virtualmachine', {
|
|
||||||
'queryset': VirtualMachine.objects.prefetch_related(
|
|
||||||
'cluster', 'tenant', 'platform', 'primary_ip4', 'primary_ip6',
|
|
||||||
),
|
|
||||||
'filterset': VirtualMachineFilterSet,
|
|
||||||
'table': VirtualMachineTable,
|
|
||||||
'url': 'virtualization:virtualmachine_list',
|
|
||||||
}),
|
|
||||||
# IPAM
|
|
||||||
('vrf', {
|
('vrf', {
|
||||||
'queryset': VRF.objects.prefetch_related('tenant'),
|
'queryset': VRF.objects.prefetch_related('tenant'),
|
||||||
'filterset': VRFFilterSet,
|
'filterset': VRFFilterSet,
|
||||||
@ -178,7 +171,11 @@ SEARCH_TYPES = OrderedDict((
|
|||||||
'table': ASNTable,
|
'table': ASNTable,
|
||||||
'url': 'ipam:asn_list',
|
'url': 'ipam:asn_list',
|
||||||
}),
|
}),
|
||||||
# Tenancy
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
TENANCY_TYPES = OrderedDict(
|
||||||
|
(
|
||||||
('tenant', {
|
('tenant', {
|
||||||
'queryset': Tenant.objects.prefetch_related('group'),
|
'queryset': Tenant.objects.prefetch_related('group'),
|
||||||
'filterset': TenantFilterSet,
|
'filterset': TenantFilterSet,
|
||||||
@ -186,9 +183,56 @@ SEARCH_TYPES = OrderedDict((
|
|||||||
'url': 'tenancy:tenant_list',
|
'url': 'tenancy:tenant_list',
|
||||||
}),
|
}),
|
||||||
('contact', {
|
('contact', {
|
||||||
'queryset': Contact.objects.prefetch_related('group', 'assignments').annotate(assignment_count=count_related(ContactAssignment, 'contact')),
|
'queryset': Contact.objects.prefetch_related('group', 'assignments').annotate(
|
||||||
|
assignment_count=count_related(ContactAssignment, 'contact')),
|
||||||
'filterset': ContactFilterSet,
|
'filterset': ContactFilterSet,
|
||||||
'table': ContactTable,
|
'table': ContactTable,
|
||||||
'url': 'tenancy:contact_list',
|
'url': 'tenancy:contact_list',
|
||||||
}),
|
}),
|
||||||
))
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
VIRTUALIZATION_TYPES = OrderedDict(
|
||||||
|
(
|
||||||
|
('cluster', {
|
||||||
|
'queryset': Cluster.objects.prefetch_related('type', 'group').annotate(
|
||||||
|
device_count=count_related(Device, 'cluster'),
|
||||||
|
vm_count=count_related(VirtualMachine, 'cluster')
|
||||||
|
),
|
||||||
|
'filterset': ClusterFilterSet,
|
||||||
|
'table': ClusterTable,
|
||||||
|
'url': 'virtualization:cluster_list',
|
||||||
|
}),
|
||||||
|
('virtualmachine', {
|
||||||
|
'queryset': VirtualMachine.objects.prefetch_related(
|
||||||
|
'cluster', 'tenant', 'platform', 'primary_ip4', 'primary_ip6',
|
||||||
|
),
|
||||||
|
'filterset': VirtualMachineFilterSet,
|
||||||
|
'table': VirtualMachineTable,
|
||||||
|
'url': 'virtualization:virtualmachine_list',
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
SEARCH_TYPE_HIERARCHY = OrderedDict(
|
||||||
|
(
|
||||||
|
("Circuits", CIRCUIT_TYPES),
|
||||||
|
("DCIM", DCIM_TYPES),
|
||||||
|
("IPAM", IPAM_TYPES),
|
||||||
|
("Tenancy", TENANCY_TYPES),
|
||||||
|
("Virtualization", VIRTUALIZATION_TYPES),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def build_search_types() -> Dict[str, Dict]:
|
||||||
|
result = dict()
|
||||||
|
|
||||||
|
for app_types in SEARCH_TYPE_HIERARCHY.values():
|
||||||
|
for name, items in app_types.items():
|
||||||
|
result[name] = items
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
SEARCH_TYPES = build_search_types()
|
||||||
|
@ -1,39 +1,24 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from utilities.forms import BootstrapMixin
|
from utilities.forms import BootstrapMixin
|
||||||
|
from netbox.constants import SEARCH_TYPE_HIERARCHY
|
||||||
|
|
||||||
OBJ_TYPE_CHOICES = (
|
|
||||||
('', 'All Objects'),
|
def build_search_choices():
|
||||||
('Circuits', (
|
result = list()
|
||||||
('provider', 'Providers'),
|
result.append(('', 'All Objects'))
|
||||||
('circuit', 'Circuits'),
|
for category, items in SEARCH_TYPE_HIERARCHY.items():
|
||||||
)),
|
subcategories = list()
|
||||||
('DCIM', (
|
for slug, obj in items.items():
|
||||||
('site', 'Sites'),
|
name = obj['queryset'].model._meta.verbose_name_plural
|
||||||
('rack', 'Racks'),
|
name = name[0].upper() + name[1:]
|
||||||
('rackreservation', 'Rack reservations'),
|
subcategories.append((slug, name))
|
||||||
('location', 'Locations'),
|
result.append((category, tuple(subcategories)))
|
||||||
('devicetype', 'Device Types'),
|
|
||||||
('device', 'Devices'),
|
return tuple(result)
|
||||||
('virtualchassis', 'Virtual chassis'),
|
|
||||||
('cable', 'Cables'),
|
|
||||||
('powerfeed', 'Power feeds'),
|
OBJ_TYPE_CHOICES = build_search_choices()
|
||||||
)),
|
|
||||||
('IPAM', (
|
|
||||||
('vrf', 'VRFs'),
|
|
||||||
('aggregate', 'Aggregates'),
|
|
||||||
('prefix', 'Prefixes'),
|
|
||||||
('ipaddress', 'IP Addresses'),
|
|
||||||
('vlan', 'VLANs'),
|
|
||||||
)),
|
|
||||||
('Tenancy', (
|
|
||||||
('tenant', 'Tenants'),
|
|
||||||
)),
|
|
||||||
('Virtualization', (
|
|
||||||
('cluster', 'Clusters'),
|
|
||||||
('virtualmachine', 'Virtual Machines'),
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def build_options():
|
def build_options():
|
||||||
|
Loading…
Reference in New Issue
Block a user