13150 internationalize ipam tables

This commit is contained in:
Arthur 2023-07-26 11:53:55 +07:00
parent a4c7fb8294
commit 90d751db26
8 changed files with 301 additions and 124 deletions

View File

@ -2,7 +2,7 @@ import json
import django_tables2 as tables
from django.conf import settings
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy as _
from extras.models import *
from netbox.tables import NetBoxTable, columns
@ -44,8 +44,11 @@ REVISION_BUTTONS = """
class ConfigRevisionTable(NetBoxTable):
is_active = columns.BooleanColumn()
is_active = columns.BooleanColumn(
verbose_name=_('Is active'),
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('delete',),
extra_buttons=REVISION_BUTTONS
)
@ -60,18 +63,29 @@ class ConfigRevisionTable(NetBoxTable):
class CustomFieldTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
content_types = columns.ContentTypesColumn()
required = columns.BooleanColumn()
ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility")
description = columns.MarkdownColumn()
content_types = columns.ContentTypesColumn(
verbose_name=_('Content types'),
)
required = columns.BooleanColumn(
verbose_name=_('Required'),
)
ui_visibility = columns.ChoiceFieldColumn(
verbose_name=_("UI visibility")
)
description = columns.MarkdownColumn(
verbose_name=_('Description'),
)
choices = columns.ArrayColumn(
max_items=10,
orderable=False,
verbose_name=_('Choices')
)
is_cloneable = columns.BooleanColumn()
is_cloneable = columns.BooleanColumn(
verbose_name=_('Is cloneable'),
)
class Meta(NetBoxTable.Meta):
model = CustomField
@ -85,6 +99,7 @@ class CustomFieldTable(NetBoxTable):
class CustomFieldChoiceSetTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
choices = columns.ArrayColumn(
@ -99,7 +114,9 @@ class CustomFieldChoiceSetTable(NetBoxTable):
orderable=False,
verbose_name=_('Count')
)
order_alphabetically = columns.BooleanColumn()
order_alphabetically = columns.BooleanColumn(
verbose_name=_('Order alphabetically'),
)
class Meta(NetBoxTable.Meta):
model = CustomFieldChoiceSet
@ -112,11 +129,18 @@ class CustomFieldChoiceSetTable(NetBoxTable):
class CustomLinkTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
content_types = columns.ContentTypesColumn()
enabled = columns.BooleanColumn()
new_window = columns.BooleanColumn()
content_types = columns.ContentTypesColumn(
verbose_name=_('Content types'),
)
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
new_window = columns.BooleanColumn(
verbose_name=_('New window'),
)
class Meta(NetBoxTable.Meta):
model = CustomLink
@ -129,19 +153,26 @@ class CustomLinkTable(NetBoxTable):
class ExportTemplateTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
content_types = columns.ContentTypesColumn()
as_attachment = columns.BooleanColumn()
content_types = columns.ContentTypesColumn(
verbose_name=_('Content types'),
)
as_attachment = columns.BooleanColumn(
verbose_name=_('As attachment'),
)
data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True
)
data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True
)
is_synced = columns.BooleanColumn(
orderable=False,
verbose_name='Synced'
verbose_name=_('Synced')
)
class Meta(NetBoxTable.Meta):
@ -157,18 +188,23 @@ class ExportTemplateTable(NetBoxTable):
class ImageAttachmentTable(NetBoxTable):
id = tables.Column(
verbose_name=_('ID'),
linkify=False
)
content_type = columns.ContentTypeColumn()
content_type = columns.ContentTypeColumn(
verbose_name=_('Content type'),
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True
)
image = tables.TemplateColumn(
verbose_name=_('Image'),
template_code=IMAGEATTACHMENT_IMAGE,
)
size = tables.Column(
orderable=False,
verbose_name='Size (bytes)'
verbose_name=_('Size (bytes)')
)
class Meta(NetBoxTable.Meta):
@ -182,11 +218,18 @@ class ImageAttachmentTable(NetBoxTable):
class SavedFilterTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
content_types = columns.ContentTypesColumn()
enabled = columns.BooleanColumn()
shared = columns.BooleanColumn()
content_types = columns.ContentTypesColumn(
verbose_name=_('Content types'),
)
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
shared = columns.BooleanColumn(
verbose_name=_('Shared'),
)
def value_parameters(self, value):
return json.dumps(value)
@ -203,11 +246,15 @@ class SavedFilterTable(NetBoxTable):
class BookmarkTable(NetBoxTable):
object_type = columns.ContentTypeColumn()
object_type = columns.ContentTypeColumn(
verbose_name=_('Object types'),
)
object = tables.Column(
verbose_name=_('Object'),
linkify=True
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('delete',)
)
@ -219,27 +266,32 @@ class BookmarkTable(NetBoxTable):
class WebhookTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
content_types = columns.ContentTypesColumn()
enabled = columns.BooleanColumn()
content_types = columns.ContentTypesColumn(
verbose_name=_('Content types'),
)
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
type_create = columns.BooleanColumn(
verbose_name='Create'
verbose_name=_('Create')
)
type_update = columns.BooleanColumn(
verbose_name='Update'
verbose_name=_('Update')
)
type_delete = columns.BooleanColumn(
verbose_name='Delete'
verbose_name=_('Delete')
)
type_job_start = columns.BooleanColumn(
verbose_name='Job start'
verbose_name=_('Job start')
)
type_job_end = columns.BooleanColumn(
verbose_name='Job end'
verbose_name=_('Job end')
)
ssl_validation = columns.BooleanColumn(
verbose_name='SSL Validation'
verbose_name=_('SSL Validation')
)
class Meta(NetBoxTable.Meta):
@ -257,10 +309,15 @@ class WebhookTable(NetBoxTable):
class TagTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
color = columns.ColorColumn()
object_types = columns.ContentTypesColumn()
color = columns.ColorColumn(
verbose_name=_('Color'),
)
object_types = columns.ContentTypesColumn(
verbose_name=_('Object types'),
)
class Meta(NetBoxTable.Meta):
model = Tag
@ -273,19 +330,20 @@ class TagTable(NetBoxTable):
class TaggedItemTable(NetBoxTable):
id = tables.Column(
verbose_name='ID',
verbose_name=_('ID'),
linkify=lambda record: record.content_object.get_absolute_url(),
accessor='content_object__id'
)
content_type = columns.ContentTypeColumn(
verbose_name='Type'
verbose_name=_('Type')
)
content_object = tables.Column(
linkify=True,
orderable=False,
verbose_name='Object'
verbose_name=_('Object')
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=()
)
@ -296,20 +354,23 @@ class TaggedItemTable(NetBoxTable):
class ConfigContextTable(NetBoxTable):
data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True
)
data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True
)
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
is_active = columns.BooleanColumn(
verbose_name='Active'
verbose_name=_('Active')
)
is_synced = columns.BooleanColumn(
orderable=False,
verbose_name='Synced'
verbose_name=_('Synced')
)
class Meta(NetBoxTable.Meta):
@ -324,17 +385,20 @@ class ConfigContextTable(NetBoxTable):
class ConfigTemplateTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True
)
data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True
)
is_synced = columns.BooleanColumn(
orderable=False,
verbose_name='Synced'
verbose_name=_('Synced')
)
tags = columns.TagColumn(
url_name='extras:configtemplate_list'
@ -353,33 +417,37 @@ class ConfigTemplateTable(NetBoxTable):
class ObjectChangeTable(NetBoxTable):
time = tables.DateTimeColumn(
verbose_name=_('Time'),
linkify=True,
format=settings.SHORT_DATETIME_FORMAT
)
user_name = tables.Column(
verbose_name='Username'
verbose_name=_('Username')
)
full_name = tables.TemplateColumn(
accessor=tables.A('user'),
template_code=OBJECTCHANGE_FULL_NAME,
verbose_name='Full Name',
verbose_name=_('Full Name'),
orderable=False
)
action = columns.ChoiceFieldColumn()
action = columns.ChoiceFieldColumn(
verbose_name=_('Action'),
)
changed_object_type = columns.ContentTypeColumn(
verbose_name='Type'
verbose_name=_('Type')
)
object_repr = tables.TemplateColumn(
accessor=tables.A('changed_object'),
template_code=OBJECTCHANGE_OBJECT,
verbose_name='Object',
verbose_name=_('Object'),
orderable=False
)
request_id = tables.TemplateColumn(
template_code=OBJECTCHANGE_REQUEST_ID,
verbose_name='Request ID'
verbose_name=_('Request ID')
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=()
)
@ -393,23 +461,28 @@ class ObjectChangeTable(NetBoxTable):
class JournalEntryTable(NetBoxTable):
created = tables.DateTimeColumn(
verbose_name=_('Created'),
linkify=True,
format=settings.SHORT_DATETIME_FORMAT
)
assigned_object_type = columns.ContentTypeColumn(
verbose_name='Object type'
verbose_name=_('Object type')
)
assigned_object = tables.Column(
linkify=True,
orderable=False,
verbose_name='Object'
verbose_name=_('Object')
)
kind = columns.ChoiceFieldColumn(
verbose_name=_('Kind'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
kind = columns.ChoiceFieldColumn()
comments = columns.MarkdownColumn()
comments_short = tables.TemplateColumn(
accessor=tables.A('comments'),
template_code='{{ value|markdown|truncatewords_html:50 }}',
verbose_name='Comments (Short)'
verbose_name=_('Comments (Short)')
)
tags = columns.TagColumn(
url_name='extras:journalentry_list'

View File

@ -1,5 +1,5 @@
import django_tables2 as tables
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy as _
from ipam.models import *
from netbox.tables import NetBoxTable, columns
@ -13,9 +13,11 @@ __all__ = (
class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
rir = tables.Column(
verbose_name=_('RIR'),
linkify=True
)
tags = columns.TagColumn(
@ -36,9 +38,11 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
class ASNTable(TenancyColumnsMixin, NetBoxTable):
asn = tables.Column(
verbose_name=_('ASN'),
linkify=True
)
rir = tables.Column(
verbose_name=_('RIR'),
linkify=True
)
asn_asdot = tables.Column(
@ -60,7 +64,9 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable):
linkify_item=True,
verbose_name=_('Sites')
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:asn_list'
)

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from ipam.models import *
@ -18,17 +19,20 @@ IPADDRESSES = """
class FHRPGroupTable(NetBoxTable):
group_id = tables.Column(
verbose_name=_('Group ID'),
linkify=True
)
ip_addresses = tables.TemplateColumn(
template_code=IPADDRESSES,
orderable=False,
verbose_name='IP Addresses'
verbose_name=_('IP Addresses')
)
member_count = tables.Column(
verbose_name='Members'
verbose_name=_('Members')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='ipam:fhrpgroup_list'
)
@ -52,16 +56,19 @@ class FHRPGroupAssignmentTable(NetBoxTable):
accessor=tables.A('interface__parent_object'),
linkify=True,
orderable=False,
verbose_name='Parent'
verbose_name=_('Parent')
)
interface = tables.Column(
linkify=True,
orderable=False
orderable=False,
verbose_name=_('Interface'),
)
group = tables.Column(
verbose_name=_('Group'),
linkify=True
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit', 'delete')
)

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from django.utils.safestring import mark_safe
from django_tables2.utils import Accessor
@ -17,7 +18,7 @@ __all__ = (
'RoleTable',
)
AVAILABLE_LABEL = mark_safe('<span class="badge bg-success">Available</span>')
AVAILABLE_LABEL = mark_safe(_('<span class="badge bg-success">Available</span>'))
AGGREGATE_COPY_BUTTON = """
{% copy_content record.pk prefix="aggregate_" %}
@ -46,7 +47,7 @@ PREFIX_LINK_WITH_DEPTH = """
{% endif %}
""" + PREFIX_LINK
IPADDRESS_LINK = """
IPADDRESS_LINK = _("""
{% if record.pk %}
<a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a>
{% elif perms.ipam.add_ipaddress %}
@ -54,7 +55,7 @@ IPADDRESS_LINK = """
{% else %}
{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available
{% endif %}
"""
""")
IPADDRESS_COPY_BUTTON = """
{% copy_content record.pk prefix="ipaddress_" %}
@ -81,15 +82,16 @@ VRF_LINK = """
class RIRTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
is_private = columns.BooleanColumn(
verbose_name='Private'
verbose_name=_('Private')
)
aggregate_count = columns.LinkedCountColumn(
viewname='ipam:aggregate_list',
url_params={'rir_id': 'pk'},
verbose_name='Aggregates'
verbose_name=_('Aggregates')
)
tags = columns.TagColumn(
url_name='ipam:rir_list'
@ -111,7 +113,7 @@ class RIRTable(NetBoxTable):
class AggregateTable(TenancyColumnsMixin, NetBoxTable):
prefix = tables.Column(
linkify=True,
verbose_name='Aggregate',
verbose_name=_('Aggregate'),
attrs={
# Allow the aggregate to be copied to the clipboard
'a': {'id': lambda record: f"aggregate_{record.pk}"}
@ -119,20 +121,24 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
)
date_added = tables.DateColumn(
format="Y-m-d",
verbose_name='Added'
verbose_name=_('Added')
)
child_count = tables.Column(
verbose_name='Prefixes'
verbose_name=_('Prefixes')
)
utilization = columns.UtilizationColumn(
verbose_name=_('Utilization'),
accessor='get_utilization',
orderable=False
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:aggregate_list'
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=AGGREGATE_COPY_BUTTON
)
@ -151,22 +157,23 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
class RoleTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
prefix_count = columns.LinkedCountColumn(
viewname='ipam:prefix_list',
url_params={'role_id': 'pk'},
verbose_name='Prefixes'
verbose_name=_('Prefixes')
)
iprange_count = columns.LinkedCountColumn(
viewname='ipam:iprange_list',
url_params={'role_id': 'pk'},
verbose_name='IP Ranges'
verbose_name=_('IP Ranges')
)
vlan_count = columns.LinkedCountColumn(
viewname='ipam:vlan_list',
url_params={'role_id': 'pk'},
verbose_name='VLANs'
verbose_name=_('VLANs')
)
tags = columns.TagColumn(
url_name='ipam:role_list'
@ -202,6 +209,7 @@ class PrefixUtilizationColumn(columns.UtilizationColumn):
class PrefixTable(TenancyColumnsMixin, NetBoxTable):
prefix = columns.TemplateColumn(
verbose_name=_('Prefix'),
template_code=PREFIX_LINK_WITH_DEPTH,
export_raw=True,
attrs={'td': {'class': 'text-nowrap'}}
@ -210,11 +218,11 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
accessor=Accessor('prefix'),
template_code=PREFIX_LINK,
export_raw=True,
verbose_name='Prefix (Flat)'
verbose_name=_('Prefix (Flat)')
)
depth = tables.Column(
accessor=Accessor('_depth'),
verbose_name='Depth'
verbose_name=_('Depth')
)
children = columns.LinkedCountColumn(
accessor=Accessor('_children'),
@ -223,45 +231,52 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
'vrf_id': 'vrf_id',
'within': 'prefix',
},
verbose_name='Children'
verbose_name=_('Children')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL
)
vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
verbose_name=_('VRF')
)
site = tables.Column(
verbose_name=_('Site'),
linkify=True
)
vlan_group = tables.Column(
accessor='vlan__group',
linkify=True,
verbose_name='VLAN Group'
verbose_name=_('VLAN Group')
)
vlan = tables.Column(
linkify=True,
verbose_name='VLAN'
verbose_name=_('VLAN')
)
role = tables.Column(
verbose_name=_('Role'),
linkify=True
)
is_pool = columns.BooleanColumn(
verbose_name='Pool'
verbose_name=_('Pool')
)
mark_utilized = columns.BooleanColumn(
verbose_name='Marked Utilized'
verbose_name=_('Marked Utilized')
)
utilization = PrefixUtilizationColumn(
verbose_name=_('Utilization'),
accessor='get_utilization',
orderable=False
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:prefix_list'
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=PREFIX_COPY_BUTTON
)
@ -285,26 +300,32 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
#
class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
start_address = tables.Column(
verbose_name=_('Start address'),
linkify=True
)
vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
verbose_name=_('VRF')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL
)
role = tables.Column(
verbose_name=_('Role'),
linkify=True
)
mark_utilized = columns.BooleanColumn(
verbose_name='Marked Utilized'
verbose_name=_('Marked Utilized')
)
utilization = columns.UtilizationColumn(
verbose_name=_('Utilization'),
accessor='utilization',
orderable=False
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:iprange_list'
)
@ -330,47 +351,53 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
address = tables.TemplateColumn(
template_code=IPADDRESS_LINK,
verbose_name='IP Address'
verbose_name=_('IP Address')
)
vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
verbose_name=_('VRF')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL
)
role = columns.ChoiceFieldColumn()
role = columns.ChoiceFieldColumn(
verbose_name=_('Role'),
)
assigned_object = tables.Column(
linkify=True,
orderable=False,
verbose_name='Interface'
verbose_name=_('Interface')
)
assigned_object_parent = tables.Column(
accessor='assigned_object__parent_object',
linkify=True,
orderable=False,
verbose_name='Device/VM'
verbose_name=_('Device/VM')
)
nat_inside = tables.Column(
linkify=True,
orderable=False,
verbose_name='NAT (Inside)'
verbose_name=_('NAT (Inside)')
)
nat_outside = tables.ManyToManyColumn(
linkify_item=True,
orderable=False,
verbose_name='NAT (Outside)'
verbose_name=_('NAT (Outside)')
)
assigned = columns.BooleanColumn(
accessor='assigned_object_id',
linkify=lambda record: record.assigned_object.get_absolute_url(),
verbose_name='Assigned'
verbose_name=_('Assigned')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='ipam:ipaddress_list'
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=IPADDRESS_COPY_BUTTON
)
@ -391,10 +418,13 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
class IPAddressAssignTable(NetBoxTable):
address = tables.TemplateColumn(
template_code=IPADDRESS_ASSIGN_LINK,
verbose_name='IP Address'
verbose_name=_('IP Address')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
status = columns.ChoiceFieldColumn()
assigned_object = tables.Column(
verbose_name=_('Assigned object'),
orderable=False
)
@ -411,14 +441,18 @@ class AssignedIPAddressesTable(NetBoxTable):
"""
address = tables.Column(
linkify=True,
verbose_name='IP Address'
verbose_name=_('IP Address')
)
vrf = tables.TemplateColumn(
template_code=VRF_LINK,
verbose_name='VRF'
verbose_name=_('VRF')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
tenant = TenantColumn(
verbose_name=_('Tenant'),
)
status = columns.ChoiceFieldColumn()
tenant = TenantColumn()
class Meta(NetBoxTable.Meta):
model = IPAddress

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from ipam.models import L2VPN, L2VPNTermination
@ -17,19 +18,26 @@ L2VPN_TARGETS = """
class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
pk = columns.ToggleColumn()
pk = columns.ToggleColumn(
verbose_name=_('Pk'),
)
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
import_targets = columns.TemplateColumn(
verbose_name=_('Import targets'),
template_code=L2VPN_TARGETS,
orderable=False
)
export_targets = columns.TemplateColumn(
verbose_name=_('Export targets'),
template_code=L2VPN_TARGETS,
orderable=False
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:l2vpn_list'
)
@ -44,28 +52,30 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
class L2VPNTerminationTable(NetBoxTable):
pk = columns.ToggleColumn()
pk = columns.ToggleColumn(
verbose_name=_('Pk'),
)
l2vpn = tables.Column(
verbose_name='L2VPN',
verbose_name=_('L2VPN'),
linkify=True
)
assigned_object_type = columns.ContentTypeColumn(
verbose_name='Object Type'
verbose_name=_('Object Type')
)
assigned_object = tables.Column(
linkify=True,
orderable=False,
verbose_name='Object'
verbose_name=_('Object')
)
assigned_object_parent = tables.Column(
linkify=True,
orderable=False,
verbose_name='Object Parent'
verbose_name=_('Object Parent')
)
assigned_object_site = tables.Column(
linkify=True,
orderable=False,
verbose_name='Object Site'
verbose_name=_('Object Site')
)
class Meta(NetBoxTable.Meta):

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from ipam.models import *
@ -11,13 +12,17 @@ __all__ = (
class ServiceTemplateTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
ports = tables.Column(
verbose_name=_('Ports'),
accessor=tables.A('port_list'),
order_by=tables.A('ports'),
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:servicetemplate_list'
)
@ -32,17 +37,22 @@ class ServiceTemplateTable(NetBoxTable):
class ServiceTable(NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
order_by=('device', 'virtual_machine')
)
ports = tables.Column(
verbose_name=_('Ports'),
accessor=tables.A('port_list'),
order_by=tables.A('ports'),
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:service_list'
)

View File

@ -1,5 +1,6 @@
import django_tables2 as tables
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor
from dcim.models import Interface
@ -17,9 +18,9 @@ __all__ = (
'VLANVirtualMachinesTable',
)
AVAILABLE_LABEL = mark_safe('<span class="badge bg-success">Available</span>')
AVAILABLE_LABEL = mark_safe(_('<span class="badge bg-success">Available</span>'))
VLAN_LINK = """
VLAN_LINK = _("""
{% if record.pk %}
<a href="{{ record.get_absolute_url }}">{{ record.vid }}</a>
{% elif perms.ipam.add_vlan %}
@ -27,7 +28,7 @@ VLAN_LINK = """
{% else %}
{{ record.available }} VLAN{{ record.available|pluralize }} available
{% endif %}
"""
""")
VLAN_PREFIXES = """
{% for prefix in value.all %}
@ -59,25 +60,32 @@ VLAN_MEMBER_TAGGED = """
#
class VLANGroupTable(NetBoxTable):
name = tables.Column(linkify=True)
scope_type = columns.ContentTypeColumn()
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
scope_type = columns.ContentTypeColumn(
verbose_name=_('Scope type'),
)
scope = tables.Column(
verbose_name=_('Scope'),
linkify=True,
orderable=False
)
vlan_count = columns.LinkedCountColumn(
viewname='ipam:vlan_list',
url_params={'group_id': 'pk'},
verbose_name='VLANs'
verbose_name=_('VLANs')
)
utilization = columns.UtilizationColumn(
orderable=False,
verbose_name='Utilization'
verbose_name=_('Utilization')
)
tags = columns.TagColumn(
url_name='ipam:vlangroup_list'
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=VLANGROUP_BUTTONS
)
@ -97,35 +105,42 @@ class VLANGroupTable(NetBoxTable):
class VLANTable(TenancyColumnsMixin, NetBoxTable):
vid = tables.TemplateColumn(
template_code=VLAN_LINK,
verbose_name='VID'
verbose_name=_('VID')
)
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
site = tables.Column(
verbose_name=_('Site'),
linkify=True
)
group = tables.Column(
verbose_name=_('Group'),
linkify=True
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL
)
role = tables.Column(
verbose_name=_('Role'),
linkify=True
)
l2vpn = tables.Column(
accessor=tables.A('l2vpn_termination__l2vpn'),
linkify=True,
orderable=False,
verbose_name='L2VPN'
verbose_name=_('L2VPN')
)
prefixes = columns.TemplateColumn(
template_code=VLAN_PREFIXES,
orderable=False,
verbose_name='Prefixes'
verbose_name=_('Prefixes')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='ipam:vlan_list'
)
@ -148,9 +163,10 @@ class VLANMembersTable(NetBoxTable):
"""
name = tables.Column(
linkify=True,
verbose_name='Interface'
verbose_name=_('Interface')
)
tagged = tables.TemplateColumn(
verbose_name=_('Tagged'),
template_code=VLAN_MEMBER_TAGGED,
orderable=False
)
@ -158,9 +174,11 @@ class VLANMembersTable(NetBoxTable):
class VLANDevicesTable(VLANMembersTable):
device = tables.Column(
verbose_name=_('Device'),
linkify=True
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit',)
)
@ -172,9 +190,11 @@ class VLANDevicesTable(VLANMembersTable):
class VLANVirtualMachinesTable(VLANMembersTable):
virtual_machine = tables.Column(
verbose_name=_('Virtual machine'),
linkify=True
)
actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit',)
)
@ -190,19 +210,27 @@ class InterfaceVLANTable(NetBoxTable):
"""
vid = tables.Column(
linkify=True,
verbose_name='ID'
verbose_name=_('ID')
)
tagged = columns.BooleanColumn(
verbose_name=_('Tagged'),
)
tagged = columns.BooleanColumn()
site = tables.Column(
verbose_name=_('Site'),
linkify=True
)
group = tables.Column(
accessor=Accessor('group__name'),
verbose_name='Group'
verbose_name=_('Group')
)
tenant = TenantColumn(
verbose_name=_('Tenant'),
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
tenant = TenantColumn()
status = columns.ChoiceFieldColumn()
role = tables.Column(
verbose_name=_('Role'),
linkify=True
)

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from ipam.models import *
@ -22,23 +23,28 @@ VRF_TARGETS = """
class VRFTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
rd = tables.Column(
verbose_name='RD'
verbose_name=_('RD')
)
enforce_unique = columns.BooleanColumn(
verbose_name='Unique'
verbose_name=_('Unique')
)
import_targets = columns.TemplateColumn(
verbose_name=_('Import targets'),
template_code=VRF_TARGETS,
orderable=False
)
export_targets = columns.TemplateColumn(
verbose_name=_('Export targets'),
template_code=VRF_TARGETS,
orderable=False
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:vrf_list'
)
@ -58,9 +64,12 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
class RouteTargetTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
comments = columns.MarkdownColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:routetarget_list'
)