(feature) add Django setup flow for initial pobsync configuration
Add staff-only UI routes for creating/editing the default GlobalConfig and creating the first HostConfig from the dashboard. Improve the empty dashboard state so a fresh database guides the user towards the next useful setup action instead of only showing empty tables. Cover the setup flow with view tests for empty state prompts, global config creation, and host creation.
This commit is contained in:
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from django import forms
|
||||
|
||||
from .models import HostConfig, ScheduleConfig
|
||||
from .models import GlobalConfig, HostConfig, ScheduleConfig
|
||||
from .scheduler import parse_cron_expr
|
||||
|
||||
|
||||
@@ -64,6 +64,52 @@ class HostConfigForm(forms.ModelForm):
|
||||
}
|
||||
|
||||
|
||||
class CreateHostConfigForm(HostConfigForm):
|
||||
class Meta(HostConfigForm.Meta):
|
||||
fields = ("host", *HostConfigForm.Meta.fields)
|
||||
help_texts = {
|
||||
**HostConfigForm.Meta.help_texts,
|
||||
"host": "Stable internal host name used for backup paths.",
|
||||
}
|
||||
|
||||
|
||||
class GlobalConfigForm(forms.ModelForm):
|
||||
ssh_options = NewlineListField(help_text="One SSH option per line.")
|
||||
rsync_args = NewlineListField(help_text="One default rsync argument per line.")
|
||||
rsync_extra_args = NewlineListField(help_text="One extra rsync argument per line.")
|
||||
excludes_default = NewlineListField(help_text="One default exclude pattern per line.")
|
||||
|
||||
class Meta:
|
||||
model = GlobalConfig
|
||||
fields = (
|
||||
"name",
|
||||
"backup_root",
|
||||
"pobsync_home",
|
||||
"ssh_user",
|
||||
"ssh_port",
|
||||
"ssh_options",
|
||||
"rsync_binary",
|
||||
"rsync_args",
|
||||
"rsync_extra_args",
|
||||
"rsync_timeout_seconds",
|
||||
"rsync_bwlimit_kbps",
|
||||
"default_source_root",
|
||||
"default_destination_subdir",
|
||||
"excludes_default",
|
||||
"retention_daily",
|
||||
"retention_weekly",
|
||||
"retention_monthly",
|
||||
"retention_yearly",
|
||||
)
|
||||
help_texts = {
|
||||
"name": "Usually 'default'. The backup engine currently reads the default config.",
|
||||
"backup_root": "Directory that contains host backup folders.",
|
||||
"pobsync_home": "Base directory for runtime state inside the container or host.",
|
||||
"default_source_root": "Used by hosts without a custom source root.",
|
||||
"default_destination_subdir": "Optional subdirectory below each snapshot.",
|
||||
}
|
||||
|
||||
|
||||
class ScheduleConfigForm(forms.ModelForm):
|
||||
cron_expr = forms.CharField(
|
||||
label="Cron expression",
|
||||
|
||||
Reference in New Issue
Block a user