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

#492: Extend IPAM tables

This commit is contained in:
Jeremy Stretch
2020-04-29 11:29:30 -04:00
parent 7ad27a2b65
commit 6e9e6af2f0

View File

@ -190,12 +190,20 @@ TENANT_LINK = """
class VRFTable(BaseTable): class VRFTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
name = tables.LinkColumn() name = tables.LinkColumn()
rd = tables.Column(verbose_name='RD') rd = tables.Column(
tenant = tables.TemplateColumn(template_code=COL_TENANT) verbose_name='RD'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
enforce_unique = BooleanColumn(
verbose_name='Unique'
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = VRF model = VRF
fields = ('pk', 'name', 'rd', 'tenant', 'description') fields = ('pk', 'name', 'rd', 'tenant', 'enforce_unique', 'description')
default_columns = ('pk', 'name', 'rd', 'tenant', 'description')
# #
@ -204,14 +212,23 @@ class VRFTable(BaseTable):
class RIRTable(BaseTable): class RIRTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
name = tables.LinkColumn(verbose_name='Name') name = tables.LinkColumn()
is_private = BooleanColumn(verbose_name='Private') is_private = BooleanColumn(
aggregate_count = tables.Column(verbose_name='Aggregates') verbose_name='Private'
actions = tables.TemplateColumn(template_code=RIR_ACTIONS, attrs={'td': {'class': 'text-right noprint'}}, verbose_name='') )
aggregate_count = tables.Column(
verbose_name='Aggregates'
)
actions = tables.TemplateColumn(
template_code=RIR_ACTIONS,
attrs={'td': {'class': 'text-right noprint'}},
verbose_name=''
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = RIR model = RIR
fields = ('pk', 'name', 'is_private', 'aggregate_count', 'description', 'actions') fields = ('pk', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'actions')
default_columns = ('pk', 'name', 'is_private', 'aggregate_count', 'description', 'actions')
class RIRDetailTable(RIRTable): class RIRDetailTable(RIRTable):
@ -247,6 +264,10 @@ class RIRDetailTable(RIRTable):
class Meta(RIRTable.Meta): class Meta(RIRTable.Meta):
fields = ( fields = (
'pk', 'name', 'slug', 'is_private', 'aggregate_count', 'stats_total', 'stats_active', 'stats_reserved',
'stats_deprecated', 'stats_available', 'utilization', 'actions',
)
default_columns = (
'pk', 'name', 'is_private', 'aggregate_count', 'stats_total', 'stats_active', 'stats_reserved', 'pk', 'name', 'is_private', 'aggregate_count', 'stats_total', 'stats_active', 'stats_reserved',
'stats_deprecated', 'stats_available', 'utilization', 'actions', 'stats_deprecated', 'stats_available', 'utilization', 'actions',
) )
@ -258,8 +279,13 @@ class RIRDetailTable(RIRTable):
class AggregateTable(BaseTable): class AggregateTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
prefix = tables.LinkColumn(verbose_name='Aggregate') prefix = tables.LinkColumn(
date_added = tables.DateColumn(format="Y-m-d", verbose_name='Added') verbose_name='Aggregate'
)
date_added = tables.DateColumn(
format="Y-m-d",
verbose_name='Added'
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = Aggregate model = Aggregate
@ -267,8 +293,13 @@ class AggregateTable(BaseTable):
class AggregateDetailTable(AggregateTable): class AggregateDetailTable(AggregateTable):
child_count = tables.Column(verbose_name='Prefixes') child_count = tables.Column(
utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False, verbose_name='Utilization') verbose_name='Prefixes'
)
utilization = tables.TemplateColumn(
template_code=UTILIZATION_GRAPH,
orderable=False
)
class Meta(AggregateTable.Meta): class Meta(AggregateTable.Meta):
fields = ('pk', 'prefix', 'rir', 'child_count', 'utilization', 'date_added', 'description') fields = ('pk', 'prefix', 'rir', 'child_count', 'utilization', 'date_added', 'description')
@ -300,7 +331,8 @@ class RoleTable(BaseTable):
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = Role model = Role
fields = ('pk', 'name', 'prefix_count', 'vlan_count', 'description', 'slug', 'weight', 'actions') fields = ('pk', 'name', 'slug', 'prefix_count', 'vlan_count', 'description', 'weight', 'actions')
default_columns = ('pk', 'name', 'prefix_count', 'vlan_count', 'description', 'actions')
# #
@ -309,28 +341,61 @@ class RoleTable(BaseTable):
class PrefixTable(BaseTable): class PrefixTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
prefix = tables.TemplateColumn(PREFIX_LINK, attrs={'th': {'style': 'padding-left: 17px'}}) prefix = tables.TemplateColumn(
status = tables.TemplateColumn(STATUS_LABEL) template_code=PREFIX_LINK,
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF') attrs={'th': {'style': 'padding-left: 17px'}}
tenant = tables.TemplateColumn(template_code=TENANT_LINK) )
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')]) status = tables.TemplateColumn(
vlan = tables.LinkColumn('ipam:vlan', args=[Accessor('vlan.pk')], verbose_name='VLAN') template_code=STATUS_LABEL
role = tables.TemplateColumn(PREFIX_ROLE_LINK) )
vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
)
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
site = tables.LinkColumn(
viewname='dcim:site',
args=[Accessor('site.slug')]
)
vlan = tables.LinkColumn(
viewname='ipam:vlan',
args=[Accessor('vlan.pk')],
verbose_name='VLAN'
)
role = tables.TemplateColumn(
template_code=PREFIX_ROLE_LINK
)
is_pool = BooleanColumn(
verbose_name='Pool'
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = Prefix model = Prefix
fields = ('pk', 'prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'description') fields = ('pk', 'prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'is_pool', 'description')
default_columns = ('pk', 'prefix', 'status', 'vrf', 'tenant', 'site', 'vlan', 'role', 'description')
row_attrs = { row_attrs = {
'class': lambda record: 'success' if not record.pk else '', 'class': lambda record: 'success' if not record.pk else '',
} }
class PrefixDetailTable(PrefixTable): class PrefixDetailTable(PrefixTable):
utilization = tables.TemplateColumn(UTILIZATION_GRAPH, orderable=False) utilization = tables.TemplateColumn(
tenant = tables.TemplateColumn(template_code=COL_TENANT) template_code=UTILIZATION_GRAPH,
orderable=False
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
class Meta(PrefixTable.Meta): class Meta(PrefixTable.Meta):
fields = ('pk', 'prefix', 'status', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'description') fields = (
'pk', 'prefix', 'status', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'is_pool', 'description',
)
default_columns = (
'pk', 'prefix', 'status', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'description',
)
# #
@ -339,12 +404,27 @@ class PrefixDetailTable(PrefixTable):
class IPAddressTable(BaseTable): class IPAddressTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
address = tables.TemplateColumn(IPADDRESS_LINK, verbose_name='IP Address') address = tables.TemplateColumn(
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF') template_code=IPADDRESS_LINK,
status = tables.TemplateColumn(STATUS_LABEL) verbose_name='IP Address'
tenant = tables.TemplateColumn(template_code=TENANT_LINK) )
parent = tables.TemplateColumn(IPADDRESS_PARENT, orderable=False) vrf = tables.TemplateColumn(
interface = tables.Column(orderable=False) template_code=VRF_LINK,
verbose_name='VRF'
)
status = tables.TemplateColumn(
template_code=STATUS_LABEL
)
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
parent = tables.TemplateColumn(
template_code=IPADDRESS_PARENT,
orderable=False
)
interface = tables.Column(
orderable=False
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = IPAddress model = IPAddress
@ -358,22 +438,40 @@ class IPAddressTable(BaseTable):
class IPAddressDetailTable(IPAddressTable): class IPAddressDetailTable(IPAddressTable):
nat_inside = tables.LinkColumn( nat_inside = tables.LinkColumn(
'ipam:ipaddress', args=[Accessor('nat_inside.pk')], orderable=False, verbose_name='NAT (Inside)' viewname='ipam:ipaddress',
args=[Accessor('nat_inside.pk')],
orderable=False,
verbose_name='NAT (Inside)'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
) )
tenant = tables.TemplateColumn(template_code=COL_TENANT)
class Meta(IPAddressTable.Meta): class Meta(IPAddressTable.Meta):
fields = ( fields = (
'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'parent', 'interface', 'dns_name', 'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'nat_inside', 'parent', 'interface', 'dns_name',
'description', 'description',
) )
default_columns = (
'pk', 'address', 'vrf', 'status', 'role', 'tenant', 'parent', 'interface', 'dns_name', 'description',
)
class IPAddressAssignTable(BaseTable): class IPAddressAssignTable(BaseTable):
address = tables.TemplateColumn(IPADDRESS_ASSIGN_LINK, verbose_name='IP Address') address = tables.TemplateColumn(
status = tables.TemplateColumn(STATUS_LABEL) template_code=IPADDRESS_ASSIGN_LINK,
parent = tables.TemplateColumn(IPADDRESS_PARENT, orderable=False) verbose_name='IP Address'
interface = tables.Column(orderable=False) )
status = tables.TemplateColumn(
template_code=STATUS_LABEL
)
parent = tables.TemplateColumn(
template_code=IPADDRESS_PARENT,
orderable=False
)
interface = tables.Column(
orderable=False
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = IPAddress model = IPAddress
@ -385,10 +483,19 @@ class InterfaceIPAddressTable(BaseTable):
""" """
List IP addresses assigned to a specific Interface. List IP addresses assigned to a specific Interface.
""" """
address = tables.LinkColumn(verbose_name='IP Address') address = tables.LinkColumn(
vrf = tables.TemplateColumn(VRF_LINK, verbose_name='VRF') verbose_name='IP Address'
status = tables.TemplateColumn(STATUS_LABEL) )
tenant = tables.TemplateColumn(template_code=TENANT_LINK) vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
)
status = tables.TemplateColumn(
template_code=STATUS_LABEL
)
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = IPAddress model = IPAddress
@ -401,16 +508,24 @@ class InterfaceIPAddressTable(BaseTable):
class VLANGroupTable(BaseTable): class VLANGroupTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
name = tables.LinkColumn(verbose_name='Name') name = tables.LinkColumn()
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site') site = tables.LinkColumn(
vlan_count = tables.Column(verbose_name='VLANs') viewname='dcim:site',
slug = tables.Column(verbose_name='Slug') args=[Accessor('site.slug')]
actions = tables.TemplateColumn(template_code=VLANGROUP_ACTIONS, attrs={'td': {'class': 'text-right noprint'}}, )
verbose_name='') vlan_count = tables.Column(
verbose_name='VLANs'
)
actions = tables.TemplateColumn(
template_code=VLANGROUP_ACTIONS,
attrs={'td': {'class': 'text-right noprint'}},
verbose_name=''
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = VLANGroup model = VLANGroup
fields = ('pk', 'name', 'site', 'vlan_count', 'slug', 'description', 'actions') fields = ('pk', 'name', 'site', 'vlan_count', 'slug', 'description', 'actions')
default_columns = ('pk', 'name', 'site', 'vlan_count', 'description', 'actions')
# #
@ -419,12 +534,27 @@ class VLANGroupTable(BaseTable):
class VLANTable(BaseTable): class VLANTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
vid = tables.TemplateColumn(VLAN_LINK, verbose_name='ID') vid = tables.TemplateColumn(
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')]) template_code=VLAN_LINK,
group = tables.LinkColumn('ipam:vlangroup_vlans', args=[Accessor('group.pk')], verbose_name='Group') verbose_name='ID'
tenant = tables.TemplateColumn(template_code=COL_TENANT) )
status = tables.TemplateColumn(STATUS_LABEL) site = tables.LinkColumn(
role = tables.TemplateColumn(VLAN_ROLE_LINK) viewname='dcim:site',
args=[Accessor('site.slug')]
)
group = tables.LinkColumn(
viewname='ipam:vlangroup_vlans',
args=[Accessor('group.pk')]
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
status = tables.TemplateColumn(
template_code=STATUS_LABEL
)
role = tables.TemplateColumn(
template_code=VLAN_ROLE_LINK
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = VLAN model = VLAN
@ -435,16 +565,26 @@ class VLANTable(BaseTable):
class VLANDetailTable(VLANTable): class VLANDetailTable(VLANTable):
prefixes = tables.TemplateColumn(VLAN_PREFIXES, orderable=False, verbose_name='Prefixes') prefixes = tables.TemplateColumn(
tenant = tables.TemplateColumn(template_code=COL_TENANT) template_code=VLAN_PREFIXES,
orderable=False,
verbose_name='Prefixes'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
class Meta(VLANTable.Meta): class Meta(VLANTable.Meta):
fields = ('pk', 'vid', 'site', 'group', 'name', 'prefixes', 'tenant', 'status', 'role', 'description') fields = ('pk', 'vid', 'site', 'group', 'name', 'prefixes', 'tenant', 'status', 'role', 'description')
class VLANMemberTable(BaseTable): class VLANMemberTable(BaseTable):
parent = tables.LinkColumn(order_by=['device', 'virtual_machine']) parent = tables.LinkColumn(
name = tables.LinkColumn(verbose_name='Interface') order_by=['device', 'virtual_machine']
)
name = tables.LinkColumn(
verbose_name='Interface'
)
untagged = tables.TemplateColumn( untagged = tables.TemplateColumn(
template_code=VLAN_MEMBER_UNTAGGED, template_code=VLAN_MEMBER_UNTAGGED,
orderable=False orderable=False
@ -464,13 +604,29 @@ class InterfaceVLANTable(BaseTable):
""" """
List VLANs assigned to a specific Interface. List VLANs assigned to a specific Interface.
""" """
vid = tables.LinkColumn('ipam:vlan', args=[Accessor('pk')], verbose_name='ID') vid = tables.LinkColumn(
viewname='ipam:vlan',
args=[Accessor('pk')],
verbose_name='ID'
)
tagged = BooleanColumn() tagged = BooleanColumn()
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')]) site = tables.LinkColumn(
group = tables.Column(accessor=Accessor('group.name'), verbose_name='Group') viewname='dcim:site',
tenant = tables.TemplateColumn(template_code=COL_TENANT) args=[Accessor('site.slug')]
status = tables.TemplateColumn(STATUS_LABEL) )
role = tables.TemplateColumn(VLAN_ROLE_LINK) group = tables.Column(
accessor=Accessor('group.name'),
verbose_name='Group'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
status = tables.TemplateColumn(
template_code=STATUS_LABEL
)
role = tables.TemplateColumn(
template_code=VLAN_ROLE_LINK
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = VLAN model = VLAN
@ -494,4 +650,5 @@ class ServiceTable(BaseTable):
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = Service model = Service
fields = ('pk', 'name', 'parent', 'protocol', 'port', 'description') fields = ('pk', 'name', 'parent', 'protocol', 'port', 'ipaddresses', 'description')
default_columns = ('pk', 'name', 'parent', 'protocol', 'port', 'description')