20:52
This commit is contained in:
@@ -79,6 +79,60 @@
|
|||||||
- "{{ (nb_preflight.stderr_lines | default(['<no stderr>'])) }}"
|
- "{{ (nb_preflight.stderr_lines | default(['<no stderr>'])) }}"
|
||||||
- "raw stdout (joined): {{ nb_preflight.stdout | default('') | trim }}"
|
- "raw stdout (joined): {{ nb_preflight.stdout | default('') | trim }}"
|
||||||
|
|
||||||
|
# --- Abort early if cloud is unavailable (avoid requeue loops) ---
|
||||||
|
- name: "NB preflight | Detect cloud failure from script output"
|
||||||
|
when: nb_script.stat.exists
|
||||||
|
delegate_to: localhost
|
||||||
|
vars:
|
||||||
|
_lines: >-
|
||||||
|
{{ (nb_preflight.stdout | default('') | regex_replace('\r',''))
|
||||||
|
| split('\n') | map('trim') | list }}
|
||||||
|
_cloud_fail_line: >-
|
||||||
|
{{ (_lines | select('match', '^FAIL\\s+Cloud\\b') | list | last | default('')) }}
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
cloud_fail_line: "{{ _cloud_fail_line }}"
|
||||||
|
cloud_ok: "{{ ( _cloud_fail_line | length ) == 0 }}"
|
||||||
|
|
||||||
|
- name: "NB preflight | Journal + soft-close when cloud is unavailable"
|
||||||
|
when:
|
||||||
|
- nb_script.stat.exists
|
||||||
|
- not cloud_ok | default(true)
|
||||||
|
delegate_to: localhost
|
||||||
|
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: "{{ {
|
||||||
|
'inscope_device': (ansible_hostname | default(inventory_hostname)),
|
||||||
|
'task_name': 'journal_add',
|
||||||
|
'task_result': (
|
||||||
|
'preflight abort: cloud unavailable; closing without requeue. '
|
||||||
|
~ (cloud_fail_line | default(''))
|
||||||
|
)
|
||||||
|
} | to_json }}"
|
||||||
|
payload_encoding: "string"
|
||||||
|
register: rmq_cloud_unavail
|
||||||
|
changed_when: (rmq_cloud_unavail.json is defined) and (rmq_cloud_unavail.json.routed | default(false) | bool)
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: "NB preflight | Stop host due to cloud unavailability"
|
||||||
|
when:
|
||||||
|
- nb_script.stat.exists
|
||||||
|
- not cloud_ok | default(true)
|
||||||
|
ansible.builtin.meta: end_host
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --- Debug-only: capture the exact upgrade_cmd line and stop the play ---
|
# --- Debug-only: capture the exact upgrade_cmd line and stop the play ---
|
||||||
- name: "NB preflight | Extract exact upgrade_cmd line"
|
- name: "NB preflight | Extract exact upgrade_cmd line"
|
||||||
when: nb_script.stat.exists
|
when: nb_script.stat.exists
|
||||||
|
|||||||
Reference in New Issue
Block a user