--- # ============================================================================= # proxmox_upgrade — node_upgrade.yml # Per-node upgrade sequence: backup → drain → upgrade → restore # Called with loop_var: current_node # ============================================================================= - name: "Node {{ current_node }} | Start" ansible.builtin.debug: msg: "━━━ Starting upgrade of node {{ current_node }} ━━━" # ── Step 1: Backup config ───────────────────────────────────────────────────── - name: "Node {{ current_node }} | Step 1 — Backup config" include_role: name: hypervisor_backup_config vars: pve_config_git_commit_message: "[{{ client_id }}] {{ current_node }} pre-upgrade config backup {{ ansible_date_time.date }}" # ── Step 2: Drain node ──────────────────────────────────────────────────────── - name: "Node {{ current_node }} | Step 2 — Drain (migrate guests off node)" include_tasks: drain.yml when: cluster_mode == 'cluster' - name: "Node {{ current_node }} | Step 2 — Single node mode, skipping drain" ansible.builtin.debug: msg: "cluster_mode=single — skipping guest migration" when: cluster_mode == 'single' # ── Step 3: Upgrade ─────────────────────────────────────────────────────────── - name: "Node {{ current_node }} | Step 3 — Upgrade packages" include_tasks: upgrade.yml # ── Step 4: Restore ─────────────────────────────────────────────────────────── - name: "Node {{ current_node }} | Step 4 — Restore guests" include_tasks: restore.yml when: cluster_mode == 'cluster' - name: "Node {{ current_node }} | Complete" ansible.builtin.debug: msg: "━━━ Node {{ current_node }} upgrade complete ━━━"