Coverage for vpn/tables/tunnels.py: 100%
38 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import django_tables2 as tables
2from django.utils.translation import gettext_lazy as _
3from django_tables2.utils import Accessor
5from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
7from vpn.models import *
9__all__ = (
10 'TunnelGroupTable',
11 'TunnelTable',
12 'TunnelTerminationTable',
13)
16class TunnelGroupTable(ContactsColumnMixin, OrganizationalModelTable):
17 name = tables.Column(
18 verbose_name=_('Name'),
19 linkify=True
20 )
21 tunnel_count = columns.LinkedCountColumn(
22 viewname='vpn:tunnel_list',
23 url_params={'group_id': 'pk'},
24 verbose_name=_('Tunnels')
25 )
26 tags = columns.TagColumn(
27 url_name='vpn:tunnelgroup_list'
28 )
30 class Meta(OrganizationalModelTable.Meta):
31 model = TunnelGroup
32 fields = (
33 'pk', 'id', 'name', 'tunnel_count', 'description', 'comments', 'slug', 'contacts', 'tags', 'actions',
34 'created', 'last_updated',
35 )
36 default_columns = ('pk', 'name', 'tunnel_count', 'description')
39class TunnelTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
40 name = tables.Column(
41 verbose_name=_('Name'),
42 linkify=True
43 )
44 group = tables.Column(
45 verbose_name=_('Group'),
46 linkify=True
47 )
48 status = columns.ChoiceFieldColumn(
49 verbose_name=_('Status')
50 )
51 ipsec_profile = tables.Column(
52 verbose_name=_('IPSec profile'),
53 linkify=True
54 )
55 terminations_count = columns.LinkedCountColumn(
56 accessor=Accessor('count_terminations'),
57 viewname='vpn:tunneltermination_list',
58 url_params={'tunnel_id': 'pk'},
59 verbose_name=_('Terminations')
60 )
61 tags = columns.TagColumn(
62 url_name='vpn:tunnel_list'
63 )
65 class Meta(PrimaryModelTable.Meta):
66 model = Tunnel
67 fields = (
68 'pk', 'id', 'name', 'group', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tenant_group',
69 'tunnel_id', 'terminations_count', 'description', 'contacts', 'comments', 'tags', 'created',
70 'last_updated',
71 )
72 default_columns = ('pk', 'name', 'group', 'status', 'encapsulation', 'tenant', 'terminations_count')
75class TunnelTerminationTable(NetBoxTable):
76 tunnel = tables.Column(
77 verbose_name=_('Tunnel'),
78 linkify=True
79 )
80 role = columns.ChoiceFieldColumn(
81 verbose_name=_('Role')
82 )
83 termination_parent = tables.Column(
84 accessor='termination__parent_object',
85 linkify=True,
86 orderable=False,
87 verbose_name=_('Host')
88 )
89 termination = tables.Column(
90 verbose_name=_('Tunnel interface'),
91 linkify=True,
92 orderable=False,
93 )
94 ip_addresses = columns.ManyToManyColumn(
95 accessor=tables.A('termination__ip_addresses'),
96 orderable=False,
97 linkify_item=True,
98 verbose_name=_('IP Addresses')
99 )
100 outside_ip = tables.Column(
101 verbose_name=_('Outside IP'),
102 linkify=True
103 )
104 tags = columns.TagColumn(
105 url_name='vpn:tunneltermination_list'
106 )
108 class Meta(NetBoxTable.Meta):
109 model = TunnelTermination
110 fields = (
111 'pk', 'id', 'tunnel', 'role', 'termination_parent', 'termination', 'ip_addresses', 'outside_ip', 'tags',
112 'created', 'last_updated',
113 )
114 default_columns = (
115 'pk', 'id', 'tunnel', 'role', 'termination_parent', 'termination', 'ip_addresses', 'outside_ip',
116 )