1330
This commit is contained in:
@@ -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: |
|
||||||
|
|||||||
Reference in New Issue
Block a user