0406
This commit is contained in:
@@ -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 we’re 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user