Files
joulenap/backend
Catubba 9e858df5b1 feat(jobs): multi-source, cluster-aware backup route cycle
One run now executes one backup route: N source PVEs (each possibly a
cluster) onto one PBS target. Wake and power-off stay with the power
lease, so the cycle starts with the box awake and never touches its
power.

- PveClient lists guests cluster-wide via /cluster/resources (identical
  on a standalone node), tags each with its node and drops templates;
  vzdump takes a node, and the task endpoints read theirs from the UPID
  so one client can drive several nodes.
- Sources are isolated: a broken one leaves its backup:<pve-id> step
  failed and the run continues, finishing failed and naming it. GC and
  verify still run - the box is awake and the other snapshots are real.
- The guest tally aggregates across sources; failed guest names keep
  working.
- Cache writes carry real ids: datastore_stats keyed by the target,
  guest_backups attributing each vmid to the PVE that backed it up.
- CycleDeps gains device-shaped connect_pve/connect_pbs beside the
  config-shaped pair, and RunRecorder.step takes a label.

The 0.9 cycle and the flat pve/pbs/backup config sections stay for now:
their other consumers (the GC/verify/monitor cycles, the scheduler, the
API routers) are ported in the next milestones and delete both halves
together.
2026-08-02 17:59:08 +02:00
..