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

1import django_tables2 as tables 

2from django.utils.translation import gettext_lazy as _ 

3 

4from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns 

5from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin 

6from virtualization.models import Cluster, ClusterGroup, ClusterType 

7 

8__all__ = ( 

9 'ClusterGroupTable', 

10 'ClusterTable', 

11 'ClusterTypeTable', 

12) 

13 

14 

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 ) 

28 

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

36 

37 

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 ) 

51 

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

59 

60 

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 ) 

98 

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