diff --git a/roles/proxmox_upgrade/tasks/preflight.yml b/roles/proxmox_upgrade/tasks/preflight.yml index 4f598ff..b81a828 100644 --- a/roles/proxmox_upgrade/tasks/preflight.yml +++ b/roles/proxmox_upgrade/tasks/preflight.yml @@ -2,14 +2,15 @@ # ============================================================================= # proxmox_upgrade — preflight.yml # Check cluster health before starting any upgrade work -# Runs delegate_to: first node in upgrade_order +# All tasks delegate_to: localhost — uses API only # ============================================================================= -- name: Preflight | Check all cluster nodes are online +- name: Preflight | Check quorum via pvecm ansible.builtin.shell: | - pvecm status 2>/dev/null | grep -E "^Nodes|Quorate" - register: pvecm_status + pvecm status 2>/dev/null | grep -i "quorate" | grep -i "yes" + register: quorum_check changed_when: false + failed_when: quorum_check.rc != 0 - name: Preflight | Get cluster node status via API ansible.builtin.uri: @@ -20,6 +21,7 @@ validate_certs: false register: cluster_nodes delegate_to: localhost + run_once: true - name: Preflight | Check all nodes are online ansible.builtin.fail: @@ -29,24 +31,17 @@ loop: "{{ cluster_nodes.json.data }}" when: item.status != 'online' delegate_to: localhost - -- name: Preflight | Check quorum via pvecm - ansible.builtin.shell: | - pvecm status 2>/dev/null | grep -i "quorate" | grep -i "yes" - register: quorum_check - changed_when: false - failed_when: quorum_check.rc != 0 + run_once: true - name: Preflight | Check CEPH health when: ceph_enabled | bool block: - name: Preflight | Get CEPH health status - ansible.builtin.shell: | - ceph health 2>/dev/null + ansible.builtin.shell: ceph health 2>/dev/null register: ceph_health changed_when: false - - name: Preflight | Abort if CEPH is not healthy + - name: Preflight | Abort if CEPH is in error state ansible.builtin.fail: msg: > CEPH health check FAILED — status: {{ ceph_health.stdout }}. @@ -60,5 +55,7 @@ - name: Preflight | Cluster health check passed ansible.builtin.debug: - msg: "Cluster health check passed — all nodes online, quorum OK{{ ', CEPH checked' if ceph_enabled else '' }}" + msg: "Cluster health check passed — all {{ cluster_nodes.json.data | length }} nodes online, quorum OK{{ ', CEPH checked' if ceph_enabled else '' }}" + delegate_to: localhost + run_once: true