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
« 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
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
19logger = structlog.get_logger(__name__)
22class CaInline(admin.StackedInline):
23 model = CA
24 extra = 0
25 fields = ("name", "cert_print")
26 readonly_fields = (
27 "name",
28 "cert_print",
29 )
32class HostInline(admin.TabularInline):
33 model = Host
34 extra = 0
37class GroupInline(admin.TabularInline):
38 model = Group
39 extra = 0
42class SigningCAInline(admin.StackedInline):
43 model = SigningCA
44 extra = 0
47class TemplateInline(admin.TabularInline):
48 model = Template
49 extra = 0
52class NetworkAdminForm(forms.ModelForm):
53 class Meta:
54 model = Network
55 fields = ("name", "cidr")
58class NetworkMembershipInline(admin.TabularInline):
59 model = NetworkMembership
60 extra = 0
63@admin.register(Network)
64class NetworkAdmin(admin.ModelAdmin):
65 form = NetworkAdminForm
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 []
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()
87class HostCertInline(admin.TabularInline):
88 model = HostCert
89 extra = 0
92class HostConfigInline(admin.TabularInline):
93 model = HostConfig
94 extra = 0
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 ]
107@admin.register(Template)
108class TemplateAdmin(admin.ModelAdmin):
109 list_display = ["id", "name", "network__name"]
110 list_filter = ("network",)
113class RuleInline(admin.TabularInline):
114 model = Rule
115 extra = 0
118@admin.register(Group)
119class GroupAdmin(admin.ModelAdmin):
120 list_display = ("id", "name")
121 list_filter = ("network",)