Compare commits
14 Commits
8519e0f9e7
...
introducin
| Author | SHA1 | Date | |
|---|---|---|---|
| 7fdf0e59a4 | |||
| e1ae30c4ce | |||
| 8574891864 | |||
| 02e567730a | |||
| f5b82755fd | |||
| 7e7da74f55 | |||
| 398392445e | |||
| f75c5fd2b4 | |||
| 6208ff4c9e | |||
| aa51ba382f | |||
| e1258a554f | |||
| 419834e4ca | |||
| ec1b9838a9 | |||
| 9f6e93827a |
@@ -51,6 +51,79 @@
|
||||
failed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
# ---------------------------- Idempotent temp IP on DEV1 ----------------------------
|
||||
- name: Add temporary IP on DEV1 (tolerate 'File exists')
|
||||
ansible.builtin.raw: >
|
||||
{{ pathprefix }}
|
||||
ip a add {{ dev2_side_ip }} dev {{ dev1_iface }}
|
||||
register: add_ip
|
||||
changed_when: add_ip.rc == 0
|
||||
failed_when: >
|
||||
add_ip.rc != 0
|
||||
and ('File exists' not in (add_ip.stdout | default('')))
|
||||
and ('File exists' not in (add_ip.stderr | default('')))
|
||||
|
||||
- name: Debug result of adding temp IP to DEV1
|
||||
ansible.builtin.debug:
|
||||
msg:
|
||||
- "add_ip.rc={{ add_ip.rc | default('') }}"
|
||||
- "add_ip.stdout={{ (add_ip.stdout | default('')) | trim }}"
|
||||
- "add_ip.stderr={{ (add_ip.stderr | default('')) | trim }}"
|
||||
|
||||
# ---------------------------- Discover MAC via bridge FDB and add static ARP ----------------------------
|
||||
- name: Discover DEV2 MAC via bridge fdb on DEV1 (best-effort)
|
||||
ansible.builtin.raw: >
|
||||
{{ pathprefix }}
|
||||
bridge fdb show {{ dev1_iface }} | grep eth0 | grep -v permanent | grep master | awk '{print $1}' | head -n1
|
||||
register: dev2_mac_scan
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Capture discovered DEV2 MAC (if any)
|
||||
ansible.builtin.set_fact:
|
||||
dev2_mac: "{{ (dev2_mac_scan.stdout | default('') ) | trim }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Clear existing ARP entry for DEV2 on DEV1 (best-effort)
|
||||
ansible.builtin.raw: >
|
||||
{{ pathprefix }}
|
||||
ip neigh del {{ dev2_host }} dev {{ dev1_iface }} 2>/dev/null || true
|
||||
register: dev2_arp_del
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Add static ARP entry on DEV1 (locks DEV2 IP → discovered MAC)
|
||||
when: dev2_mac is defined and dev2_mac | length > 0
|
||||
ansible.builtin.raw: >
|
||||
{{ pathprefix }}
|
||||
ip neigh add {{ dev2_host }} lladdr {{ dev2_mac }} dev {{ dev1_iface }} nud permanent
|
||||
register: dev2_arp_add
|
||||
changed_when: dev2_arp_add.rc == 0
|
||||
failed_when: >
|
||||
dev2_arp_add.rc != 0
|
||||
and ('File exists' not in (dev2_arp_add.stdout | default('')))
|
||||
and ('File exists' not in (dev2_arp_add.stderr | default('')))
|
||||
|
||||
- name: Debug ARP action summary on DEV1
|
||||
ansible.builtin.debug:
|
||||
msg:
|
||||
- "dev2_mac={{ dev2_mac | default('UNSET') }}"
|
||||
- "arp_add.rc={{ dev2_arp_add.rc | default('') }}"
|
||||
- "arp_add.out={{ (dev2_arp_add.stdout | default('')) | trim }}"
|
||||
- "arp_add.err={{ (dev2_arp_add.stderr | default('')) | trim }}"
|
||||
|
||||
- name: Note skipping static ARP add (no MAC discovered)
|
||||
when: dev2_mac is not defined or dev2_mac | length == 0
|
||||
ansible.builtin.debug:
|
||||
msg: "No suitable dynamic MAC found via bridge fdb; skipping static ARP add on DEV1"
|
||||
|
||||
# ---------------------------- ARP refresh ----------------------------
|
||||
- name: Refresh ARP #1
|
||||
ansible.builtin.raw: "{{ pathprefix }} arping -U -I {{ arping_iface }} {{ dev2_side_ip_addr }} -c 3"
|
||||
failed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
- name: Refresh ARP #1
|
||||
raw: "{{ pathprefix }} arping -U -I {{ arping_iface }} {{ dev2_side_ip_addr }} -c 3"
|
||||
failed_when: false
|
||||
@@ -125,15 +198,25 @@
|
||||
failed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: Dev1 | Normalize banner (X.X.X-rYYYY)
|
||||
- name: Dev1 | Normalize banner → X.X.X-rYYYY (POSIX tools)
|
||||
delegate_to: localhost
|
||||
shell: |
|
||||
printf '%s\n' "{{ dev1_banner.stdout | trim }}" \
|
||||
| awk -F '|' '{print $1}' \
|
||||
| sed -E 's/[[:space:]]+rev[[:space:]]+/-r/' \
|
||||
| grep -Eo '[0-9]+\.[0-9]+\.[0-9]+-r[0-9]+' || true
|
||||
register: dev1_fw_clean_cmd
|
||||
changed_when: false
|
||||
|
||||
- name: Dev1 | Set final fw string
|
||||
delegate_to: localhost
|
||||
set_fact:
|
||||
dev1_fw_clean: >-
|
||||
{{
|
||||
(dev1_banner.stdout | default('') | regex_search('[0-9]+\\.[0-9]+\\.[0-9]+-r[0-9]+'))
|
||||
| default('', true)
|
||||
| trim
|
||||
}}
|
||||
dev1_fw_clean: "{{ dev1_fw_clean_cmd.stdout | trim }}"
|
||||
|
||||
- name: Debug Dev1 normalized firmware
|
||||
delegate_to: localhost
|
||||
debug:
|
||||
msg: "Dev1 fw_version {{ dev1_fw_clean | default('N/A') }}"
|
||||
|
||||
- name: Publish Dev1 fw_version
|
||||
delegate_to: localhost
|
||||
@@ -202,13 +285,31 @@
|
||||
failed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: Dev2 | Extract firmware version line
|
||||
- name: Dev2 | Extract firmware version line (prefer 'rev', else first non-empty)
|
||||
delegate_to: localhost
|
||||
run_once: true
|
||||
set_fact:
|
||||
indoor_fw_norm: >-
|
||||
{{
|
||||
(dev2_firmux.stdout | default('') | regex_search('.*\\brev\\s*[0-9]+.*'))
|
||||
| default('', true)
|
||||
(
|
||||
(
|
||||
dev2_firmux.stdout | default('') | regex_replace('\r','')
|
||||
) | split('\n')
|
||||
| map('trim')
|
||||
| select('truthy')
|
||||
| list
|
||||
) | select('match', '(?i).*\\brev\\s*[0-9]+.*')
|
||||
| list
|
||||
| first
|
||||
| default(
|
||||
((dev2_firmux.stdout | default('') | regex_replace('\r',''))
|
||||
| split('\n')
|
||||
| map('trim')
|
||||
| select('truthy')
|
||||
| list
|
||||
| first
|
||||
| default(''))
|
||||
)
|
||||
| trim
|
||||
}}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user