Add explicit Django model fields for global and host backup settings, including SSH, rsync, source, excludes, and retention configuration. Populate them from legacy JSON during migration, make the config repository prefer structured fields, and update import/admin/tests around the SQL-first configuration model.
68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
from __future__ import annotations
|
|
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
from django.test import TestCase
|
|
|
|
from pobsync.config.load import load_global_config, load_host_config
|
|
from pobsync_backend.config_repository import export_runtime_configs
|
|
from pobsync_backend.models import GlobalConfig, HostConfig
|
|
|
|
|
|
class ConfigRepositoryTests(TestCase):
|
|
def test_exports_database_configs_to_engine_yaml(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
prefix = Path(tmp)
|
|
GlobalConfig.objects.create(
|
|
name="default",
|
|
backup_root="/backups",
|
|
pobsync_home=str(prefix),
|
|
ssh_user="backup",
|
|
ssh_port=2222,
|
|
rsync_args=["--archive"],
|
|
excludes_default=["/proc/***"],
|
|
retention_daily=7,
|
|
retention_weekly=4,
|
|
retention_monthly=3,
|
|
retention_yearly=1,
|
|
data={
|
|
"backup_root": "/ignored",
|
|
"pobsync_home": "/ignored",
|
|
"ssh": {"user": "ignored", "port": 22, "options": []},
|
|
"retention_defaults": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99},
|
|
},
|
|
)
|
|
HostConfig.objects.create(
|
|
host="web-01",
|
|
address="web-01.example.test",
|
|
ssh_user="root",
|
|
includes=[],
|
|
excludes_add=["/tmp/***"],
|
|
retention_daily=7,
|
|
retention_weekly=4,
|
|
retention_monthly=3,
|
|
retention_yearly=1,
|
|
config={
|
|
"host": "ignored",
|
|
"address": "ignored",
|
|
"retention": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99},
|
|
"excludes_add": ["/ignored/***"],
|
|
},
|
|
)
|
|
|
|
written = export_runtime_configs(prefix=prefix, host="web-01")
|
|
|
|
self.assertEqual(len(written), 2)
|
|
global_cfg = load_global_config(prefix / "config" / "global.yaml")
|
|
host_cfg = load_host_config(prefix / "config" / "hosts" / "web-01.yaml")
|
|
self.assertEqual(global_cfg["backup_root"], "/backups")
|
|
self.assertEqual(global_cfg["pobsync_home"], str(prefix))
|
|
self.assertEqual(global_cfg["ssh"]["user"], "backup")
|
|
self.assertEqual(global_cfg["ssh"]["port"], 2222)
|
|
self.assertEqual(global_cfg["retention_defaults"]["daily"], 7)
|
|
self.assertEqual(host_cfg["host"], "web-01")
|
|
self.assertEqual(host_cfg["address"], "web-01.example.test")
|
|
self.assertEqual(host_cfg["retention"]["daily"], 7)
|
|
self.assertEqual(host_cfg["excludes_add"], ["/tmp/***"])
|