This commit is contained in:
2026-03-02 13:30:04 +02:00
parent e6c61c081e
commit 38c99514d2

View File

@@ -401,20 +401,70 @@
msg: "Aborting: fw_printenv returned only {{ env_line_count.stdout | trim }} lines (<7) — environment missing or corrupted." msg: "Aborting: fw_printenv returned only {{ env_line_count.stdout | trim }} lines (<7) — environment missing or corrupted."
when: (env_line_count.stdout | trim | int) < 7 when: (env_line_count.stdout | trim | int) < 7
- name: Read first line of /etc/banner (current running version) - name: Read /var/run/bootbanks.json (active and backup firmux versions)
ansible.builtin.raw: "{{ pathprefix }} cat /etc/banner | grep -i rev | head -n1" ansible.builtin.raw: "{{ pathprefix }} cat /var/run/bootbanks.json"
register: banner register: bootbanks_raw
changed_when: false 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('unknown') }}"
bootbanks_backup_firmux: "{{ (bootbanks_raw.stdout | from_json).backup.firmux | default('unknown') }}"
- name: current versions (active primary and backup)
ansible.builtin.debug: ansible.builtin.debug:
msg: msg:
- "current banner: {{ banner.stdout | trim }}" - "active (primary) firmux: {{ bootbanks_active_firmux }}"
- "backup firmux: {{ bootbanks_backup_firmux }}"
- name: Build control queue payload for skip journal (backup already prepared)
ansible.builtin.set_fact:
journal_skip_payload:
inscope_device: "{{ ansible_hostname | default(inventory_hostname) }}"
task_name: "journal_add"
task_result: >-
Backup bootbank already has {{ fw_banner_repr }} (backup.firmux={{ bootbanks_backup_firmux }}).
Skipping backup preparation (no flip, no reboot).
when: (bootbanks_backup_firmux | trim) == (fw_banner_repr | trim)
- 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"
register: rmq_journal_skip_resp
changed_when: (rmq_journal_skip_resp.json is defined) and (rmq_journal_skip_resp.json.routed | default(false) | bool)
failed_when: >
(rmq_journal_skip_resp.status != 200) or
(rmq_journal_skip_resp.json is not defined) or
(not (rmq_journal_skip_resp.json.routed | default(false) | bool))
delegate_to: localhost
when: journal_skip_payload is defined
- name: End play for this host (backup already prepared; backup prep not needed)
ansible.builtin.meta: end_host
when: (bootbanks_backup_firmux | trim) == (fw_banner_repr | trim)
- name: Stop if target version matches current (/etc/banner already at {{ fw_banner_repr }})
ansible.builtin.fail:
msg: "Aborting: device already runs {{ fw_banner_repr }} (banner: {{ banner.stdout | trim }})"
when: banner.stdout is search(fw_banner_repr)
- name: Upload firmware to /tmp via scp (controller-side) - name: Upload firmware to /tmp via scp (controller-side)
ansible.builtin.shell: | ansible.builtin.shell: |