add: ntfy notification for pre-check
This commit is contained in:
@@ -54,8 +54,9 @@
|
|||||||
- name: Store firmware facts
|
- name: Store firmware facts
|
||||||
ansible.builtin.set_fact:
|
ansible.builtin.set_fact:
|
||||||
firmware_status: "{{ _firmware_status.json.status }}"
|
firmware_status: "{{ _firmware_status.json.status }}"
|
||||||
fw_current_version: "{{ _firmware_status.json.product_version | default('unknown') }}"
|
firmware_current_version: "{{ _firmware_status.json.product_version | default('unknown') }}"
|
||||||
fw_new_version: "{{ _firmware_status.json.upgrade_packages | selectattr('name', 'equalto', 'opnsense') | map(attribute='new_version') | first | default('') }}"
|
firmware_new_version: "{{ _firmware_status.json.upgrade_packages | selectattr('name', 'equalto', 'opnsense') | map(attribute='new_version') | first | default('') }}"
|
||||||
|
firmware_upgrade_version: "{{ _firmware_status.json.upgrade_major_version | default('unknown') }}"
|
||||||
needs_reboot: "{{ true if _firmware_status.json.needs_reboot == '1' else false }}"
|
needs_reboot: "{{ true if _firmware_status.json.needs_reboot == '1' else false }}"
|
||||||
total_vips: "{{ _vip_status.json.rowCount }}"
|
total_vips: "{{ _vip_status.json.rowCount }}"
|
||||||
mismatched_vips: "{{ _vip_status.json.rows | rejectattr('status', 'equalto', main_role) | list | length }}"
|
mismatched_vips: "{{ _vip_status.json.rows | rejectattr('status', 'equalto', main_role) | list | length }}"
|
||||||
@@ -66,25 +67,51 @@
|
|||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- firmware_status == 'update'
|
- firmware_status == 'update'
|
||||||
- total_vips > 0
|
|
||||||
- mismatched_vips == 0
|
|
||||||
- not in_maintenance
|
- not in_maintenance
|
||||||
|
- mismatched_vips == 0
|
||||||
|
- total_vips > 0
|
||||||
quiet: true
|
quiet: true
|
||||||
|
|
||||||
- name: Display firmware status
|
- name: Display firmware status
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: >-
|
msg: >-
|
||||||
{{ inventory_hostname }} ({{ main_role }}): {{ firmware_status }}
|
{{ inventory_hostname }} ({{ main_role }}): {{ firmware_status }}
|
||||||
({{ fw_current_version }}
|
({{ firmware_current_version }}
|
||||||
{% if fw_new_version %} → {{ fw_new_version }} (reboot: {{ needs_reboot }}){% endif %})
|
{% if firmware_new_version %} → {{ firmware_new_version }} (reboot: {{ needs_reboot }}){% endif %})
|
||||||
|
|
||||||
rescue:
|
rescue:
|
||||||
|
|
||||||
- name: Send notification
|
- name: Send Ntfy notification
|
||||||
ansible.builtin.debug:
|
ansible.builtin.uri:
|
||||||
msg: "End of workflow, sending notification"
|
url: "{{ ntfy_url }}/{{ ntfy_topic }}"
|
||||||
|
method: POST
|
||||||
|
user: "{{ ntfy_user }}"
|
||||||
|
password: "{{ lookup('env', 'NTFY_PASSWORD') }}"
|
||||||
|
force_basic_auth: true
|
||||||
|
body: |
|
||||||
|
Current version: {{ firmware_current_version }}
|
||||||
|
{% if firmware_status != "update" %}
|
||||||
|
{% if firmware_status == "upgrade" %}
|
||||||
|
Upgrade to {{ firmware_upgrade_version }} available, relaunch the playbook manually to proceed.
|
||||||
|
{% else %}
|
||||||
|
No updates available on the cluster.
|
||||||
|
{% endif %}
|
||||||
|
{% elif in_maintenance %}
|
||||||
|
The node {{ ansible_host }} is in CARP maintenance mode.
|
||||||
|
{% elif mismatched_vips > 0 %}
|
||||||
|
Some VIP are not {{ main_role }} on {{ ansible_host }}.
|
||||||
|
{% else %}
|
||||||
|
No VIPs are managed.
|
||||||
|
{% endif %}
|
||||||
|
headers:
|
||||||
|
Title: "OPNsense update aborted"
|
||||||
|
Priority: "default"
|
||||||
|
Tags: "x"
|
||||||
|
run_once: true
|
||||||
|
when: ntfy_url is defined
|
||||||
|
|
||||||
- fail:
|
- ansible.builtin.fail:
|
||||||
|
msg: "Update aborted"
|
||||||
|
|
||||||
|
|
||||||
- name: "Phase 2 | Update backup node (TrueNAS, no snapshot)"
|
- name: "Phase 2 | Update backup node (TrueNAS, no snapshot)"
|
||||||
@@ -248,7 +275,7 @@
|
|||||||
# vmid: "{{ proxmox_vmid }}"
|
# vmid: "{{ proxmox_vmid }}"
|
||||||
# state: present
|
# state: present
|
||||||
# snapname: "{{ snap_name }}"
|
# snapname: "{{ snap_name }}"
|
||||||
# description: "Pre-firmware-update: {{ fw_current_version }} → {{ fw_new_version }}"
|
# description: "Pre-firmware-update: {{ firmware_current_version }} → {{ firmware_new_version }}"
|
||||||
# timeout: 60
|
# timeout: 60
|
||||||
# delegate_to: localhost
|
# delegate_to: localhost
|
||||||
|
|
||||||
@@ -433,7 +460,7 @@
|
|||||||
# - name: "ROLLBACK | Record result"
|
# - name: "ROLLBACK | Record result"
|
||||||
# ansible.builtin.set_fact:
|
# ansible.builtin.set_fact:
|
||||||
# update_result: "rolled_back"
|
# update_result: "rolled_back"
|
||||||
# fw_post_version: "{{ fw_current_version }}"
|
# fw_post_version: "{{ firmware_current_version }}"
|
||||||
|
|
||||||
# always:
|
# always:
|
||||||
# # Best-effort: disable maintenance mode whether update succeeded or rolled back.
|
# # Best-effort: disable maintenance mode whether update succeeded or rolled back.
|
||||||
@@ -468,7 +495,7 @@
|
|||||||
# {{ host }}
|
# {{ host }}
|
||||||
# fw check : {{ h.firmware_status | default('unknown') }}
|
# fw check : {{ h.firmware_status | default('unknown') }}
|
||||||
# result : {{ h.update_result | default('unknown') }}
|
# result : {{ h.update_result | default('unknown') }}
|
||||||
# version : {{ h.fw_post_version | default(h.fw_current_version | default('?')) }}
|
# version : {{ h.fw_post_version | default(h.firmware_current_version | default('?')) }}
|
||||||
# {% endfor %}
|
# {% endfor %}
|
||||||
# _any_issue: >-
|
# _any_issue: >-
|
||||||
# {{ groups['opnsense']
|
# {{ groups['opnsense']
|
||||||
|
|||||||
Reference in New Issue
Block a user