diff --git a/files/ansible-playbooks/update-outdoorbackup224.yml b/files/ansible-playbooks/update-outdoorbackup224.yml index e6ffed4..ff9e6d1 100644 --- a/files/ansible-playbooks/update-outdoorbackup224.yml +++ b/files/ansible-playbooks/update-outdoorbackup224.yml @@ -203,7 +203,7 @@ body_format: json body: properties: - content_type: "application/json" + content_type: "application/json" routing_key: "{{ control_queue }}" payload: "{{ { 'inscope_device': (ansible_hostname | default(inventory_hostname)), @@ -247,7 +247,7 @@ body_format: json body: properties: - content_type: "application/json" + content_type: "application/json" routing_key: "{{ control_queue }}" payload: "{{ tag_inprogress_payload | to_json }}" payload_encoding: "string" @@ -287,7 +287,7 @@ body_format: json body: properties: - content_type: "application/json" + content_type: "application/json" routing_key: "{{ control_queue }}" payload: >- {{ @@ -365,7 +365,7 @@ body_format: json body: properties: - content_type: "application/json" + content_type: "application/json" routing_key: "{{ control_queue }}" payload: "{{ ssid_journal_payload | to_json }}" payload_encoding: "string" @@ -401,25 +401,76 @@ msg: "Backup-bank prep aborting: fw_printenv returned only {{ env_line_count.stdout | trim }} lines (<7) — environment missing or corrupted." when: (env_line_count.stdout | trim | int) < 7 - - name: Read first line of /etc/banner (current running version) - ansible.builtin.raw: "{{ pathprefix }} cat /etc/banner | grep -i rev | head -n1" - register: banner + - name: Read /var/run/bootbanks.json (active and backup firmux versions) + ansible.builtin.raw: "{{ pathprefix }} cat /var/run/bootbanks.json" + register: bootbanks_raw changed_when: false - - - name: current version + + - name: Parse bootbanks.json + ansible.builtin.set_fact: + bootbanks_obj: "{{ bootbanks_raw.stdout | from_json }}" + bootbanks_active_firmux: "{{ (bootbanks_raw.stdout | from_json).active.firmux | default('') }}" + bootbanks_backup_firmux: "{{ (bootbanks_raw.stdout | from_json).backup.firmux | default('') }}" + failed_when: bootbanks_raw.stdout is not search('"backup"') or bootbanks_raw.stdout is not search('"active"') + + - name: current versions (active primary and backup) ansible.builtin.debug: msg: - - "current running (primary) banner: {{ banner.stdout | trim }}" - - - name: Stop if target version matches current (/etc/banner already at {{ fw_banner_repr }}) + - "active (primary) firmux: {{ bootbanks_active_firmux }}" + - "backup firmux: {{ bootbanks_backup_firmux }}" + + - name: Stop if target version already present on backup (backup already at {{ fw_banner_repr }}) ansible.builtin.debug: - msg: "Backup-bank prep skip: running (primary) already at {{ fw_banner_repr }} (banner: {{ banner.stdout | trim }}). This playbook prepares backup bootbank only (no flip, no reboot)." - when: banner.stdout is search(fw_banner_repr) - - - name: End play for this host (target already running on primary; backup prep not needed) + msg: "Backup-bank prep skip: backup already at {{ fw_banner_repr }} (backup firmux: {{ bootbanks_backup_firmux }}; active firmux: {{ bootbanks_active_firmux }}). This playbook prepares backup bootbank only (no flip, no reboot)." + when: bootbanks_backup_firmux is search(fw_banner_repr) + + - name: Build control queue payload for skip journal (journal_add) + ansible.builtin.set_fact: + journal_skip_payload: + inscope_device: "{{ ansible_hostname | default(inventory_hostname) }}" + task_name: "journal_add" + task_result: >- + Backup-bank prep skipped: backup already at {{ fw_banner_repr }} + (backup {{ bootbanks_backup_firmux }}; active {{ bootbanks_active_firmux }}). + No flip; no reboot. + when: nbq2_payload_obj is defined and (bootbanks_backup_firmux is search(fw_banner_repr)) + + - name: Bandaid | Pause before Publish skip journal to control queue via RabbitMQ HTTP API + ansible.builtin.pause: + seconds: 1 + delegate_to: localhost + changed_when: false + when: journal_skip_payload is defined + + - name: Publish skip journal to control queue via RabbitMQ HTTP API + ansible.builtin.uri: + url: "http://{{ rmq_host }}:{{ rmq_port }}/api/exchanges/{{ rmq_vhost | urlencode }}/{{ rmq_exchange | urlencode }}/publish" + method: POST + user: "{{ rmq_user }}" + password: "{{ rmq_pass }}" + force_basic_auth: true + status_code: 200 + headers: + content-type: "application/json" + body_format: json + body: + properties: + content_type: "application/json" + routing_key: "{{ control_queue }}" + payload: "{{ journal_skip_payload | to_json }}" + payload_encoding: "string" + delegate_to: localhost + register: rmq_journal_skip_resp + when: journal_skip_payload is defined + + - name: Log control queue skip journal publish result + ansible.builtin.debug: + var: rmq_journal_skip_resp.json + when: journal_skip_payload is defined and rmq_journal_skip_resp is defined + + - name: End play for this host (backup already prepared; backup prep not needed) ansible.builtin.meta: end_host - when: banner.stdout is search(fw_banner_repr) - + when: bootbanks_backup_firmux is search(fw_banner_repr) - name: Upload firmware to /tmp via scp (controller-side) ansible.builtin.shell: | set -e