Skip to content

Commit e3cfc9a

Browse files
committed
#492: Extend DCIM tables
1 parent 8868760 commit e3cfc9a

File tree

3 files changed

+128
-38
lines changed

3 files changed

+128
-38
lines changed

netbox/dcim/tables.py

Lines changed: 125 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -723,8 +723,10 @@ class DeviceRoleTable(BaseTable):
723723
orderable=False,
724724
verbose_name='VMs'
725725
)
726-
color = tables.TemplateColumn(COLOR_LABEL, verbose_name='Label')
727-
slug = tables.Column(verbose_name='Slug')
726+
color = tables.TemplateColumn(
727+
template_code=COLOR_LABEL,
728+
verbose_name='Label'
729+
)
728730
actions = tables.TemplateColumn(
729731
template_code=DEVICEROLE_ACTIONS,
730732
attrs={'td': {'class': 'text-right noprint'}},
@@ -734,6 +736,7 @@ class DeviceRoleTable(BaseTable):
734736
class Meta(BaseTable.Meta):
735737
model = DeviceRole
736738
fields = ('pk', 'name', 'device_count', 'vm_count', 'color', 'vm_role', 'description', 'slug', 'actions')
739+
default_columns = ('pk', 'name', 'device_count', 'vm_count', 'color', 'vm_role', 'description', 'actions')
737740

738741

739742
#
@@ -763,7 +766,11 @@ class PlatformTable(BaseTable):
763766
class Meta(BaseTable.Meta):
764767
model = Platform
765768
fields = (
766-
'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'napalm_driver', 'description', 'actions',
769+
'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'napalm_driver', 'napalm_args',
770+
'description', 'actions',
771+
)
772+
default_columns = (
773+
'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'napalm_driver', 'description', 'actions',
767774
)
768775

769776

@@ -777,40 +784,96 @@ class DeviceTable(BaseTable):
777784
order_by=('_name',),
778785
template_code=DEVICE_LINK
779786
)
780-
status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
781-
tenant = tables.TemplateColumn(template_code=COL_TENANT)
782-
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')])
783-
rack = tables.LinkColumn('dcim:rack', args=[Accessor('rack.pk')])
784-
device_role = tables.TemplateColumn(DEVICE_ROLE, verbose_name='Role')
787+
status = tables.TemplateColumn(
788+
template_code=STATUS_LABEL
789+
)
790+
tenant = tables.TemplateColumn(
791+
template_code=COL_TENANT
792+
)
793+
site = tables.LinkColumn(
794+
viewname='dcim:site',
795+
args=[Accessor('site.slug')]
796+
)
797+
rack = tables.LinkColumn(
798+
viewname='dcim:rack',
799+
args=[Accessor('rack.pk')]
800+
)
801+
device_role = tables.TemplateColumn(
802+
template_code=DEVICE_ROLE,
803+
verbose_name='Role'
804+
)
785805
device_type = tables.LinkColumn(
786-
'dcim:devicetype', args=[Accessor('device_type.pk')], verbose_name='Type',
806+
viewname='dcim:devicetype',
807+
args=[Accessor('device_type.pk')],
808+
verbose_name='Type',
787809
text=lambda record: record.device_type.display_name
788810
)
789-
790-
class Meta(BaseTable.Meta):
791-
model = Device
792-
fields = ('pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type')
793-
794-
795-
class DeviceDetailTable(DeviceTable):
796811
primary_ip = tables.TemplateColumn(
797-
orderable=False, verbose_name='IP Address', template_code=DEVICE_PRIMARY_IP
812+
template_code=DEVICE_PRIMARY_IP,
813+
orderable=False,
814+
verbose_name='IP Address'
815+
)
816+
primary_ip4 = tables.LinkColumn(
817+
viewname='ipam:ipaddress',
818+
args=[Accessor('primary_ip4.pk')],
819+
verbose_name='IPv4 Address'
820+
)
821+
primary_ip6 = tables.LinkColumn(
822+
viewname='ipam:ipaddress',
823+
args=[Accessor('primary_ip6.pk')],
824+
verbose_name='IPv6 Address'
825+
)
826+
cluster = tables.LinkColumn(
827+
viewname='virtualization:cluster',
828+
args=[Accessor('cluster.pk')]
829+
)
830+
virtual_chassis = tables.LinkColumn(
831+
viewname='dcim:virtualchassis',
832+
args=[Accessor('virtual_chassis.pk')]
833+
)
834+
vc_position = tables.Column(
835+
verbose_name='VC Position'
836+
)
837+
vc_priority = tables.Column(
838+
verbose_name='VC Priority'
798839
)
799840

800-
class Meta(DeviceTable.Meta):
841+
class Meta(BaseTable.Meta):
801842
model = Device
802-
fields = ('pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type', 'primary_ip')
843+
fields = (
844+
'pk', 'name', 'status', 'tenant', 'device_role', 'device_type', 'platform', 'serial', 'asset_tag', 'site',
845+
'rack', 'position', 'face', 'primary_ip', 'primary_ip4', 'primary_ip6', 'cluster', 'virtual_chassis',
846+
'vc_position', 'vc_priority',
847+
)
848+
default_columns = (
849+
'pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type', 'primary_ip',
850+
)
803851

804852

805853
class DeviceImportTable(BaseTable):
806-
name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name')
807-
status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
808-
tenant = tables.TemplateColumn(template_code=COL_TENANT)
809-
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
810-
rack = tables.LinkColumn('dcim:rack', args=[Accessor('rack.pk')], verbose_name='Rack')
811-
position = tables.Column(verbose_name='Position')
812-
device_role = tables.Column(verbose_name='Role')
813-
device_type = tables.Column(verbose_name='Type')
854+
name = tables.TemplateColumn(
855+
template_code=DEVICE_LINK
856+
)
857+
status = tables.TemplateColumn(
858+
template_code=STATUS_LABEL
859+
)
860+
tenant = tables.TemplateColumn(
861+
template_code=COL_TENANT
862+
)
863+
site = tables.LinkColumn(
864+
viewname='dcim:site',
865+
args=[Accessor('site.slug')]
866+
)
867+
rack = tables.LinkColumn(
868+
viewname='dcim:rack',
869+
args=[Accessor('rack.pk')]
870+
)
871+
device_role = tables.Column(
872+
verbose_name='Role'
873+
)
874+
device_type = tables.Column(
875+
verbose_name='Type'
876+
)
814877

815878
class Meta(BaseTable.Meta):
816879
model = Device
@@ -986,23 +1049,23 @@ class CableTable(BaseTable):
9861049
template_code=CABLE_TERMINATION_PARENT,
9871050
accessor=Accessor('termination_a'),
9881051
orderable=False,
989-
verbose_name='Termination A'
1052+
verbose_name='Side A'
9901053
)
9911054
termination_a = tables.LinkColumn(
9921055
accessor=Accessor('termination_a'),
9931056
orderable=False,
994-
verbose_name=''
1057+
verbose_name='Termination A'
9951058
)
9961059
termination_b_parent = tables.TemplateColumn(
9971060
template_code=CABLE_TERMINATION_PARENT,
9981061
accessor=Accessor('termination_b'),
9991062
orderable=False,
1000-
verbose_name='Termination B'
1063+
verbose_name='Side B'
10011064
)
10021065
termination_b = tables.LinkColumn(
10031066
accessor=Accessor('termination_b'),
10041067
orderable=False,
1005-
verbose_name=''
1068+
verbose_name='Termination B'
10061069
)
10071070
status = tables.TemplateColumn(
10081071
template_code=STATUS_LABEL
@@ -1019,6 +1082,10 @@ class Meta(BaseTable.Meta):
10191082
'pk', 'id', 'label', 'termination_a_parent', 'termination_a', 'termination_b_parent', 'termination_b',
10201083
'status', 'type', 'color', 'length',
10211084
)
1085+
default_columns = (
1086+
'pk', 'id', 'label', 'termination_a_parent', 'termination_a', 'termination_b_parent', 'termination_b',
1087+
'status', 'type',
1088+
)
10221089

10231090

10241091
#
@@ -1120,12 +1187,21 @@ class Meta(BaseTable.Meta):
11201187

11211188
class InventoryItemTable(BaseTable):
11221189
pk = ToggleColumn()
1123-
device = tables.LinkColumn('dcim:device_inventory', args=[Accessor('device.pk')])
1124-
manufacturer = tables.Column(accessor=Accessor('manufacturer.name'), verbose_name='Manufacturer')
1190+
device = tables.LinkColumn(
1191+
viewname='dcim:device_inventory',
1192+
args=[Accessor('device.pk')]
1193+
)
1194+
manufacturer = tables.Column(
1195+
accessor=Accessor('manufacturer.name')
1196+
)
1197+
discovered = BooleanColumn()
11251198

11261199
class Meta(BaseTable.Meta):
11271200
model = InventoryItem
1128-
fields = ('pk', 'device', 'name', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description')
1201+
fields = (
1202+
'pk', 'device', 'name', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'discovered'
1203+
)
1204+
default_columns = ('pk', 'device', 'name', 'manufacturer', 'part_id', 'serial', 'asset_tag')
11291205

11301206

11311207
#
@@ -1145,6 +1221,7 @@ class VirtualChassisTable(BaseTable):
11451221
class Meta(BaseTable.Meta):
11461222
model = VirtualChassis
11471223
fields = ('pk', 'name', 'domain', 'member_count')
1224+
default_columns = ('pk', 'name', 'domain', 'member_count')
11481225

11491226

11501227
#
@@ -1166,6 +1243,7 @@ class PowerPanelTable(BaseTable):
11661243
class Meta(BaseTable.Meta):
11671244
model = PowerPanel
11681245
fields = ('pk', 'name', 'site', 'rack_group', 'powerfeed_count')
1246+
default_columns = ('pk', 'name', 'site', 'rack_group', 'powerfeed_count')
11691247

11701248

11711249
#
@@ -1189,7 +1267,19 @@ class PowerFeedTable(BaseTable):
11891267
type = tables.TemplateColumn(
11901268
template_code=TYPE_LABEL
11911269
)
1270+
max_utilization = tables.TemplateColumn(
1271+
template_code="{{ value }}%"
1272+
)
1273+
available_power = tables.Column(
1274+
verbose_name='Available power (VA)'
1275+
)
11921276

11931277
class Meta(BaseTable.Meta):
11941278
model = PowerFeed
1195-
fields = ('pk', 'name', 'power_panel', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage', 'phase')
1279+
fields = (
1280+
'pk', 'name', 'power_panel', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage', 'phase',
1281+
'max_utilization', 'available_power',
1282+
)
1283+
default_columns = (
1284+
'pk', 'name', 'power_panel', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage', 'phase',
1285+
)

netbox/dcim/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,7 @@ class DeviceListView(PermissionRequiredMixin, ObjectListView):
10951095
)
10961096
filterset = filters.DeviceFilterSet
10971097
filterset_form = forms.DeviceFilterForm
1098-
table = tables.DeviceDetailTable
1098+
table = tables.DeviceTable
10991099
template_name = 'dcim/device_list.html'
11001100

11011101

netbox/netbox/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, RackGroup, Site, VirtualChassis
2121
)
2222
from dcim.tables import (
23-
CableTable, DeviceDetailTable, DeviceTypeTable, PowerFeedTable, RackTable, RackGroupTable, SiteTable,
23+
CableTable, DeviceTable, DeviceTypeTable, PowerFeedTable, RackTable, RackGroupTable, SiteTable,
2424
VirtualChassisTable,
2525
)
2626
from extras.models import ObjectChange, ReportResult
@@ -93,7 +93,7 @@
9393
'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6',
9494
),
9595
'filterset': DeviceFilterSet,
96-
'table': DeviceDetailTable,
96+
'table': DeviceTable,
9797
'url': 'dcim:device_list',
9898
}),
9999
('virtualchassis', {

0 commit comments

Comments
 (0)