Make proxmox_storage a global setting instead of a per-job snapshot
CI / Frontend build (push) Successful in 11s
CI / Script syntax (push) Successful in 4s
CI / Backend tests (push) Successful in 18s

Backup jobs stored their own proxmox_storage column, copied from
settings at creation time and never resynced. process_backup preferred
that frozen job value, so changing Settings > Proxmox storage had no
effect on existing jobs. Drop the per-job column and always use the
current global setting when starting a backup.

Also copies AGENTS.md to CLAUDE.md.
This commit is contained in:
Sonnet 5
2026-07-15 12:20:44 +02:00
parent 608f13cb78
commit 1288ba731d
7 changed files with 239 additions and 17 deletions
+1 -1
View File
@@ -245,7 +245,7 @@ async def process_backup(backup_id: str) -> None:
commands.start_proxmox_backup,
node=backup["node"],
vmid=int(backup["guest_vmid"]),
storage=(job or {}).get("proxmox_storage") or settings["proxmox_storage"],
storage=settings["proxmox_storage"],
mode=(job or {}).get("backup_mode") or settings["default_backup_mode"],
compression=(job or {}).get("compression") or settings["default_compression"],
)
+3 -5
View File
@@ -51,10 +51,10 @@ def create_job(payload: dict) -> dict:
"""
INSERT INTO backup_jobs(
guest_vmid, guest_name, guest_type, node, enabled, cron_schedule,
proxmox_storage, backup_mode, compression, retention_type, retention_value,
backup_mode, compression, retention_type, retention_value,
next_run_at, created_at, updated_at
)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
payload["guest_vmid"],
@@ -63,7 +63,6 @@ def create_job(payload: dict) -> dict:
payload["node"],
int(payload.get("enabled", True)),
payload["cron_schedule"],
payload["proxmox_storage"],
payload["backup_mode"],
payload["compression"],
payload["retention_type"],
@@ -88,7 +87,7 @@ def update_job(job_id: int, payload: dict) -> dict:
"""
UPDATE backup_jobs SET
guest_vmid = ?, guest_name = ?, guest_type = ?, node = ?, enabled = ?,
cron_schedule = ?, proxmox_storage = ?, backup_mode = ?, compression = ?,
cron_schedule = ?, backup_mode = ?, compression = ?,
retention_type = ?, retention_value = ?, next_run_at = ?, updated_at = ?
WHERE id = ?
""",
@@ -99,7 +98,6 @@ def update_job(job_id: int, payload: dict) -> dict:
merged["node"],
int(merged["enabled"]),
merged["cron_schedule"],
merged["proxmox_storage"],
merged["backup_mode"],
merged["compression"],
merged["retention_type"],
-2
View File
@@ -50,7 +50,6 @@ class JobPayload(BaseModel):
node: str
enabled: bool = True
cron_schedule: str
proxmox_storage: str
backup_mode: str
compression: str
retention_type: str
@@ -64,7 +63,6 @@ class PartialJobPayload(BaseModel):
node: str | None = None
enabled: bool | None = None
cron_schedule: str | None = None
proxmox_storage: str | None = None
backup_mode: str | None = None
compression: str | None = None
retention_type: str | None = None
+7
View File
@@ -179,3 +179,10 @@ def run_migrations() -> None:
"INSERT INTO schema_migrations(version, applied_at) VALUES (?, ?)",
(4, now),
)
if 5 not in applied:
now = utc_now()
conn.execute("ALTER TABLE backup_jobs DROP COLUMN proxmox_storage")
conn.execute(
"INSERT INTO schema_migrations(version, applied_at) VALUES (?, ?)",
(5, now),
)
-1
View File
@@ -36,7 +36,6 @@ def _job():
"node": "pve",
"enabled": True,
"cron_schedule": "0 2 * * *",
"proxmox_storage": "backup-store",
"backup_mode": "snapshot",
"compression": "zstd",
"retention_type": "latest",