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

1import django_tables2 as tables 

2from django.utils.translation import gettext_lazy as _ 

3from django_tables2.utils import Accessor 

4 

5from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns 

6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin 

7from vpn.models import * 

8 

9__all__ = ( 

10 'TunnelGroupTable', 

11 'TunnelTable', 

12 'TunnelTerminationTable', 

13) 

14 

15 

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 ) 

29 

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') 

37 

38 

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 ) 

64 

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') 

73 

74 

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 ) 

107 

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 )