diff --git a/files/ansible-playbooks/sot-updater.yml b/files/ansible-playbooks/sot-updater.yml index 26d92fe..081d535 100644 --- a/files/ansible-playbooks/sot-updater.yml +++ b/files/ansible-playbooks/sot-updater.yml @@ -162,7 +162,7 @@ {{ dict( nb_tokens - | select('match', '^[a-zA-Z_]+=') + | select('match', '^[a-zA-Z_]+=') | map('split', '=', 1) | map('list') ) @@ -281,6 +281,14 @@ - "Device: {{ inventory_hostname }}" - "Mode: report-only (soft-fail telemetry)" + # ----------------------- Scan status tracking (journal finalization) ----------------------- + - name: Init scan status tracking + delegate_to: localhost + set_fact: + scan_ok: [] + scan_fail: [] + changed_when: false + # ----------------------- Temp IP on DEV1 ----------------------- - name: Add temporary IP on DEV1 raw: "{{ pathprefix }} ip a add {{ dev2_side_ip }} dev {{ dev1_iface }}" @@ -432,6 +440,14 @@ set_fact: dev1_fw_clean: "{{ dev1_fw_clean_cmd.stdout|trim }}" + # ----------------------- Scan tracking: Dev1 fw_version ----------------------- + - name: Scan tracking | Dev1 fw_version outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + (['fw_version'] if ((dev1_fw_clean | default('') | length) > 0) else []) }}" + scan_fail: "{{ scan_fail + (['fw_version=unavailable'] if ((dev1_fw_clean | default('') | length) == 0) else []) }}" + changed_when: false + - name: Publish Dev1 fw_version delegate_to: localhost uri: @@ -488,6 +504,13 @@ set_fact: multissidfix_value: "{{ (ssid_profiles_summary_raw.stdout | default('0 (0e 0d)')) | trim }}" + # ----------------------- Scan tracking: Dev1 multissidfix ----------------------- + - name: Scan tracking | Dev1 multissidfix outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + ['multissidfix'] }}" + changed_when: false + - name: Dev1 | multissidfix debug delegate_to: localhost when: multissidfix_value is defined @@ -642,6 +665,13 @@ {{ scroll24_ver_clean | default('v1') }}_{{ scroll24_schedule }} {%- endif -%} + # ----------------------- Scan tracking: Dev1 scroll24 ----------------------- + - name: Scan tracking | Dev1 scroll24 outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + ['scroll24'] }}" + changed_when: false + - name: Dev1 | scroll24 debug delegate_to: localhost debug: @@ -674,7 +704,7 @@ } | to_json }}" payload_encoding: "string" changed_when: false - + # ----------------------- Dev1 wifidebug.sh check & publish ----------------------- - name: Dev1 | Check wifidebug.sh presence @@ -718,6 +748,13 @@ {%- elif (wd_version_clean | default('') | length) > 0 -%}v{{ wd_version_clean }} {%- else -%}n/a{%- endif -%} + # ----------------------- Scan tracking: Dev1 wifidebug ----------------------- + - name: Scan tracking | Dev1 wifidebug outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + ['wifidebug'] }}" + changed_when: false + - name: Publish Dev1 wifidebug custom field delegate_to: localhost uri: @@ -768,6 +805,14 @@ else (dev1_bootenv_wc.stdout | default('') | trim) }} + # ----------------------- Scan tracking: Dev1 cpe_bootenv ----------------------- + - name: Scan tracking | Dev1 cpe_bootenv outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + (['cpe_bootenv'] if ((cpe_bootenv_value | default('unavailable')) != 'unavailable') else []) }}" + scan_fail: "{{ scan_fail + (['cpe_bootenv=unavailable'] if ((cpe_bootenv_value | default('unavailable')) == 'unavailable') else []) }}" + changed_when: false + - name: Publish Dev1 cpe_bootenv custom field delegate_to: localhost uri: @@ -1216,6 +1261,14 @@ - "dev2_firmux_text='{{ dev2_firmux_text | default('') | regex_replace('\n','\\n') }}'" - "indoor_fw_norm='{{ indoor_fw_norm | default('') }}'" + # ----------------------- Scan tracking: Dev2 indoor_fwver ----------------------- + - name: Scan tracking | Dev2 indoor_fwver outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + (['indoor_fwver'] if ((indoor_fw_norm | default('') | length) > 0) else []) }}" + scan_fail: "{{ scan_fail + (['indoor_fwver=unavailable'] if ((indoor_fw_norm | default('') | length) == 0) else []) }}" + changed_when: false + - name: Publish Dev2 indoor_fwver delegate_to: localhost uri: @@ -1350,6 +1403,14 @@ else (indoor_bootenv_raw | default('') | trim) }} + # ----------------------- Scan tracking: Dev2 indoor_bootenv ----------------------- + - name: Scan tracking | Dev2 indoor_bootenv outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + (['indoor_bootenv'] if ((indoor_bootenv_value | default('unavailable')) != 'unavailable') else []) }}" + scan_fail: "{{ scan_fail + (['indoor_bootenv=unavailable'] if ((indoor_bootenv_value | default('unavailable')) == 'unavailable') else []) }}" + changed_when: false + - name: Publish Dev2 indoor_bootenv custom field delegate_to: localhost uri: @@ -1490,6 +1551,14 @@ ) }} + # ----------------------- Scan tracking: Dev2 indoor_hostname ----------------------- + - name: Scan tracking | Dev2 indoor_hostname outcome + delegate_to: localhost + set_fact: + scan_ok: "{{ scan_ok + (['indoor_hostname'] if ((indoor_hostname_value | default('unavailable')) != 'unavailable') else []) }}" + scan_fail: "{{ scan_fail + (['indoor_hostname=unavailable'] if ((indoor_hostname_value | default('unavailable')) == 'unavailable') else []) }}" + changed_when: false + - name: Dev2 | indoor_hostname debug delegate_to: localhost debug: @@ -1521,6 +1590,41 @@ payload_encoding: "string" changed_when: false + # ----------------------- Final journal: scan status ----------------------- + - name: Journal final scan status (success / partial / fail) + delegate_to: localhost + vars: + _ok_n: "{{ (scan_ok | default([])) | length }}" + _fail_n: "{{ (scan_fail | default([])) | length }}" + _reason: "{{ (scan_fail | default([])) | join('; ') }}" + _msg: >- + {%- if (_fail_n | int) == 0 -%} + scan was successful + {%- elif (_ok_n | int) == 0 -%} + scanning failed — {{ _reason }} + {%- else -%} + scan was completed partially — {{ _reason }} + {%- endif -%} + 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': _msg + } | to_json }}" + payload_encoding: "string" + changed_when: false + post_tasks: - name: "✅ Cleanup start" debug: