mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 12:12:53 -06:00

* Move Module & ModuleType models to a separate file * Add ModuleTypeProfile & related fields * Initial work on JSON schema validation * Add attributes property on ModuleType * Introduce MultipleOfValidator * Introduce JSONSchemaProperty * Enable dynamic form field rendering * Misc cleanup * Fix migration conflict * Ensure deterministic ordering of attriubte fields * Support choices & default values * Include module type attributes on module view * Enable modifying individual attributes via REST API * Enable filtering by attribute values * Add documentation & tests * Schema should be optional * Include attributes column for profiles * Profile is nullable * Include some initial profiles to be installed via migration * Fix migrations conflict * Fix filterset test * Misc cleanup * Fixes #19023: get_field_value() should respect null values in bound forms (#19024) * Skip filters which do not specify a JSON-serializable value * Fix handling of array item types * Fix initial data in schema field during bulk edit * Implement sanity checking for JSON schema definitions * Fall back to filtering by string value
386 lines
8.7 KiB
Python
386 lines
8.7 KiB
Python
from netbox.search import SearchIndex, register_search
|
|
from . import models
|
|
|
|
|
|
@register_search
|
|
class CableIndex(SearchIndex):
|
|
model = models.Cable
|
|
fields = (
|
|
('label', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('type', 'status', 'tenant', 'label', 'description')
|
|
|
|
|
|
@register_search
|
|
class ConsolePortIndex(SearchIndex):
|
|
model = models.ConsolePort
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
('speed', 2000),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'description')
|
|
|
|
|
|
@register_search
|
|
class ConsoleServerPortIndex(SearchIndex):
|
|
model = models.ConsoleServerPort
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
('speed', 2000),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'description')
|
|
|
|
|
|
@register_search
|
|
class DeviceIndex(SearchIndex):
|
|
model = models.Device
|
|
fields = (
|
|
('asset_tag', 50),
|
|
('serial', 60),
|
|
('name', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = (
|
|
'site', 'location', 'rack', 'status', 'device_type', 'role', 'tenant', 'platform', 'serial', 'asset_tag',
|
|
'description',
|
|
)
|
|
|
|
|
|
@register_search
|
|
class DeviceBayIndex(SearchIndex):
|
|
model = models.DeviceBay
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('device', 'label', 'description')
|
|
|
|
|
|
@register_search
|
|
class DeviceRoleIndex(SearchIndex):
|
|
model = models.DeviceRole
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('description',)
|
|
|
|
|
|
@register_search
|
|
class DeviceTypeIndex(SearchIndex):
|
|
model = models.DeviceType
|
|
fields = (
|
|
('model', 100),
|
|
('part_number', 200),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('manufacturer', 'part_number', 'description')
|
|
|
|
|
|
@register_search
|
|
class FrontPortIndex(SearchIndex):
|
|
model = models.FrontPort
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'description')
|
|
|
|
|
|
@register_search
|
|
class MACAddressIndex(SearchIndex):
|
|
model = models.MACAddress
|
|
fields = (
|
|
('mac_address', 100),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('assigned_object', 'description')
|
|
|
|
|
|
@register_search
|
|
class InterfaceIndex(SearchIndex):
|
|
model = models.Interface
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('wwn', 300),
|
|
('description', 500),
|
|
('mtu', 2000),
|
|
('speed', 2000),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'wwn', 'description')
|
|
|
|
|
|
@register_search
|
|
class InventoryItemIndex(SearchIndex):
|
|
model = models.InventoryItem
|
|
fields = (
|
|
('asset_tag', 50),
|
|
('serial', 60),
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
('part_id', 2000),
|
|
)
|
|
display_attrs = ('device', 'manufacturer', 'parent', 'part_id', 'serial', 'asset_tag', 'description')
|
|
|
|
|
|
@register_search
|
|
class LocationIndex(SearchIndex):
|
|
model = models.Location
|
|
fields = (
|
|
('name', 100),
|
|
('facility', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('site', 'status', 'tenant', 'facility', 'description')
|
|
|
|
|
|
@register_search
|
|
class ManufacturerIndex(SearchIndex):
|
|
model = models.Manufacturer
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('description',)
|
|
|
|
|
|
@register_search
|
|
class ModuleIndex(SearchIndex):
|
|
model = models.Module
|
|
fields = (
|
|
('asset_tag', 50),
|
|
('serial', 60),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('device', 'module_bay', 'module_type', 'status', 'serial', 'asset_tag', 'description')
|
|
|
|
|
|
@register_search
|
|
class ModuleBayIndex(SearchIndex):
|
|
model = models.ModuleBay
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('device', 'label', 'position', 'description')
|
|
|
|
|
|
@register_search
|
|
class ModuleTypeProfileIndex(SearchIndex):
|
|
model = models.ModuleTypeProfile
|
|
fields = (
|
|
('name', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('name', 'description')
|
|
|
|
|
|
@register_search
|
|
class ModuleTypeIndex(SearchIndex):
|
|
model = models.ModuleType
|
|
fields = (
|
|
('model', 100),
|
|
('part_number', 200),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('manufacturer', 'model', 'part_number', 'description')
|
|
|
|
|
|
@register_search
|
|
class PlatformIndex(SearchIndex):
|
|
model = models.Platform
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('manufacturer', 'description')
|
|
|
|
|
|
@register_search
|
|
class PowerFeedIndex(SearchIndex):
|
|
model = models.PowerFeed
|
|
fields = (
|
|
('name', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('power_panel', 'rack', 'status', 'description')
|
|
|
|
|
|
@register_search
|
|
class PowerOutletIndex(SearchIndex):
|
|
model = models.PowerOutlet
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'status', 'description')
|
|
|
|
|
|
@register_search
|
|
class PowerPanelIndex(SearchIndex):
|
|
model = models.PowerPanel
|
|
fields = (
|
|
('name', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('site', 'location', 'description')
|
|
|
|
|
|
@register_search
|
|
class PowerPortIndex(SearchIndex):
|
|
model = models.PowerPort
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
('maximum_draw', 2000),
|
|
('allocated_draw', 2000),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'description')
|
|
|
|
|
|
@register_search
|
|
class RackTypeIndex(SearchIndex):
|
|
model = models.RackType
|
|
fields = (
|
|
('model', 100),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('model', 'description')
|
|
|
|
|
|
@register_search
|
|
class RackIndex(SearchIndex):
|
|
model = models.Rack
|
|
fields = (
|
|
('asset_tag', 50),
|
|
('serial', 60),
|
|
('name', 100),
|
|
('facility_id', 200),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = (
|
|
'site', 'location', 'facility_id', 'tenant', 'status', 'role', 'serial', 'asset_tag', 'description',
|
|
)
|
|
|
|
|
|
@register_search
|
|
class RackReservationIndex(SearchIndex):
|
|
model = models.RackReservation
|
|
fields = (
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('rack', 'tenant', 'user', 'description')
|
|
|
|
|
|
@register_search
|
|
class RackRoleIndex(SearchIndex):
|
|
model = models.RackRole
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('description',)
|
|
|
|
|
|
@register_search
|
|
class RearPortIndex(SearchIndex):
|
|
model = models.RearPort
|
|
fields = (
|
|
('name', 100),
|
|
('label', 200),
|
|
('description', 500),
|
|
)
|
|
display_attrs = ('device', 'label', 'type', 'description')
|
|
|
|
|
|
@register_search
|
|
class RegionIndex(SearchIndex):
|
|
model = models.Region
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('parent', 'description')
|
|
|
|
|
|
@register_search
|
|
class SiteIndex(SearchIndex):
|
|
model = models.Site
|
|
fields = (
|
|
('name', 100),
|
|
('facility', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
('physical_address', 2000),
|
|
('shipping_address', 2000),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('region', 'group', 'status', 'tenant', 'facility', 'description')
|
|
|
|
|
|
@register_search
|
|
class SiteGroupIndex(SearchIndex):
|
|
model = models.SiteGroup
|
|
fields = (
|
|
('name', 100),
|
|
('slug', 110),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('parent', 'description')
|
|
|
|
|
|
@register_search
|
|
class VirtualChassisIndex(SearchIndex):
|
|
model = models.VirtualChassis
|
|
fields = (
|
|
('name', 100),
|
|
('domain', 300),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('master', 'domain', 'description')
|
|
|
|
|
|
@register_search
|
|
class VirtualDeviceContextIndex(SearchIndex):
|
|
model = models.VirtualDeviceContext
|
|
fields = (
|
|
('name', 100),
|
|
('identifier', 300),
|
|
('description', 500),
|
|
('comments', 5000),
|
|
)
|
|
display_attrs = ('device', 'status', 'identifier', 'tenant', 'description')
|