This commit is contained in:
2026-03-02 13:03:23 +02:00
parent 9f2500d393
commit fc41b22e74

View File

@@ -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