Coverage for src/meshadmin/server/networks/admin.py: 91%
67 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-25 08:49 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-25 08:49 +0200
1import structlog
2from django import forms
3from django.contrib import admin
5from meshadmin.server.networks.models import (
6 CA,
7 Group,
8 GroupConfig,
9 Host,
10 HostCert,
11 HostConfig,
12 Network,
13 NetworkMembership,
14 Rule,
15 SigningCA,
16 Template,
17)
18from meshadmin.server.networks.services import create_network
20logger = structlog.get_logger(__name__)
23class CaInline(admin.StackedInline):
24 model = CA
25 extra = 0
26 fields = ("name", "cert_print")
27 readonly_fields = (
28 "name",
29 "cert_print",
30 )
33class HostInline(admin.TabularInline):
34 model = Host
35 extra = 0
38class GroupInline(admin.TabularInline):
39 model = Group
40 extra = 0
43class SigningCAInline(admin.StackedInline):
44 model = SigningCA
45 extra = 0
48class TemplateInline(admin.TabularInline):
49 model = Template
50 extra = 0
53class NetworkAdminForm(forms.ModelForm):
54 class Meta:
55 model = Network
56 fields = ("name", "cidr")
59class NetworkMembershipInline(admin.TabularInline):
60 model = NetworkMembership
61 extra = 0
64@admin.register(Network)
65class NetworkAdmin(admin.ModelAdmin):
66 form = NetworkAdminForm
68 def get_inlines(self, request, obj):
69 if obj:
70 return [
71 CaInline,
72 SigningCAInline,
73 HostInline,
74 GroupInline,
75 TemplateInline,
76 NetworkMembershipInline,
77 ]
78 else:
79 return []
81 def save_model(self, request, obj: Network, form, change):
82 if not change:
83 create_network(obj.name, obj.cidr, request.user)
84 else:
85 obj.save()
88class HostCertInline(admin.TabularInline):
89 model = HostCert
90 extra = 0
93class HostConfigInline(admin.TabularInline):
94 model = HostConfig
95 extra = 0
98@admin.register(Host)
99class HostAdmin(admin.ModelAdmin):
100 list_display = ("id", "name", "network__name", "assigned_ip")
101 list_filter = ("network",)
102 inlines = [
103 HostCertInline,
104 HostConfigInline,
105 ]
108@admin.register(Template)
109class TemplateAdmin(admin.ModelAdmin):
110 list_display = ["id", "name", "network__name"]
111 list_filter = ("network",)
114class RuleInline(admin.TabularInline):
115 model = Rule
116 extra = 0
119class GroupConfigInline(admin.TabularInline):
120 model = GroupConfig
121 extra = 0
124@admin.register(Group)
125class GroupAdmin(admin.ModelAdmin):
126 list_display = ("id", "name")
127 list_filter = ("network",)
128 inlines = (GroupConfigInline,)