This commit is contained in:
2025-10-25 04:06:16 +03:00
parent 03b4a7e953
commit b340c713df

View File

@@ -24,7 +24,7 @@
# DEV1 side addressing to reach DEV2 # DEV1 side addressing to reach DEV2
dev2_side_ip: "192.168.1.11/24" # IP we add/remove on DEV1 dev2_side_ip: "192.168.1.11/24" # IP we add/remove on DEV1
dev1_iface: "br-wan" # DEV1 interface where IP is added dev1_iface: "br-wan" # DEV1 interface where IP is added
arping_iface: "eth0" # iface used for ARP refreshes (as per update-indoor) arping_iface: "eth0" # iface used for ARP refreshes
dev2_side_ip_addr: "{{ dev2_side_ip.split('/')[0] }}" dev2_side_ip_addr: "{{ dev2_side_ip.split('/')[0] }}"
# Controller SSH common opts # Controller SSH common opts
@@ -130,8 +130,7 @@
register: pick_port register: pick_port
changed_when: false changed_when: false
# --- replace the single failing "Record chosen local port & ControlMaster path" task with these --- # ***** FIXED: split mktemp + sock path *****
- name: Record chosen local port - name: Record chosen local port
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
@@ -179,28 +178,6 @@
set_fact: set_fact:
_ctrl_sock: "{{ _ctrl_dir }}/ssh_tunnel_ctl" _ctrl_sock: "{{ _ctrl_dir }}/ssh_tunnel_ctl"
- name: Journal if no free local port was found (continue anyway)
when: _local_port | length == 0
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_entry',
'task_result': 'tunnel_port_pick_failed'
} | to_json }}"
payload_encoding: "string"
# ---------------------------- AIRPING #2 (before tunnel) ---------------------------- # ---------------------------- AIRPING #2 (before tunnel) ----------------------------
- name: Refresh ARP #2 on DEV1 LAN (pre-tunnel) - name: Refresh ARP #2 on DEV1 LAN (pre-tunnel)
when: _local_port | length > 0 when: _local_port | length > 0
@@ -283,7 +260,7 @@
failed_when: false failed_when: false
ignore_errors: true ignore_errors: true
# (1) Show what we got from banner so we can see what were parsing # ***** FIXED: stepwise, flag-safe normalization for DEV1 *****
- name: Dev1 | Debug raw banner - name: Dev1 | Debug raw banner
when: dev1_banner is defined when: dev1_banner is defined
delegate_to: localhost delegate_to: localhost
@@ -291,19 +268,16 @@
msg: msg:
- "DEV1 banner raw: {{ (dev1_banner.stdout | default('') | trim) | regex_replace('\n',' ') }}" - "DEV1 banner raw: {{ (dev1_banner.stdout | default('') | trim) | regex_replace('\n',' ') }}"
# (2) Strip timestamp/anything after a pipe
- name: Dev1 | Strip trailing ' | ...' - name: Dev1 | Strip trailing ' | ...'
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
dev1_no_ts: "{{ (dev1_banner.stdout | default('') | trim) | regex_replace('\\|.*$', '') }}" dev1_no_ts: "{{ (dev1_banner.stdout | default('') | trim) | regex_replace('\\|.*$', '') }}"
# (3) Convert 'rev YYYY' to '-rYYYY' (case-insensitive, using explicit flag)
- name: Dev1 | Convert 'rev YYYY' → '-rYYYY' - name: Dev1 | Convert 'rev YYYY' → '-rYYYY'
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
dev1_rev_dash: "{{ dev1_no_ts | regex_replace('rev\\.?\\s*([0-9]+)\\s*$', '-r\\1', ignorecase=True) }}" dev1_rev_dash: "{{ dev1_no_ts | regex_replace('rev\\.?\\s*([0-9]+)\\s*$', '-r\\1', ignorecase=True) }}"
# (4) Extract the canonical core X.X.X-rYYYY (or empty if not found)
- name: Dev1 | Extract X.X.X-rYYYY core - name: Dev1 | Extract X.X.X-rYYYY core
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
@@ -462,7 +436,6 @@
failed_when: false failed_when: false
ignore_errors: true ignore_errors: true
# Show what we got from DEV2 so parsing is debuggable
- name: Dev2 | Debug raw firmux - name: Dev2 | Debug raw firmux
when: dev2_firmux is defined when: dev2_firmux is defined
delegate_to: localhost delegate_to: localhost
@@ -470,13 +443,11 @@
msg: msg:
- "DEV2 firmux raw: {{ (dev2_firmux.stdout | default('') | trim) | regex_replace('\n',' | ') }}" - "DEV2 firmux raw: {{ (dev2_firmux.stdout | default('') | trim) | regex_replace('\n',' | ') }}"
# Build the list of firmux lines (CRLF-safe)
- name: Dev2 | Build firmux lines list - name: Dev2 | Build firmux lines list
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
_firmux_lines: "{{ (dev2_firmux.stdout | default('') | regex_replace('\r','')) | split('\n') | map('trim') | list }}" _firmux_lines: "{{ (dev2_firmux.stdout | default('') | regex_replace('\r','')) | split('\n') | map('trim') | list }}"
# Choose the line (prefer one with 'rev NNNN'); fall back to first non-empty
- name: Dev2 | Choose firmux line (prefer containing 'rev NNNN') - name: Dev2 | Choose firmux line (prefer containing 'rev NNNN')
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
@@ -486,15 +457,22 @@
| default((_firmux_lines | select('truthy') | list | first) | default('')) | default((_firmux_lines | select('truthy') | list | first) | default(''))
}} }}
# ***** FIXED: ensure dev2_line_clean is defined before use, stepwise extraction *****
- name: Dev2 | Normalize to EXACT 'X.X.X rev YYYY' (lowercase 'rev', single space) - name: Dev2 | Strip trailing pipes and whitespace
when: tunnel_ok | default(false) delegate_to: localhost
set_fact:
dev2_line_clean: "{{ (dev2_line | default('') | trim) | regex_replace('\\|.*$', '') }}"
- name: Dev2 | Extract version (X.X.X) and rev number
delegate_to: localhost
set_fact:
dev2_ver: "{{ dev2_line_clean | regex_search('[0-9]+\\.[0-9]+\\.[0-9]+') | default('', true) }}"
dev2_rev_token: "{{ dev2_line_clean | regex_search('(?i)\\brev\\.?\\s*[0-9]+') | default('', true) }}"
dev2_rev_num: "{{ (dev2_rev_token | regex_replace('(?i).*\\brev\\.?\\s*', '')) if (dev2_rev_token | length) > 0 else '' }}"
- name: Dev2 | Build EXACT 'X.X.X rev YYYY' (lowercase 'rev', single space)
delegate_to: localhost delegate_to: localhost
set_fact: set_fact:
dev2_line_clean: "{{ (dev2_line | default('') | trim) | regex_replace('\\s*\\|.*$', '') }}"
dev2_ver: "{{ dev2_line_clean | regex_search('[0-9]+\\.[0-9]+\\.[0-9]+') | default('') }}"
dev2_rev_token: "{{ dev2_line_clean | regex_search('(?i)\\brev\\.?\\s*[0-9]+') | default('') }}"
dev2_rev_num: "{{ dev2_rev_token | regex_replace('(?i).*\\brev\\.?\\s*', '') }}"
indoor_fw_norm: "{{ (dev2_ver ~ ' rev ' ~ dev2_rev_num) if (dev2_ver|length>0 and dev2_rev_num|length>0) else '' }}" indoor_fw_norm: "{{ (dev2_ver ~ ' rev ' ~ dev2_rev_num) if (dev2_ver|length>0 and dev2_rev_num|length>0) else '' }}"
- name: Journal if DEV2 normalization failed (no version or rev) - name: Journal if DEV2 normalization failed (no version or rev)