feat: derive PBS backup jobs and audit VMIDs from the service registry

- pve-backup-jobs.yml: each job's vmid list is now computed from
  homelab_services by backup.job instead of a hand-maintained CSV. Adding a
  service no longer needs a separate edit here (the forgotten-edit failure
  mode that left CT 148 emergency-bot without a backup).
- roles/backup_audit/defaults: backup_audit_pbs_vmids derived from
  homelab_services by the monitoring.backup_audit_vmid flag; single shared
  freshness threshold backup_audit_pbs_max_age_hours (48).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uoq5AVK8mkBgg83Mq6o5V
This commit is contained in:
Dmitry
2026-09-03 07:04:36 +03:00
co-authored by Claude Sonnet 5
parent 7031d7dbb3
commit baef2c49b3
2 changed files with 32 additions and 26 deletions
+16 -3
View File
@@ -1,3 +1,7 @@
# Списки VMID выводятся из реестра homelab_services по полю backup.job, а не
# перечисляются вручную. Раньше добавление сервиса требовало отдельной правки
# здесь, и о ней легко было забыть — CT 148 emergency-bot до сих пор без бэкапа
# именно по этой причине.
- name: Configure Proxmox backup jobs - name: Configure Proxmox backup jobs
hosts: mini-pc hosts: mini-pc
gather_facts: false gather_facts: false
@@ -6,7 +10,10 @@
- id: homelab-pbs-daily-cloud - id: homelab-pbs-daily-cloud
comment: Daily PBS backup for cloud-pc service containers comment: Daily PBS backup for cloud-pc service containers
node: cloud-pc node: cloud-pc
vmid: 141,145,146,147,149 vmid: >-
{{ homelab_services.values() | selectattr('backup.job', 'defined')
| selectattr('backup.job', 'eq', 'homelab-pbs-daily-cloud')
| map(attribute='vmid') | sort | join(',') }}
storage: pbs storage: pbs
schedule: "02:10" schedule: "02:10"
mode: snapshot mode: snapshot
@@ -14,7 +21,10 @@
- id: homelab-pbs-daily-mini - id: homelab-pbs-daily-mini
comment: Daily PBS backup for mini-pc service containers comment: Daily PBS backup for mini-pc service containers
node: mini-pc node: mini-pc
vmid: 132,140,142,143,144,150 vmid: >-
{{ homelab_services.values() | selectattr('backup.job', 'defined')
| selectattr('backup.job', 'eq', 'homelab-pbs-daily-mini')
| map(attribute='vmid') | sort | join(',') }}
storage: pbs storage: pbs
schedule: "02:40" schedule: "02:40"
mode: snapshot mode: snapshot
@@ -22,7 +32,10 @@
- id: homelab-local-weekly-pbs - id: homelab-local-weekly-pbs
comment: Weekly local backup for PBS container rootfs/config comment: Weekly local backup for PBS container rootfs/config
node: cloud-pc node: cloud-pc
vmid: 120 vmid: >-
{{ homelab_services.values() | selectattr('backup.job', 'defined')
| selectattr('backup.job', 'eq', 'homelab-local-weekly-pbs')
| map(attribute='vmid') | sort | join(',') }}
storage: backup storage: backup
schedule: "Sun 03:30" schedule: "Sun 03:30"
mode: snapshot mode: snapshot
+16 -23
View File
@@ -3,29 +3,22 @@ backup_audit_log_file: /var/log/homelab-backup-audit.log
backup_audit_timer_oncalendar: "*-*-* 06:00:00" backup_audit_timer_oncalendar: "*-*-* 06:00:00"
backup_audit_timer_randomized_delay: 10m backup_audit_timer_randomized_delay: 10m
backup_audit_pbs_vmids: # Единый порог свежести для всех PBS-снапшотов. Вынесен отдельно, потому что
- vmid: 132 # сам список VMID теперь выводится из реестра и per-vmid значения в нём нет.
max_age_hours: 48 backup_audit_pbs_max_age_hours: 48
- vmid: 140
max_age_hours: 48 # VMID берутся из homelab_services по флагу monitoring.backup_audit_vmid, а не
- vmid: 141 # перечисляются вручную. Форма записи ({vmid, max_age_hours}) сохранена, чтобы
max_age_hours: 48 # вызывающий playbook при необходимости мог передать свой список с иными
- vmid: 142 # порогами — шаблон audit-pbs.sh.j2 читает именно эти два поля.
max_age_hours: 48 backup_audit_pbs_vmids: >-
- vmid: 143 {{ homelab_services.values()
max_age_hours: 48 | selectattr('monitoring.backup_audit_vmid', 'defined')
- vmid: 144 | selectattr('monitoring.backup_audit_vmid')
max_age_hours: 48 | map(attribute='vmid') | sort
- vmid: 145 | map('community.general.dict_kv', 'vmid')
max_age_hours: 48 | map('combine', {'max_age_hours': backup_audit_pbs_max_age_hours})
- vmid: 146 | list }}
max_age_hours: 48
- vmid: 147
max_age_hours: 48
- vmid: 149
max_age_hours: 48
- vmid: 150
max_age_hours: 48
backup_audit_restic_profiles: [] backup_audit_restic_profiles: []
backup_audit_metrics_dir: /var/lib/node_exporter/textfile_collector backup_audit_metrics_dir: /var/lib/node_exporter/textfile_collector