diff --git a/netbox/dcim/tables/racks.py b/netbox/dcim/tables/racks.py index 39a76eade..fcc3ed4d2 100644 --- a/netbox/dcim/tables/racks.py +++ b/netbox/dcim/tables/racks.py @@ -10,7 +10,6 @@ from utilities.tables import ( __all__ = ( 'RackTable', - 'RackDetailTable', 'RackReservationTable', 'RackRoleTable', ) @@ -56,17 +55,6 @@ class RackTable(BaseTable): template_code="{{ record.u_height }}U", verbose_name='Height' ) - - class Meta(BaseTable.Meta): - model = Rack - fields = ( - 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'serial', 'asset_tag', 'type', - 'width', 'u_height', - ) - default_columns = ('pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'u_height') - - -class RackDetailTable(RackTable): comments = MarkdownColumn() device_count = LinkedCountColumn( viewname='dcim:device_list', @@ -85,7 +73,8 @@ class RackDetailTable(RackTable): url_name='dcim:rack_list' ) - class Meta(RackTable.Meta): + class Meta(BaseTable.Meta): + model = Rack fields = ( 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'serial', 'asset_tag', 'type', 'width', 'u_height', 'comments', 'device_count', 'get_utilization', 'get_power_utilization', 'tags', diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 4305d3c63..fbdd30a3d 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -455,6 +455,8 @@ class RackRoleView(generic.ObjectView): racks_table = tables.RackTable(racks) racks_table.columns.hide('role') + racks_table.columns.hide('get_utilization') + racks_table.columns.hide('get_power_utilization') paginate_table(racks_table, request) return { @@ -505,7 +507,7 @@ class RackListView(generic.ObjectListView): ) filterset = filtersets.RackFilterSet filterset_form = forms.RackFilterForm - table = tables.RackDetailTable + table = tables.RackTable class RackElevationListView(generic.ObjectListView): diff --git a/netbox/ipam/tables.py b/netbox/ipam/tables.py index 5afb6a9c9..a39df2601 100644 --- a/netbox/ipam/tables.py +++ b/netbox/ipam/tables.py @@ -215,13 +215,6 @@ class AggregateTable(BaseTable): format="Y-m-d", verbose_name='Added' ) - - class Meta(BaseTable.Meta): - model = Aggregate - fields = ('pk', 'prefix', 'rir', 'tenant', 'date_added', 'description') - - -class AggregateDetailTable(AggregateTable): child_count = tables.Column( verbose_name='Prefixes' ) @@ -233,7 +226,8 @@ class AggregateDetailTable(AggregateTable): url_name='ipam:aggregate_list' ) - class Meta(AggregateTable.Meta): + class Meta(BaseTable.Meta): + model = Aggregate fields = ('pk', 'prefix', 'rir', 'tenant', 'child_count', 'utilization', 'date_added', 'description', 'tags') default_columns = ('pk', 'prefix', 'rir', 'tenant', 'child_count', 'utilization', 'date_added', 'description') @@ -332,20 +326,6 @@ class PrefixTable(BaseTable): mark_utilized = BooleanColumn( verbose_name='Marked Utilized' ) - - class Meta(BaseTable.Meta): - model = Prefix - fields = ( - 'pk', 'prefix', 'prefix_flat', 'status', 'depth', 'children', 'vrf', 'tenant', 'site', 'vlan', 'role', - 'is_pool', 'mark_utilized', 'description', - ) - default_columns = ('pk', 'prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'description') - row_attrs = { - 'class': lambda record: 'success' if not record.pk else '', - } - - -class PrefixDetailTable(PrefixTable): utilization = PrefixUtilizationColumn( accessor='get_utilization', orderable=False @@ -354,7 +334,8 @@ class PrefixDetailTable(PrefixTable): url_name='ipam:prefix_list' ) - class Meta(PrefixTable.Meta): + class Meta(BaseTable.Meta): + model = Prefix fields = ( 'pk', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'is_pool', 'mark_utilized', 'description', 'tags', @@ -362,6 +343,9 @@ class PrefixDetailTable(PrefixTable): default_columns = ( 'pk', 'prefix', 'status', 'children', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'description', ) + row_attrs = { + 'class': lambda record: 'success' if not record.pk else '', + } # @@ -427,25 +411,11 @@ class IPAddressTable(BaseTable): orderable=False, verbose_name='Device/VM' ) - - class Meta(BaseTable.Meta): - model = IPAddress - fields = ( - 'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'assigned_object', 'assigned_object_parent', 'dns_name', - 'description', - ) - row_attrs = { - 'class': lambda record: 'success' if not isinstance(record, IPAddress) else '', - } - - -class IPAddressDetailTable(IPAddressTable): nat_inside = tables.Column( linkify=True, orderable=False, verbose_name='NAT (Inside)' ) - tenant = TenantColumn() assigned = BooleanColumn( accessor='assigned_object_id', verbose_name='Assigned' @@ -454,14 +424,18 @@ class IPAddressDetailTable(IPAddressTable): url_name='ipam:ipaddress_list' ) - class Meta(IPAddressTable.Meta): + class Meta(BaseTable.Meta): + model = IPAddress fields = ( - 'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'assigned', 'dns_name', - 'description', 'tags', + 'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'assigned', 'dns_name', 'description', + 'tags', ) default_columns = ( 'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'assigned', 'dns_name', 'description', ) + row_attrs = { + 'class': lambda record: 'success' if not isinstance(record, IPAddress) else '', + } class IPAddressAssignTable(BaseTable): @@ -554,29 +528,22 @@ class VLANTable(BaseTable): role = tables.TemplateColumn( template_code=VLAN_ROLE_LINK ) - - class Meta(BaseTable.Meta): - model = VLAN - fields = ('pk', 'vid', 'name', 'site', 'group', 'tenant', 'status', 'role', 'description') - row_attrs = { - 'class': lambda record: 'success' if not isinstance(record, VLAN) else '', - } - - -class VLANDetailTable(VLANTable): prefixes = tables.TemplateColumn( template_code=VLAN_PREFIXES, orderable=False, verbose_name='Prefixes' ) - tenant = TenantColumn() tags = TagColumn( url_name='ipam:vlan_list' ) - class Meta(VLANTable.Meta): + class Meta(BaseTable.Meta): + model = VLAN fields = ('pk', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'status', 'role', 'description', 'tags') default_columns = ('pk', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'status', 'role', 'description') + row_attrs = { + 'class': lambda record: 'success' if not isinstance(record, VLAN) else '', + } class VLANMembersTable(BaseTable): diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 64ca5bc43..6d49cd24f 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -158,6 +158,7 @@ class RIRView(generic.ObjectView): aggregates_table = tables.AggregateTable(aggregates) aggregates_table.columns.hide('rir') + aggregates_table.columns.hide('utilization') paginate_table(aggregates_table, request) return { @@ -207,7 +208,7 @@ class AggregateListView(generic.ObjectListView): ) filterset = filtersets.AggregateFilterSet filterset_form = forms.AggregateFilterForm - table = tables.AggregateDetailTable + table = tables.AggregateTable class AggregateView(generic.ObjectView): @@ -227,7 +228,7 @@ class AggregateView(generic.ObjectView): if request.GET.get('show_available', 'true') == 'true': child_prefixes = add_available_prefixes(instance.prefix, child_prefixes) - prefix_table = tables.PrefixDetailTable(child_prefixes) + prefix_table = tables.PrefixTable(child_prefixes, exclude=('utilization',)) if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'): prefix_table.columns.show('pk') paginate_table(prefix_table, request) @@ -296,8 +297,7 @@ class RoleView(generic.ObjectView): role=instance ) - prefixes_table = tables.PrefixTable(prefixes) - prefixes_table.columns.hide('role') + prefixes_table = tables.PrefixTable(prefixes, exclude=('role', 'utilization')) paginate_table(prefixes_table, request) return { @@ -340,7 +340,7 @@ class PrefixListView(generic.ObjectListView): queryset = Prefix.objects.all() filterset = filtersets.PrefixFilterSet filterset_form = forms.PrefixFilterForm - table = tables.PrefixDetailTable + table = tables.PrefixTable template_name = 'ipam/prefix_list.html' @@ -363,8 +363,11 @@ class PrefixView(generic.ObjectView): ).prefetch_related( 'site', 'role' ) - parent_prefix_table = tables.PrefixTable(list(parent_prefixes), orderable=False) - parent_prefix_table.exclude = ('vrf',) + parent_prefix_table = tables.PrefixTable( + list(parent_prefixes), + exclude=('vrf', 'utilization'), + orderable=False + ) # Duplicate prefixes table duplicate_prefixes = Prefix.objects.restrict(request.user, 'view').filter( @@ -374,8 +377,11 @@ class PrefixView(generic.ObjectView): ).prefetch_related( 'site', 'role' ) - duplicate_prefix_table = tables.PrefixTable(list(duplicate_prefixes), orderable=False) - duplicate_prefix_table.exclude = ('vrf',) + duplicate_prefix_table = tables.PrefixTable( + list(duplicate_prefixes), + exclude=('vrf', 'utilization'), + orderable=False + ) return { 'aggregate': aggregate, @@ -398,7 +404,7 @@ class PrefixPrefixesView(generic.ObjectView): if child_prefixes and request.GET.get('show_available', 'true') == 'true': child_prefixes = add_available_prefixes(instance.prefix, child_prefixes) - table = tables.PrefixDetailTable(child_prefixes, user=request.user) + table = tables.PrefixTable(child_prefixes, user=request.user, exclude=('utilization',)) if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'): table.columns.show('pk') paginate_table(table, request) @@ -601,7 +607,7 @@ class IPAddressListView(generic.ObjectListView): queryset = IPAddress.objects.all() filterset = filtersets.IPAddressFilterSet filterset_form = forms.IPAddressFilterForm - table = tables.IPAddressDetailTable + table = tables.IPAddressTable class IPAddressView(generic.ObjectView): @@ -615,8 +621,11 @@ class IPAddressView(generic.ObjectView): ).prefetch_related( 'site', 'role' ) - parent_prefixes_table = tables.PrefixTable(list(parent_prefixes), orderable=False) - parent_prefixes_table.exclude = ('vrf',) + parent_prefixes_table = tables.PrefixTable( + list(parent_prefixes), + exclude=('vrf', 'utilization'), + orderable=False + ) # Duplicate IPs table duplicate_ips = IPAddress.objects.restrict(request.user, 'view').filter( @@ -767,11 +776,9 @@ class VLANGroupView(generic.ObjectView): vlans_count = vlans.count() vlans = add_available_vlans(vlans, vlan_group=instance) - vlans_table = tables.VLANDetailTable(vlans) + vlans_table = tables.VLANTable(vlans, exclude=('site', 'group', 'prefixes')) if request.user.has_perm('ipam.change_vlan') or request.user.has_perm('ipam.delete_vlan'): vlans_table.columns.show('pk') - vlans_table.columns.hide('site') - vlans_table.columns.hide('group') paginate_table(vlans_table, request) # Compile permissions list for rendering the object table @@ -828,7 +835,7 @@ class VLANListView(generic.ObjectListView): queryset = VLAN.objects.all() filterset = filtersets.VLANFilterSet filterset_form = forms.VLANFilterForm - table = tables.VLANDetailTable + table = tables.VLANTable class VLANView(generic.ObjectView): @@ -838,8 +845,7 @@ class VLANView(generic.ObjectView): prefixes = Prefix.objects.restrict(request.user, 'view').filter(vlan=instance).prefetch_related( 'vrf', 'site', 'role' ) - prefix_table = tables.PrefixTable(list(prefixes), orderable=False) - prefix_table.exclude = ('vlan',) + prefix_table = tables.PrefixTable(list(prefixes), exclude=('vlan', 'utilization'), orderable=False) return { 'prefix_table': prefix_table, diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index 31e56fb1f..ec6daa021 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -21,7 +21,7 @@ from tenancy.tables import TenantTable from utilities.utils import count_related from virtualization.filtersets import ClusterFilterSet, VirtualMachineFilterSet from virtualization.models import Cluster, VirtualMachine -from virtualization.tables import ClusterTable, VirtualMachineDetailTable +from virtualization.tables import ClusterTable, VirtualMachineTable SEARCH_MAX_RESULTS = 15 SEARCH_TYPES = OrderedDict(( @@ -130,7 +130,7 @@ SEARCH_TYPES = OrderedDict(( 'cluster', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', ), 'filterset': VirtualMachineFilterSet, - 'table': VirtualMachineDetailTable, + 'table': VirtualMachineTable, 'url': 'virtualization:virtualmachine_list', }), # IPAM diff --git a/netbox/templates/ipam/prefix/prefixes.html b/netbox/templates/ipam/prefix/prefixes.html index e6c109a39..d10ca79db 100644 --- a/netbox/templates/ipam/prefix/prefixes.html +++ b/netbox/templates/ipam/prefix/prefixes.html @@ -15,9 +15,9 @@ {% block content %}
- {% include 'inc/table_controls.html' with table_modal="PrefixDetailTable_config" %} + {% include 'inc/table_controls.html' with table_modal="PrefixTable_config" %} {% include 'utilities/obj_table.html' with heading='Child Prefixes' bulk_edit_url='ipam:prefix_bulk_edit' bulk_delete_url='ipam:prefix_bulk_delete' parent=prefix %}
- {% table_config_form table table_name="PrefixDetailTable" %} + {% table_config_form table table_name="PrefixTable" %} {% endblock %} diff --git a/netbox/virtualization/tables.py b/netbox/virtualization/tables.py index c6d42d3c1..b0e922e71 100644 --- a/netbox/virtualization/tables.py +++ b/netbox/virtualization/tables.py @@ -12,12 +12,13 @@ __all__ = ( 'ClusterTable', 'ClusterGroupTable', 'ClusterTypeTable', - 'VirtualMachineDetailTable', 'VirtualMachineTable', 'VirtualMachineVMInterfaceTable', 'VMInterfaceTable', ) +PRIMARY_IP_ORDERING = ('primary_ip4', 'primary_ip6') if settings.PREFER_IPV4 else ('primary_ip6', 'primary_ip4') + VMINTERFACE_BUTTONS = """ {% if perms.ipam.add_ipaddress %} @@ -118,13 +119,7 @@ class VirtualMachineTable(BaseTable): ) role = ColoredLabelColumn() tenant = TenantColumn() - - class Meta(BaseTable.Meta): - model = VirtualMachine - fields = ('pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk') - - -class VirtualMachineDetailTable(VirtualMachineTable): + comments = MarkdownColumn() primary_ip4 = tables.Column( linkify=True, verbose_name='IPv4 Address' @@ -133,19 +128,11 @@ class VirtualMachineDetailTable(VirtualMachineTable): linkify=True, verbose_name='IPv6 Address' ) - if settings.PREFER_IPV4: - primary_ip = tables.Column( - linkify=True, - order_by=('primary_ip4', 'primary_ip6'), - verbose_name='IP Address' - ) - else: - primary_ip = tables.Column( - linkify=True, - order_by=('primary_ip6', 'primary_ip4'), - verbose_name='IP Address' - ) - comments = MarkdownColumn() + primary_ip = tables.Column( + linkify=True, + order_by=PRIMARY_IP_ORDERING, + verbose_name='IP Address' + ) tags = TagColumn( url_name='virtualization:virtualmachine_list' ) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 115ca0a29..8315ba0a6 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -171,7 +171,11 @@ class ClusterVirtualMachinesView(generic.ObjectView): def get_extra_context(self, request, instance): virtualmachines = VirtualMachine.objects.restrict(request.user, 'view').filter(cluster=instance) - virtualmachines_table = tables.VirtualMachineTable(virtualmachines, orderable=False) + virtualmachines_table = tables.VirtualMachineTable( + virtualmachines, + exclude=('cluster',), + orderable=False + ) return { 'virtualmachines_table': virtualmachines_table, @@ -315,7 +319,7 @@ class VirtualMachineListView(generic.ObjectListView): queryset = VirtualMachine.objects.all() filterset = filtersets.VirtualMachineFilterSet filterset_form = forms.VirtualMachineFilterForm - table = tables.VirtualMachineDetailTable + table = tables.VirtualMachineTable template_name = 'virtualization/virtualmachine_list.html'