1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Separate device component lists into discrete views

This commit is contained in:
Jeremy Stretch
2020-11-13 15:00:12 -05:00
parent 052346364a
commit 9736d6ba48
22 changed files with 1316 additions and 1110 deletions

View File

@@ -1007,117 +1007,6 @@ class DeviceView(generic.ObjectView):
else:
vc_members = []
# Console ports
consoleports = ConsolePort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', '_path__destination',
)
consoleport_table = tables.DeviceConsolePortTable(
data=consoleports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_consoleport') or request.user.has_perm('dcim.delete_consoleport'):
consoleport_table.columns.show('pk')
# Console server ports
consoleserverports = ConsoleServerPort.objects.restrict(request.user, 'view').filter(
device=device
).prefetch_related(
'cable', '_path__destination',
)
consoleserverport_table = tables.DeviceConsoleServerPortTable(
data=consoleserverports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_consoleserverport') or \
request.user.has_perm('dcim.delete_consoleserverport'):
consoleserverport_table.columns.show('pk')
# Power ports
powerports = PowerPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', '_path__destination',
)
powerport_table = tables.DevicePowerPortTable(
data=powerports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_powerport') or request.user.has_perm('dcim.delete_powerport'):
powerport_table.columns.show('pk')
# Power outlets
poweroutlets = PowerOutlet.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', 'power_port', '_path__destination',
)
poweroutlet_table = tables.DevicePowerOutletTable(
data=poweroutlets,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_poweroutlet') or request.user.has_perm('dcim.delete_poweroutlet'):
poweroutlet_table.columns.show('pk')
# Interfaces
interfaces = device.vc_interfaces.restrict(request.user, 'view').prefetch_related(
Prefetch('ip_addresses', queryset=IPAddress.objects.restrict(request.user)),
Prefetch('member_interfaces', queryset=Interface.objects.restrict(request.user)),
'lag', 'cable', '_path__destination', 'tags',
)
interface_table = tables.DeviceInterfaceTable(
data=interfaces,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_interface') or request.user.has_perm('dcim.delete_interface'):
interface_table.columns.show('pk')
# Front ports
frontports = FrontPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'rear_port', 'cable',
)
frontport_table = tables.DeviceFrontPortTable(
data=frontports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_frontport') or request.user.has_perm('dcim.delete_frontport'):
frontport_table.columns.show('pk')
# Rear ports
rearports = RearPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related('cable')
rearport_table = tables.DeviceRearPortTable(
data=rearports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_rearport') or request.user.has_perm('dcim.delete_rearport'):
rearport_table.columns.show('pk')
# Device bays
devicebays = DeviceBay.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'installed_device__device_type__manufacturer',
)
devicebay_table = tables.DeviceDeviceBayTable(
data=devicebays,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_devicebay') or request.user.has_perm('dcim.delete_devicebay'):
devicebay_table.columns.show('pk')
# Inventory items
inventoryitems = InventoryItem.objects.restrict(request.user, 'view').filter(
device=device
).prefetch_related('manufacturer')
inventoryitem_table = tables.DeviceInventoryItemTable(
data=inventoryitems,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_inventoryitem') or request.user.has_perm('dcim.delete_inventoryitem'):
inventoryitem_table.columns.show('pk')
# Services
services = Service.objects.restrict(request.user, 'view').filter(device=device)
@@ -1133,21 +1022,232 @@ class DeviceView(generic.ObjectView):
'rack', 'device_type__manufacturer'
)[:10]
return render(request, 'dcim/device.html', {
return render(request, 'dcim/device/device.html', {
'device': device,
'consoleport_table': consoleport_table,
'consoleserverport_table': consoleserverport_table,
'powerport_table': powerport_table,
'poweroutlet_table': poweroutlet_table,
'interface_table': interface_table,
'frontport_table': frontport_table,
'rearport_table': rearport_table,
'devicebay_table': devicebay_table,
'inventoryitem_table': inventoryitem_table,
'services': services,
'secrets': secrets,
'vc_members': vc_members,
'related_devices': related_devices,
'active_tab': 'device',
})
class DeviceConsolePortsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
consoleports = ConsolePort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', '_path__destination',
)
consoleport_table = tables.DeviceConsolePortTable(
data=consoleports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_consoleport') or request.user.has_perm('dcim.delete_consoleport'):
consoleport_table.columns.show('pk')
return render(request, 'dcim/device/consoleports.html', {
'device': device,
'consoleport_table': consoleport_table,
'active_tab': 'console-ports',
})
class DeviceConsoleServerPortsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
consoleserverports = ConsoleServerPort.objects.restrict(request.user, 'view').filter(
device=device
).prefetch_related(
'cable', '_path__destination',
)
consoleserverport_table = tables.DeviceConsoleServerPortTable(
data=consoleserverports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_consoleserverport') or \
request.user.has_perm('dcim.delete_consoleserverport'):
consoleserverport_table.columns.show('pk')
return render(request, 'dcim/device/consoleserverports.html', {
'device': device,
'consoleserverport_table': consoleserverport_table,
'active_tab': 'console-server-ports',
})
class DevicePowerPortsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
powerports = PowerPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', '_path__destination',
)
powerport_table = tables.DevicePowerPortTable(
data=powerports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_powerport') or request.user.has_perm('dcim.delete_powerport'):
powerport_table.columns.show('pk')
return render(request, 'dcim/device/powerports.html', {
'device': device,
'powerport_table': powerport_table,
'active_tab': 'power-ports',
})
class DevicePowerOutletsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
poweroutlets = PowerOutlet.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'cable', 'power_port', '_path__destination',
)
poweroutlet_table = tables.DevicePowerOutletTable(
data=poweroutlets,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_poweroutlet') or request.user.has_perm('dcim.delete_poweroutlet'):
poweroutlet_table.columns.show('pk')
return render(request, 'dcim/device/poweroutlets.html', {
'device': device,
'poweroutlet_table': poweroutlet_table,
'active_tab': 'power-outlets',
})
class DeviceInterfacesView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
interfaces = device.vc_interfaces.restrict(request.user, 'view').prefetch_related(
Prefetch('ip_addresses', queryset=IPAddress.objects.restrict(request.user)),
Prefetch('member_interfaces', queryset=Interface.objects.restrict(request.user)),
'lag', 'cable', '_path__destination', 'tags',
)
interface_table = tables.DeviceInterfaceTable(
data=interfaces,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_interface') or request.user.has_perm('dcim.delete_interface'):
interface_table.columns.show('pk')
return render(request, 'dcim/device/interfaces.html', {
'device': device,
'interface_table': interface_table,
'active_tab': 'interfaces',
})
class DeviceFrontPortsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
frontports = FrontPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'rear_port', 'cable',
)
frontport_table = tables.DeviceFrontPortTable(
data=frontports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_frontport') or request.user.has_perm('dcim.delete_frontport'):
frontport_table.columns.show('pk')
return render(request, 'dcim/device/frontports.html', {
'device': device,
'frontport_table': frontport_table,
'active_tab': 'front-ports',
})
class DeviceRearPortsView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
rearports = RearPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related('cable')
rearport_table = tables.DeviceRearPortTable(
data=rearports,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_rearport') or request.user.has_perm('dcim.delete_rearport'):
rearport_table.columns.show('pk')
return render(request, 'dcim/device/rearports.html', {
'device': device,
'rearport_table': rearport_table,
'active_tab': 'rear-ports',
})
class DeviceDeviceBaysView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
devicebays = DeviceBay.objects.restrict(request.user, 'view').filter(device=device).prefetch_related(
'installed_device__device_type__manufacturer',
)
devicebay_table = tables.DeviceDeviceBayTable(
data=devicebays,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_devicebay') or request.user.has_perm('dcim.delete_devicebay'):
devicebay_table.columns.show('pk')
return render(request, 'dcim/device/devicebays.html', {
'device': device,
'devicebay_table': devicebay_table,
'active_tab': 'device-bays',
})
class DeviceInventoryView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
inventoryitems = InventoryItem.objects.restrict(request.user, 'view').filter(
device=device
).prefetch_related('manufacturer')
inventoryitem_table = tables.DeviceInventoryItemTable(
data=inventoryitems,
user=request.user,
orderable=False
)
if request.user.has_perm('dcim.change_inventoryitem') or request.user.has_perm('dcim.delete_inventoryitem'):
inventoryitem_table.columns.show('pk')
return render(request, 'dcim/device/inventory.html', {
'device': device,
'inventoryitem_table': inventoryitem_table,
'active_tab': 'inventory',
})
@@ -1156,10 +1256,9 @@ class DeviceStatusView(generic.ObjectView):
queryset = Device.objects.all()
def get(self, request, pk):
device = get_object_or_404(self.queryset, pk=pk)
return render(request, 'dcim/device_status.html', {
return render(request, 'dcim/device/status.html', {
'device': device,
'active_tab': 'status',
})
@@ -1176,7 +1275,7 @@ class DeviceLLDPNeighborsView(generic.ObjectView):
type__in=NONCONNECTABLE_IFACE_TYPES
)
return render(request, 'dcim/device_lldp_neighbors.html', {
return render(request, 'dcim/device/lldp_neighbors.html', {
'device': device,
'interfaces': interfaces,
'active_tab': 'lldp-neighbors',
@@ -1191,7 +1290,7 @@ class DeviceConfigView(generic.ObjectView):
device = get_object_or_404(self.queryset, pk=pk)
return render(request, 'dcim/device_config.html', {
return render(request, 'dcim/device/config.html', {
'device': device,
'active_tab': 'config',
})
@@ -1199,7 +1298,7 @@ class DeviceConfigView(generic.ObjectView):
class DeviceConfigContextView(ObjectConfigContextView):
queryset = Device.objects.annotate_config_context_data()
base_template = 'dcim/device.html'
base_template = 'dcim/device/base.html'
class DeviceEditView(generic.ObjectEditView):