From ec1b9838a94d259db7b61a7cb0152b74a6c96442 Mon Sep 17 00:00:00 2001 From: pavel Date: Sat, 25 Oct 2025 04:34:21 +0300 Subject: [PATCH] 0427 --- files/ansible-playbooks/sot-updater.yml | 73 +++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/files/ansible-playbooks/sot-updater.yml b/files/ansible-playbooks/sot-updater.yml index 74778a6..fedb54c 100644 --- a/files/ansible-playbooks/sot-updater.yml +++ b/files/ansible-playbooks/sot-updater.yml @@ -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