From 19c6f95f625a13b2449fa680dd0887b557f88fba Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 17 Oct 2022 12:52:46 -0400 Subject: [PATCH] Add indexers for remaining models --- netbox/circuits/search.py | 2 +- netbox/dcim/search.py | 152 +++++++++++++++++++++++++++++++- netbox/extras/search.py | 10 +-- netbox/ipam/search.py | 118 +++++++++++++++++++------ netbox/tenancy/search.py | 48 +++++++--- netbox/virtualization/search.py | 48 +++++++--- netbox/wireless/search.py | 26 ++++-- 7 files changed, 342 insertions(+), 62 deletions(-) diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index 7185043af..ee46ace30 100644 --- a/netbox/circuits/search.py +++ b/netbox/circuits/search.py @@ -1,6 +1,6 @@ -from circuits import filtersets, models from netbox.search import SearchIndex, register_search from utilities.utils import count_related +from . import filtersets, models @register_search() diff --git a/netbox/dcim/search.py b/netbox/dcim/search.py index 838a5a9d9..3333f9b2d 100644 --- a/netbox/dcim/search.py +++ b/netbox/dcim/search.py @@ -1,6 +1,6 @@ -from dcim import filtersets, models from netbox.search import SearchIndex, register_search from utilities.utils import count_related +from . import filtersets, models @register_search() @@ -13,6 +13,28 @@ class CableIndex(SearchIndex): filterset = filtersets.CableFilterSet +@register_search() +class ConsolePortIndex(SearchIndex): + model = models.ConsolePort + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ('speed', 2000), + ) + + +@register_search() +class ConsoleServerPortIndex(SearchIndex): + model = models.ConsoleServerPort + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ('speed', 2000), + ) + + @register_search() class DeviceIndex(SearchIndex): model = models.Device @@ -35,6 +57,16 @@ class DeviceIndex(SearchIndex): filterset = filtersets.DeviceFilterSet +@register_search() +class DeviceBayIndex(SearchIndex): + model = models.DeviceBay + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ) + + @register_search() class DeviceRoleIndex(SearchIndex): model = models.DeviceRole @@ -59,6 +91,43 @@ class DeviceTypeIndex(SearchIndex): filterset = filtersets.DeviceTypeFilterSet +@register_search() +class FrontPortIndex(SearchIndex): + model = models.FrontPort + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ) + + +@register_search() +class InterfaceIndex(SearchIndex): + model = models.Interface + fields = ( + ('name', 100), + ('label', 200), + ('mac_address', 300), + ('wwn', 300), + ('description', 500), + ('mtu', 2000), + ('speed', 2000), + ) + + +@register_search() +class InventoryItemIndex(SearchIndex): + model = models.InventoryItem + fields = ( + ('asset_tag', 50), + ('serial', 60), + ('name', 100), + ('label', 200), + ('description', 500), + ('part_id', 2000), + ) + + @register_search() class LocationIndex(SearchIndex): model = models.Location @@ -79,6 +148,16 @@ class LocationIndex(SearchIndex): filterset = filtersets.LocationFilterSet +@register_search() +class ManufacturerIndex(SearchIndex): + model = models.Manufacturer + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + @register_search() class ModuleIndex(SearchIndex): model = models.Module @@ -95,6 +174,16 @@ class ModuleIndex(SearchIndex): filterset = filtersets.ModuleFilterSet +@register_search() +class ModuleBayIndex(SearchIndex): + model = models.ModuleBay + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ) + + @register_search() class ModuleTypeIndex(SearchIndex): model = models.ModuleType @@ -109,6 +198,17 @@ class ModuleTypeIndex(SearchIndex): filterset = filtersets.ModuleTypeFilterSet +@register_search() +class PlatformIndex(SearchIndex): + model = models.Platform + fields = ( + ('name', 100), + ('slug', 110), + ('napalm_driver', 300), + ('description', 500), + ) + + @register_search() class PowerFeedIndex(SearchIndex): model = models.PowerFeed @@ -120,6 +220,36 @@ class PowerFeedIndex(SearchIndex): filterset = filtersets.PowerFeedFilterSet +@register_search() +class PowerOutletIndex(SearchIndex): + model = models.PowerOutlet + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ) + + +@register_search() +class PowerPanelIndex(SearchIndex): + model = models.PowerPanel + fields = ( + ('name', 100), + ) + + +@register_search() +class PowerPortIndex(SearchIndex): + model = models.PowerPort + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ('maximum_draw', 2000), + ('allocated_draw', 2000), + ) + + @register_search() class RackIndex(SearchIndex): model = models.Rack @@ -146,6 +276,26 @@ class RackReservationIndex(SearchIndex): filterset = filtersets.RackReservationFilterSet +@register_search() +class RackRoleIndex(SearchIndex): + model = models.RackRole + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + +@register_search() +class RearPortIndex(SearchIndex): + model = models.RearPort + fields = ( + ('name', 100), + ('label', 200), + ('description', 500), + ) + + @register_search() class RegionIndex(SearchIndex): model = models.Region diff --git a/netbox/extras/search.py b/netbox/extras/search.py index 7eea11273..c60f64a77 100644 --- a/netbox/extras/search.py +++ b/netbox/extras/search.py @@ -1,15 +1,13 @@ -import extras.filtersets -import extras.tables -from extras.models import JournalEntry from netbox.search import SearchIndex, register_search +from . import filtersets, models @register_search() class JournalEntryIndex(SearchIndex): - model = JournalEntry + model = models.JournalEntry fields = ( ('comments', 5000), ) - queryset = JournalEntry.objects.prefetch_related('assigned_object', 'created_by') - filterset = extras.filtersets.JournalEntryFilterSet + queryset = models.JournalEntry.objects.prefetch_related('assigned_object', 'created_by') + filterset = filtersets.JournalEntryFilterSet category = 'Journal' diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py index 254d85869..b7a2a3eff 100644 --- a/netbox/ipam/search.py +++ b/netbox/ipam/search.py @@ -1,87 +1,155 @@ -import ipam.filtersets -import ipam.tables -from ipam.models import ASN, VLAN, VRF, Aggregate, IPAddress, Prefix, Service +from . import filtersets, models from netbox.search import SearchIndex, register_search @register_search() class AggregateIndex(SearchIndex): - model = Aggregate + model = models.Aggregate fields = ( ('prefix', 100), ('description', 500), ('date_added', 2000), ) - queryset = Aggregate.objects.prefetch_related('rir') - filterset = ipam.filtersets.AggregateFilterSet + queryset = models.Aggregate.objects.prefetch_related('rir') + filterset = filtersets.AggregateFilterSet @register_search() class ASNIndex(SearchIndex): - model = ASN + model = models.ASN fields = ( ('asn', 100), ('description', 500), ) - queryset = ASN.objects.prefetch_related('rir', 'tenant', 'tenant__group') - filterset = ipam.filtersets.ASNFilterSet + queryset = models.ASN.objects.prefetch_related('rir', 'tenant', 'tenant__group') + filterset = filtersets.ASNFilterSet + + +@register_search() +class FHRPGroupIndex(SearchIndex): + model = models.FHRPGroup + fields = ( + ('name', 100), + ('group_id', 2000), + ('description', 500), + ) @register_search() class IPAddressIndex(SearchIndex): - model = IPAddress + model = models.IPAddress fields = ( ('address', 100), ('dns_name', 300), ('description', 500), ) - queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant', 'tenant__group') - filterset = ipam.filtersets.IPAddressFilterSet + queryset = models.IPAddress.objects.prefetch_related('vrf__tenant', 'tenant', 'tenant__group') + filterset = filtersets.IPAddressFilterSet + + +@register_search() +class IPRangeIndex(SearchIndex): + model = models.IPRange + fields = ( + ('start_address', 100), + ('end_address', 300), + ('description', 500), + ) + + +@register_search() +class L2VPNIndex(SearchIndex): + model = models.L2VPN + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) @register_search() class PrefixIndex(SearchIndex): - model = Prefix + model = models.Prefix fields = ( ('prefix', 100), ('description', 500), ) - queryset = Prefix.objects.prefetch_related( + queryset = models.Prefix.objects.prefetch_related( 'site', 'vrf__tenant', 'tenant', 'tenant__group', 'vlan', 'role' ) - filterset = ipam.filtersets.PrefixFilterSet + filterset = filtersets.PrefixFilterSet @register_search() -class ServiceIndex(SearchIndex): - model = Service +class RIRIndex(SearchIndex): + model = models.RIR + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + +@register_search() +class RoleIndex(SearchIndex): + model = models.Role + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + +@register_search() +class RouteTargetIndex(SearchIndex): + model = models.RouteTarget fields = ( ('name', 100), ('description', 500), ) - queryset = Service.objects.prefetch_related('device', 'virtual_machine') - filterset = ipam.filtersets.ServiceFilterSet + + +@register_search() +class ServiceIndex(SearchIndex): + model = models.Service + fields = ( + ('name', 100), + ('description', 500), + ) + queryset = models.Service.objects.prefetch_related('device', 'virtual_machine') + filterset = filtersets.ServiceFilterSet @register_search() class VLANIndex(SearchIndex): - model = VLAN + model = models.VLAN fields = ( ('name', 100), ('vid', 100), ('description', 500), ) - queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'tenant__group', 'role') - filterset = ipam.filtersets.VLANFilterSet + queryset = models.VLAN.objects.prefetch_related('site', 'group', 'tenant', 'tenant__group', 'role') + filterset = filtersets.VLANFilterSet + + +@register_search() +class VLANGroupIndex(SearchIndex): + model = models.VLANGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ('max_vid', 2000), + ) @register_search() class VRFIndex(SearchIndex): - model = VRF + model = models.VRF fields = ( ('name', 100), ('rd', 200), ('description', 500), ) - queryset = VRF.objects.prefetch_related('tenant', 'tenant__group') - filterset = ipam.filtersets.VRFFilterSet + queryset = models.VRF.objects.prefetch_related('tenant', 'tenant__group') + filterset = filtersets.VRFFilterSet diff --git a/netbox/tenancy/search.py b/netbox/tenancy/search.py index a7496460b..ab2fe7aff 100644 --- a/netbox/tenancy/search.py +++ b/netbox/tenancy/search.py @@ -1,13 +1,11 @@ -import tenancy.filtersets -import tenancy.tables from netbox.search import SearchIndex, register_search -from tenancy.models import Contact, ContactAssignment, Tenant from utilities.utils import count_related +from . import filtersets, models @register_search() class ContactIndex(SearchIndex): - model = Contact + model = models.Contact fields = ( ('name', 100), ('title', 300), @@ -17,20 +15,50 @@ class ContactIndex(SearchIndex): ('link', 300), ('comments', 5000), ) - queryset = Contact.objects.prefetch_related('group', 'assignments').annotate( - assignment_count=count_related(ContactAssignment, 'contact') + queryset = models.Contact.objects.prefetch_related('group', 'assignments').annotate( + assignment_count=count_related(models.ContactAssignment, 'contact') + ) + filterset = filtersets.ContactFilterSet + + +@register_search() +class ContactGroupIndex(SearchIndex): + model = models.ContactGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + +@register_search() +class ContactRoleIndex(SearchIndex): + model = models.ContactRole + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), ) - filterset = tenancy.filtersets.ContactFilterSet @register_search() class TenantIndex(SearchIndex): - model = Tenant + model = models.Tenant fields = ( ('name', 100), ('slug', 110), ('description', 500), ('comments', 5000), ) - queryset = Tenant.objects.prefetch_related('group') - filterset = tenancy.filtersets.TenantFilterSet + queryset = models.Tenant.objects.prefetch_related('group') + filterset = filtersets.TenantFilterSet + + +@register_search() +class TenantGroupIndex(SearchIndex): + model = models.TenantGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) diff --git a/netbox/virtualization/search.py b/netbox/virtualization/search.py index 7936ad476..24c8f28eb 100644 --- a/netbox/virtualization/search.py +++ b/netbox/virtualization/search.py @@ -1,32 +1,51 @@ -import virtualization.filtersets -import virtualization.tables from dcim.models import Device from netbox.search import SearchIndex, register_search from utilities.utils import count_related -from virtualization.models import Cluster, VirtualMachine +from . import filtersets, models @register_search() class ClusterIndex(SearchIndex): - model = Cluster + model = models.Cluster fields = ( ('name', 100), ('comments', 5000), ) - queryset = Cluster.objects.prefetch_related('type', 'group').annotate( - device_count=count_related(Device, 'cluster'), vm_count=count_related(VirtualMachine, 'cluster') + queryset = models.Cluster.objects.prefetch_related('type', 'group').annotate( + device_count=count_related(Device, 'cluster'), + vm_count=count_related(models.VirtualMachine, 'cluster') + ) + filterset = filtersets.ClusterFilterSet + + +@register_search() +class ClusterGroupIndex(SearchIndex): + model = models.ClusterGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + + +@register_search() +class ClusterTypeIndex(SearchIndex): + model = models.ClusterType + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), ) - filterset = virtualization.filtersets.ClusterFilterSet @register_search() class VirtualMachineIndex(SearchIndex): - model = VirtualMachine + model = models.VirtualMachine fields = ( ('name', 100), ('comments', 5000), ) - queryset = VirtualMachine.objects.prefetch_related( + queryset = models.VirtualMachine.objects.prefetch_related( 'cluster', 'tenant', 'tenant__group', @@ -34,4 +53,13 @@ class VirtualMachineIndex(SearchIndex): 'primary_ip4', 'primary_ip6', ) - filterset = virtualization.filtersets.VirtualMachineFilterSet + filterset = filtersets.VirtualMachineFilterSet + + +@register_search() +class VMInterfaceIndex(SearchIndex): + model = models.VMInterface + fields = ( + ('name', 100), + ('description', 500), + ) diff --git a/netbox/wireless/search.py b/netbox/wireless/search.py index 4b6d2c457..269bfdfc0 100644 --- a/netbox/wireless/search.py +++ b/netbox/wireless/search.py @@ -1,32 +1,40 @@ -import wireless.filtersets -import wireless.tables from dcim.models import Interface from netbox.search import SearchIndex, register_search from utilities.utils import count_related -from wireless.models import WirelessLAN, WirelessLink +from . import filtersets, models @register_search() class WirelessLANIndex(SearchIndex): - model = WirelessLAN + model = models.WirelessLAN fields = ( ('ssid', 100), ('description', 500), ('auth_psk', 2000), ) - queryset = WirelessLAN.objects.prefetch_related('group', 'vlan').annotate( + queryset = models.WirelessLAN.objects.prefetch_related('group', 'vlan').annotate( interface_count=count_related(Interface, 'wireless_lans') ) - filterset = wireless.filtersets.WirelessLANFilterSet + filterset = filtersets.WirelessLANFilterSet + + +@register_search() +class WirelessLANGroupIndex(SearchIndex): + model = models.WirelessLANGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) @register_search() class WirelessLinkIndex(SearchIndex): - model = WirelessLink + model = models.WirelessLink fields = ( ('ssid', 100), ('description', 500), ('auth_psk', 2000), ) - queryset = WirelessLink.objects.prefetch_related('interface_a__device', 'interface_b__device') - filterset = wireless.filtersets.WirelessLinkFilterSet + queryset = models.WirelessLink.objects.prefetch_related('interface_a__device', 'interface_b__device') + filterset = filtersets.WirelessLinkFilterSet