Coverage for src/meshadmin/server/networks/admin.py: 90%

63 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-04-10 16:08 +0200

1import structlog 

2from django import forms 

3from django.contrib import admin 

4 

5from meshadmin.server.networks.models import ( 

6 CA, 

7 Group, 

8 Host, 

9 HostCert, 

10 HostConfig, 

11 Network, 

12 NetworkMembership, 

13 Rule, 

14 SigningCA, 

15 Template, 

16) 

17from meshadmin.server.networks.services import create_network 

18 

19logger = structlog.get_logger(__name__) 

20 

21 

22class CaInline(admin.StackedInline): 

23 model = CA 

24 extra = 0 

25 fields = ("name", "cert_print") 

26 readonly_fields = ( 

27 "name", 

28 "cert_print", 

29 ) 

30 

31 

32class HostInline(admin.TabularInline): 

33 model = Host 

34 extra = 0 

35 

36 

37class GroupInline(admin.TabularInline): 

38 model = Group 

39 extra = 0 

40 

41 

42class SigningCAInline(admin.StackedInline): 

43 model = SigningCA 

44 extra = 0 

45 

46 

47class TemplateInline(admin.TabularInline): 

48 model = Template 

49 extra = 0 

50 

51 

52class NetworkAdminForm(forms.ModelForm): 

53 class Meta: 

54 model = Network 

55 fields = ("name", "cidr") 

56 

57 

58class NetworkMembershipInline(admin.TabularInline): 

59 model = NetworkMembership 

60 extra = 0 

61 

62 

63@admin.register(Network) 

64class NetworkAdmin(admin.ModelAdmin): 

65 form = NetworkAdminForm 

66 

67 def get_inlines(self, request, obj): 

68 if obj: 

69 return [ 

70 CaInline, 

71 SigningCAInline, 

72 HostInline, 

73 GroupInline, 

74 TemplateInline, 

75 NetworkMembershipInline, 

76 ] 

77 else: 

78 return [] 

79 

80 def save_model(self, request, obj: Network, form, change): 

81 if not change: 

82 create_network(obj.name, obj.cidr, request.user) 

83 else: 

84 obj.save() 

85 

86 

87class HostCertInline(admin.TabularInline): 

88 model = HostCert 

89 extra = 0 

90 

91 

92class HostConfigInline(admin.TabularInline): 

93 model = HostConfig 

94 extra = 0 

95 

96 

97@admin.register(Host) 

98class HostAdmin(admin.ModelAdmin): 

99 list_display = ("id", "name", "network__name", "assigned_ip") 

100 list_filter = ("network",) 

101 inlines = [ 

102 HostCertInline, 

103 HostConfigInline, 

104 ] 

105 

106 

107@admin.register(Template) 

108class TemplateAdmin(admin.ModelAdmin): 

109 list_display = ["id", "name", "network__name"] 

110 list_filter = ("network",) 

111 

112 

113class RuleInline(admin.TabularInline): 

114 model = Rule 

115 extra = 0 

116 

117 

118@admin.register(Group) 

119class GroupAdmin(admin.ModelAdmin): 

120 list_display = ("id", "name") 

121 list_filter = ("network",)