Coverage for virtualization/tables/clusters.py: 100%
36 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 _
4from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns
5from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
6from virtualization.models import Cluster, ClusterGroup, ClusterType
8__all__ = (
9 'ClusterGroupTable',
10 'ClusterTable',
11 'ClusterTypeTable',
12)
15class ClusterTypeTable(OrganizationalModelTable):
16 name = tables.Column(
17 verbose_name=_('Name'),
18 linkify=True
19 )
20 cluster_count = columns.LinkedCountColumn(
21 viewname='virtualization:cluster_list',
22 url_params={'type_id': 'pk'},
23 verbose_name=_('Clusters')
24 )
25 tags = columns.TagColumn(
26 url_name='virtualization:clustertype_list'
27 )
29 class Meta(OrganizationalModelTable.Meta):
30 model = ClusterType
31 fields = (
32 'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'comments', 'created', 'last_updated', 'tags',
33 'actions',
34 )
35 default_columns = ('pk', 'name', 'cluster_count', 'description')
38class ClusterGroupTable(ContactsColumnMixin, OrganizationalModelTable):
39 name = tables.Column(
40 verbose_name=_('Name'),
41 linkify=True
42 )
43 cluster_count = columns.LinkedCountColumn(
44 viewname='virtualization:cluster_list',
45 url_params={'group_id': 'pk'},
46 verbose_name=_('Clusters')
47 )
48 tags = columns.TagColumn(
49 url_name='virtualization:clustergroup_list'
50 )
52 class Meta(OrganizationalModelTable.Meta):
53 model = ClusterGroup
54 fields = (
55 'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'comments', 'contacts', 'tags', 'created',
56 'last_updated', 'actions',
57 )
58 default_columns = ('pk', 'name', 'cluster_count', 'description')
61class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
62 name = tables.Column(
63 verbose_name=_('Name'),
64 linkify=True
65 )
66 type = tables.Column(
67 verbose_name=_('Type'),
68 linkify=True
69 )
70 group = tables.Column(
71 verbose_name=_('Group'),
72 linkify=True
73 )
74 status = columns.ChoiceFieldColumn(
75 verbose_name=_('Status'),
76 )
77 scope_type = columns.ContentTypeColumn(
78 verbose_name=_('Scope Type'),
79 )
80 scope = tables.Column(
81 verbose_name=_('Scope'),
82 linkify=True,
83 orderable=False
84 )
85 device_count = columns.LinkedCountColumn(
86 viewname='dcim:device_list',
87 url_params={'cluster_id': 'pk'},
88 verbose_name=_('Devices')
89 )
90 vm_count = columns.LinkedCountColumn(
91 viewname='virtualization:virtualmachine_list',
92 url_params={'cluster_id': 'pk'},
93 verbose_name=_('VMs')
94 )
95 tags = columns.TagColumn(
96 url_name='virtualization:cluster_list'
97 )
99 class Meta(PrimaryModelTable.Meta):
100 model = Cluster
101 fields = (
102 'pk', 'id', 'name', 'type', 'group', 'status', 'tenant', 'tenant_group', 'scope', 'scope_type',
103 'description', 'comments', 'device_count', 'vm_count', 'contacts', 'tags', 'created', 'last_updated',
104 )
105 default_columns = ('pk', 'name', 'type', 'group', 'status', 'tenant', 'site', 'device_count', 'vm_count')