diff --git a/files/ansible-playbooks/sot-updater.yml b/files/ansible-playbooks/sot-updater.yml index ca4ebdc..cee61c9 100644 --- a/files/ansible-playbooks/sot-updater.yml +++ b/files/ansible-playbooks/sot-updater.yml @@ -2637,91 +2637,128 @@ non_ts_diff_found: true changed_when: false - - name: Indoor | Normalize Dev2 passfile facts (avoid undefined) - delegate_to: localhost - set_fact: - dev2_passfile_used_lldp: "{{ dev2_passfile_used_lldp | default('NONE') }}" - dev2_passfile_used_lldp6: "{{ dev2_passfile_used_lldp6 | default('NONE') }}" - changed_when: false - # ----------------------- Dev2 payredirect config flag -> payredirect ----------------------- - - name: Dev2 | Read payredirect enabled flag + - name: Dev2 | Read payredirect (tunnel) when: - - (dev2_passfile_used | default('NONE')) != 'NONE' - or ((dev2_passfile_used_lldp | default('NONE')) != 'NONE') - or ((dev2_passfile_used_lldp6 | default('NONE')) != 'NONE') + - tunnel_ok | default(false) + - dev2_passfile_used != 'NONE' delegate_to: localhost shell: | - set -o pipefail - - # Try every DEV2 shell path that is available. - # Stop only after a path actually returns true/false. - if [ "{{ dev2_passfile_used | default('NONE') }}" != "NONE" ]; then - PORT="{{ _local_port }}" - OUT="$(sshpass -f "{{ dev2_passfile_used }}" ssh {{ ssh_opts_common }} \ - -o ConnectTimeout={{ ssh_timeout }} \ - -p "$PORT" "{{ dev2_ssh_user }}@127.0.0.1" \ - "cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1" 2>/dev/null || true)" - case "$(printf '%s' "$OUT" | tr '[:upper:]' '[:lower:]')" in - *true*) echo true; exit 0 ;; - *false*) echo false; exit 0 ;; - esac - fi - - if [ "{{ dev2_passfile_used_lldp | default('NONE') }}" != "NONE" ] && [ -n "{{ lldp_dev2_ip | default('') }}" ]; then - OUT="$(sshpass -f "{{ dev2_passfile_used_lldp }}" ssh \ - -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ - -o ConnectTimeout=15 \ - "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" \ - "cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1" 2>/dev/null || true)" - case "$(printf '%s' "$OUT" | tr '[:upper:]' '[:lower:]')" in - *true*) echo true; exit 0 ;; - *false*) echo false; exit 0 ;; - esac - fi - - if [ "{{ dev2_passfile_used_lldp6 | default('NONE') }}" != "NONE" ] && [ -n "{{ lldp_dev2_ip6 | default('') }}" ]; then - IP6="{{ lldp_dev2_ip6 }}" - F="{{ dev2_passfile_used_lldp6 }}" - OUT="$(sshpass -p '{{ dev1_pass }}' ssh {{ ssh_opts_common }} \ - "{{ dev1_user }}@{{ ansible_host|default(inventory_hostname) }}" \ - "sshpass -f '/tmp/${F}' ssh \ - -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ - -o ConnectTimeout={{ ssh_timeout }} \ - '{{ dev2_ssh_user }}@\[${IP6}%{{ dev1_iface }}\]' \ - \"cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1\"" 2>/dev/null || true)" - case "$(printf '%s' "$OUT" | tr '[:upper:]' '[:lower:]')" in - *true*) echo true; exit 0 ;; - *false*) echo false; exit 0 ;; - esac - fi - - exit 0 + PORT="{{ _local_port }}" + sshpass -f "{{ dev2_passfile_used }}" ssh {{ ssh_opts_common }} \ + -o ConnectTimeout={{ ssh_timeout }} \ + -p "$PORT" "{{ dev2_ssh_user }}@127.0.0.1" \ + "cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1" args: executable: /bin/bash - register: dev2_payredirect_raw + register: dev2_payredirect_tunnel changed_when: false failed_when: false ignore_errors: true + - name: Dev2 | Read payredirect (LLDP IPv4) + when: + - tunnel_ok | default(false) + - dev2_passfile_used == 'NONE' + - (lldp_dev2_ip | default('') | length) > 0 + - dev2_passfile_used_lldp is defined + - dev2_passfile_used_lldp != 'NONE' + delegate_to: localhost + shell: | + sshpass -f "{{ dev2_passfile_used_lldp }}" ssh \ + -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ + -o ConnectTimeout=15 \ + "{{ dev2_ssh_user }}@{{ lldp_dev2_ip }}" \ + "cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1" + args: + executable: /bin/bash + register: dev2_payredirect_lldp + changed_when: false + failed_when: false + ignore_errors: true + + - name: Dev2 | Read payredirect (LLDP IPv6 via Dev1) + when: + - tunnel_ok | default(false) + - dev2_passfile_used == 'NONE' + - (dev2_passfile_used_lldp is not defined or dev2_passfile_used_lldp == 'NONE') + - lldp_dev2_ip6 is defined + - lldp_dev2_ip6 | length > 0 + - dev2_passfile_used_lldp6 is defined + - dev2_passfile_used_lldp6 != 'NONE' + delegate_to: localhost + shell: | + IP6="{{ lldp_dev2_ip6 }}" + F="{{ dev2_passfile_used_lldp6 }}" + if [ -z "$IP6" ] || [ -z "$F" ] || [ "$F" = "NONE" ]; then + exit 0 + fi + + sshpass -p '{{ dev1_pass }}' ssh {{ ssh_opts_common }} \ + "{{ dev1_user }}@{{ ansible_host|default(inventory_hostname) }}" \ + "sshpass -f '/tmp/${F}' ssh \ + -o StrictHostKeyChecking=no -o PubkeyAuthentication=no \ + -o ConnectTimeout={{ ssh_timeout }} \ + '{{ dev2_ssh_user }}@\[${IP6}%{{ dev1_iface }}\]' \ + 'cat /tmp/config.json 2>/dev/null | grep -i block -A2 | grep enab | head -n1'" + args: + executable: /bin/bash + register: dev2_payredirect_lldp6 + changed_when: false + failed_when: false + ignore_errors: true + + - name: Dev2 | Select payredirect output + delegate_to: localhost + set_fact: + payredirect_raw: >- + {{ + (dev2_payredirect_tunnel.stdout | default('') | trim) + if ( + (dev2_payredirect_tunnel is defined) and + ((dev2_payredirect_tunnel.stdout | default('') | trim | length) > 0) + ) + else ( + (dev2_payredirect_lldp.stdout | default('') | trim) + if ( + (dev2_payredirect_lldp is defined) and + ((dev2_payredirect_lldp.stdout | default('') | trim | length) > 0) + ) + else ( + (dev2_payredirect_lldp6.stdout | default('') | trim) + if ( + (dev2_payredirect_lldp6 is defined) and + ((dev2_payredirect_lldp6.stdout | default('') | trim | length) > 0) + ) + else '' + ) + ) + }} + changed_when: false + - name: Dev2 | Normalize payredirect value delegate_to: localhost vars: - payredirect_raw_clean: "{{ dev2_payredirect_raw.stdout | default('') | trim | lower }}" + _payredirect_raw_clean: "{{ payredirect_raw | default('') | trim | lower }}" set_fact: payredirect_value: >- - {{ - payredirect_raw_clean - if payredirect_raw_clean in ['true', 'false'] - else 'na' - }} + {%- if 'true' in _payredirect_raw_clean -%} + true + {%- elif 'false' in _payredirect_raw_clean -%} + false + {%- else -%} + na + {%- endif -%} changed_when: false - name: Dev2 | payredirect debug delegate_to: localhost debug: msg: - - "payredirect_raw={{ dev2_payredirect_raw.stdout | default('') | trim }}" + - "tunnel rc={{ dev2_payredirect_tunnel.rc | default('n/a') }} out={{ dev2_payredirect_tunnel.stdout | default('') | trim }} err={{ dev2_payredirect_tunnel.stderr | default('') | trim }}" + - "lldp4 rc={{ dev2_payredirect_lldp.rc | default('n/a') }} out={{ dev2_payredirect_lldp.stdout | default('') | trim }} err={{ dev2_payredirect_lldp.stderr | default('') | trim }}" + - "lldp6 rc={{ dev2_payredirect_lldp6.rc | default('n/a') }} out={{ dev2_payredirect_lldp6.stdout | default('') | trim }} err={{ dev2_payredirect_lldp6.stderr | default('') | trim }}" + - "payredirect_raw={{ payredirect_raw | default('') | trim }}" - "payredirect_value={{ payredirect_value | default('na') }}" - name: Scan tracking | Dev2 payredirect outcome @@ -2764,6 +2801,13 @@ non_ts_diff_found: true changed_when: false + - name: Indoor | Normalize Dev2 passfile facts (avoid undefined) + delegate_to: localhost + set_fact: + dev2_passfile_used_lldp: "{{ dev2_passfile_used_lldp | default('NONE') }}" + dev2_passfile_used_lldp6: "{{ dev2_passfile_used_lldp6 | default('NONE') }}" + changed_when: false + # ----------------------- Dev2 indoor_ip resolution (ppp0/eth0.4000 preferred) ----------------------- - name: Indoor | Compute fallback connected IP (as used for Dev2 reachability) delegate_to: localhost