From d51199700adf1bac77fbf66f8027b29d88ff297c Mon Sep 17 00:00:00 2001 From: pavel Date: Fri, 7 Nov 2025 09:33:06 +0200 Subject: [PATCH] 09:33 --- files/ansible-playbooks/sot-updater.yml | 162 +++++++++++++++--------- 1 file changed, 102 insertions(+), 60 deletions(-) diff --git a/files/ansible-playbooks/sot-updater.yml b/files/ansible-playbooks/sot-updater.yml index 6bad8d6..a27faa0 100644 --- a/files/ansible-playbooks/sot-updater.yml +++ b/files/ansible-playbooks/sot-updater.yml @@ -429,6 +429,71 @@ payload_encoding: "string" changed_when: false + # ----------------------- Dev1 SSID count (strict then fallback) ----------------------- + - name: Dev1 | Count SSID lines (strict: 'ssid' + 'ikeja') + delegate_to: localhost + shell: | + sshpass -p '{{ dev1_pass }}' ssh {{ ssh_opts_common }} \ + "{{ dev1_user }}@{{ ansible_host|default(inventory_hostname) }}" \ + "cat /tmp/config.json 2>/dev/null | grep ssid | grep ikeja | wc -l" + register: ssid_strict_count_raw + changed_when: false + failed_when: false + ignore_errors: true + + - name: Dev1 | Decide if strict count usable + delegate_to: localhost + set_fact: + ssid_strict_count: "{{ (ssid_strict_count_raw.stdout | default('0')) | trim | int }}" + ssid_strict_ok: "{{ ((ssid_strict_count_raw.stdout | default('0')) | trim | int) > 0 and (((ssid_strict_count_raw.stdout | default('0')) | trim | int) % 2 == 0) }}" + + - name: Dev1 | Count SSID lines (fallback exclude bssid/auto_ssid/SC/backhaul) + when: not ssid_strict_ok | default(false) + delegate_to: localhost + shell: | + sshpass -p '{{ dev1_pass }}' ssh {{ ssh_opts_common }} \ + "{{ dev1_user }}@{{ ansible_host|default(inventory_hostname) }}" \ + "cat /tmp/config.json 2>/dev/null | grep ssid | grep -vE 'bssid|auto_ssid|SC|backhaul' | wc -l" + register: ssid_fallback_count_raw + changed_when: false + failed_when: false + ignore_errors: true + + - name: Dev1 | Compute final SSID count + delegate_to: localhost + set_fact: + ssid_fallback_count: "{{ (ssid_fallback_count_raw.stdout | default('0')) | trim | int }}" + ssid_final_count: >- + {{ + ( (ssid_strict_count | int) // 2 ) + if (ssid_strict_ok | default(false)) + else ( (ssid_fallback_count | int) // 2 ) + }} + multissidfix_value: "{{ (ssid_final_count | int) ~ ' ssids' }}" + + - name: Publish Dev1 multissidfix custom field + delegate_to: localhost + 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': 'custom_field_set', + 'task_add1': 'multissidfix', + 'task_result': multissidfix_value + } | to_json }}" + payload_encoding: "string" + changed_when: false + # ----------------------- Dev1 wifidebug.sh check & publish ----------------------- - name: Dev1 | Check wifidebug.sh presence delegate_to: localhost @@ -541,7 +606,7 @@ msg: - "LLDP-derived Dev2 IP (best-effort): {{ (lldp_ip_raw.stdout | default('') | trim) if ((lldp_ip_raw.stdout | default('') | trim | length) > 0) else '' }}" - # ------ NEW: Try direct SSH to LLDP IP from localhost (two-step, two-passfiles) ------ + # ------ NEW: Try direct SSH to LLDP IP from localhost (no extra tunnel) ------ - name: Set LLDP IP fact when: - tunnel_ok | default(false) @@ -550,54 +615,28 @@ set_fact: lldp_dev2_ip: "{{ lldp_ip_raw.stdout | default('') | trim }}" - # Step 1: try basicpass - - name: Dev2 | LLDP auth with basicpass + - name: Try DEV2 login via direct LLDP IP when: - tunnel_ok | default(false) - dev2_passfile_used == 'NONE' - lldp_dev2_ip | length > 0 delegate_to: localhost shell: | - timeout 20s sshpass -f basicpass ssh {{ ssh_opts_common }} \ - -o ConnectionAttempts=1 -o ConnectTimeout=10 \ - "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" "echo ok" - register: lldp_auth_basic + for f in basicpass basicpass2; do + if timeout 20s sshpass -f "$f" ssh {{ ssh_opts_common }} \ + -o ConnectionAttempts=1 -o ConnectTimeout=10 \ + "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" "echo ok" >/dev/null 2>&1; then + echo "$f"; exit 0 + fi + done + exit 1 + register: dev2_auth_lldp changed_when: false failed_when: false ignore_errors: true - # Step 2: if basicpass failed, try basicpass2 - - name: Dev2 | LLDP auth with basicpass2 (if first failed) - when: - - tunnel_ok | default(false) - - dev2_passfile_used == 'NONE' - - lldp_dev2_ip | length > 0 - - (lldp_auth_basic.rc | default(1)) != 0 - delegate_to: localhost - shell: | - timeout 20s sshpass -f basicpass2 ssh {{ ssh_opts_common }} \ - -o ConnectionAttempts=1 -o ConnectTimeout=10 \ - "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" "echo ok" - register: lldp_auth_basic2 - changed_when: false - failed_when: false - ignore_errors: true - - # Decide which passfile we’ll use for LLDP path - - name: Dev2 | LLDP passfile decision - when: - - tunnel_ok | default(false) - - dev2_passfile_used == 'NONE' - - lldp_dev2_ip | length > 0 - delegate_to: localhost - set_fact: - dev2_passfile_used_lldp: >- - {{ - 'basicpass' if ((lldp_auth_basic.rc | default(1)) == 0) - else ('basicpass2' if ((lldp_auth_basic2.rc | default(1)) == 0) else 'NONE') - }} - - - name: Dev2 | LLDP decision debug + # Debug 1: what happened during LLDP auth try + - name: Dev2 | LLDP path selection debug when: - tunnel_ok | default(false) - dev2_passfile_used == 'NONE' @@ -606,8 +645,27 @@ debug: msg: - "LLDP candidate IP={{ lldp_dev2_ip }}" - - "LLDP basicpass rc={{ lldp_auth_basic.rc | default('n/a') }}" - - "LLDP basicpass2 rc={{ lldp_auth_basic2.rc | default('n/a') }}" + - "LLDP auth rc={{ dev2_auth_lldp.rc | default('n/a') }}" + - "passfile (if any) will follow in next step" + + - name: Set dev2_passfile_used_lldp + when: + - tunnel_ok | default(false) + - dev2_passfile_used == 'NONE' + - lldp_dev2_ip | length > 0 + delegate_to: localhost + set_fact: + dev2_passfile_used_lldp: "{{ (dev2_auth_lldp.rc | default(1)) == 0 | ternary(dev2_auth_lldp.stdout | default('') | trim, 'NONE') }}" + + # Debug 2: which passfile will be used for firmux read + - name: Dev2 | LLDP passfile decision + when: + - tunnel_ok | default(false) + - dev2_passfile_used == 'NONE' + - lldp_dev2_ip | length > 0 + delegate_to: localhost + debug: + msg: - "Using passfile for LLDP path: {{ dev2_passfile_used_lldp }}" # Optional quick TCP check so you see port reachability (no fail) @@ -623,7 +681,6 @@ failed_when: false ignore_errors: true - # Read firmux via LLDP IP using the decided passfile (with hard timeout) - name: Dev2 | Read firmux (direct LLDP IP) when: - tunnel_ok | default(false) @@ -632,27 +689,12 @@ - dev2_passfile_used_lldp != 'NONE' delegate_to: localhost shell: | - timeout 20s sshpass -f "{{ dev2_passfile_used_lldp }}" ssh {{ ssh_opts_common }} \ - -o ConnectionAttempts=1 -o ConnectTimeout=10 \ + sshpass -f "{{ dev2_passfile_used_lldp }}" ssh \ + -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ + -o ConnectTimeout=15 \ "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" \ "cat /usr/lib/release/firmux 2>/dev/null || true" register: dev2_firmux_lldp - changed_when: false - failed_when: false - ignore_errors: true - - # ---------------- Primary-tunnel firmux read (unchanged) ---------------- - - name: Dev2 | Read firmux - when: tunnel_ok|default(false) and dev2_passfile_used != 'NONE' - delegate_to: localhost - shell: | - PORT="{{ _local_port }}" - sshpass -f "{{ dev2_passfile_used }}" ssh \ - -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ - -o ConnectTimeout=15 \ - -p "$PORT" "{{ dev2_ssh_user }}@127.0.0.1" \ - "cat /usr/lib/release/firmux 2>/dev/null || true" - register: dev2_firmux failed_when: false ignore_errors: true