This commit is contained in:
2026-01-20 13:35:16 +02:00
parent a19e3fbb17
commit 1c9cfb19b7

View File

@@ -1,14 +1,18 @@
# ptsd_reacquire_attempt.yml — DHCP reacquire verification (standalone)
# ptsd_reacquire_attempt.yml — DHCP reacquire verification + CASE A cleanup (standalone)
# Purpose:
# - Re-run Phase 0 to reach DEV2 under uncertain connectivity
# - Verify "migrated to DHCP" state on DEV2:
# * ppp0 is absent
# * eth0.4000 exists AND has IPv4
# 1) Re-run Phase 0 connectivity to DEV2 (same logic as main playbook)
# 2) Verify migrated DHCP state:
# - ppp0 is absent
# - eth0.4000 exists AND has IPv4
# 3) If CASE A confirmed (DHCP ok, no PPP), perform minimal cleanup step:
# - detect pending reboot process; if found, kill it
# Maintain cumulative cleanup report and print at end.
#
# Notes:
# - Intentionally ignores /tmp/ptsd.inprogress (it may be set during migration)
# - Intentionally does NO cleanup (to avoid impacting the main playbook)
# - Does NOT respect /tmp/ptsd.inprogress (verification runs while migration is in progress).
# - Does NOT do DEV1 teardown cleanup here (no tunnel/IP removal); this is intentional.
- name: "PTSD DHCP Reacquire Attempt | Phase 0 | Connectivity + wrapper + DHCP state check"
- name: "PTSD DHCP Reacquire Attempt | Phase 0 | Connectivity + wrapper + DHCP state check + CASE A cleanup"
hosts: all
gather_facts: no
@@ -594,54 +598,54 @@
esac
changed_when: false
# ============================ VERIFICATION: DHCP STATE ON DEV2 ============================
- name: "VERIFY | DEV2 check: ppp0 exists?"
# ============================ VERIFY: DHCP MIGRATION STATE ============================
- name: VERIFY | DEV2 check: ppp0 exists?
delegate_to: localhost
ansible.builtin.shell: |
export DEV2_CMD="ip link show ppp0 >/dev/null 2>&1 && echo YES || echo NO"
{{ dev2_exec_cmd }}
args: { executable: /bin/bash }
register: dev2_ppp0_exists
register: v_ppp0_exists
changed_when: false
failed_when: false
- name: "VERIFY | DEV2 check: eth0.4000 exists?"
- name: VERIFY | DEV2 check: eth0.4000 exists?
delegate_to: localhost
ansible.builtin.shell: |
export DEV2_CMD="ip link show eth0.4000 >/dev/null 2>&1 && echo YES || echo NO"
{{ dev2_exec_cmd }}
args: { executable: /bin/bash }
register: dev2_eth04000_exists
register: v_eth04000_exists
changed_when: false
failed_when: false
- name: "VERIFY | DEV2 check: eth0.4000 has IPv4?"
- name: VERIFY | DEV2 check: eth0.4000 has IPv4?
delegate_to: localhost
ansible.builtin.shell: |
export DEV2_CMD="ip -4 addr show dev eth0.4000 2>/dev/null | grep -m1 'inet ' >/dev/null 2>&1 && echo YES || echo NO"
{{ dev2_exec_cmd }}
args: { executable: /bin/bash }
register: dev2_eth04000_has_ipv4
register: v_eth04000_has_ipv4
changed_when: false
failed_when: false
- name: "VERIFY | Summarize DHCP migration state"
- name: VERIFY | Summarize DHCP migration state
delegate_to: localhost
ansible.builtin.set_fact:
ppp0_exists: "{{ (dev2_ppp0_exists.stdout | default('') | trim) == 'YES' }}"
eth04000_exists: "{{ (dev2_eth04000_exists.stdout | default('') | trim) == 'YES' }}"
eth04000_has_ipv4: "{{ (dev2_eth04000_has_ipv4.stdout | default('') | trim) == 'YES' }}"
ppp0_exists: "{{ (v_ppp0_exists.stdout | default('') | trim) == 'YES' }}"
eth04000_exists: "{{ (v_eth04000_exists.stdout | default('') | trim) == 'YES' }}"
eth04000_has_ipv4: "{{ (v_eth04000_has_ipv4.stdout | default('') | trim) == 'YES' }}"
dhcp_migrated_ok: >-
{{
((dev2_ppp0_exists.stdout | default('') | trim) != 'YES')
((v_ppp0_exists.stdout | default('') | trim) != 'YES')
and
((dev2_eth04000_exists.stdout | default('') | trim) == 'YES')
((v_eth04000_exists.stdout | default('') | trim) == 'YES')
and
((dev2_eth04000_has_ipv4.stdout | default('') | trim) == 'YES')
((v_eth04000_has_ipv4.stdout | default('') | trim) == 'YES')
}}
changed_when: false
- name: "VERIFY | Result: DHCP migrated (SUCCESS) or not (graceful stop)"
- name: VERIFY | Result: DHCP migrated (SUCCESS) or not (graceful stop)
delegate_to: localhost
ansible.builtin.debug:
msg:
@@ -652,8 +656,95 @@
- "dhcp_migrated_ok={{ dhcp_migrated_ok }}"
changed_when: false
- name: "VERIFY | Graceful stop if DHCP migration state is not confirmed"
- name: VERIFY | Graceful stop if DHCP migration state is not confirmed
when: not (dhcp_migrated_ok | bool)
delegate_to: localhost
ansible.builtin.debug:
msg:
- "Graceful stop: DHCP migration state is not confirmed (not CASE A)."
- "ppp0_exists={{ ppp0_exists }}"
- "eth0.4000_exists={{ eth04000_exists }}"
- "eth0.4000_has_ipv4={{ eth04000_has_ipv4 }}"
- "dev2_conn_final={{ dev2_conn_final }}"
changed_when: false
- name: VERIFY | End host if DHCP migration state is not confirmed
when: not (dhcp_migrated_ok | bool)
ansible.builtin.meta: end_host
# Intentionally no post_tasks cleanup in this playbook.
# ============================ CASE A CLEANUP: CANCEL PENDING REBOOT ============================
- name: CASE A | Initialize cumulative cleanup report
when: dhcp_migrated_ok | bool
delegate_to: localhost
ansible.builtin.set_fact:
cleanup_report: "case A observed"
changed_when: false
- name: "CASE A | DEV2 detect pending reboot processes (best-effort)"
when: dhcp_migrated_ok | bool
delegate_to: localhost
ansible.builtin.shell: |
# BusyBox-friendly: look for delayed reboot patterns.
export DEV2_CMD="ps w 2>/dev/null | grep -E '[r]eboot( |$)|[n]ohup reboot' || true"
{{ dev2_exec_cmd }}
args: { executable: /bin/bash }
register: reboot_ps
changed_when: false
failed_when: false
- name: "CASE A | DEV2 cancel pending reboot if found (kill reboot PIDs)"
when: dhcp_migrated_ok | bool
delegate_to: localhost
ansible.builtin.shell: |
set -e
# Extract PID from BusyBox ps output: assume PID is the first column.
# Only target lines that clearly include "reboot" or "nohup reboot".
PIDS="$(printf '%s\n' "{{ reboot_ps.stdout | default('') | regex_replace('\r','') }}" \
| grep -E '(^| )reboot( |$)|nohup reboot' \
| awk '{print $1}' \
| grep -E '^[0-9]+$' \
| sort -u || true)"
if [ -z "$PIDS" ]; then
echo "NONE"
exit 0
fi
# Try TERM then KILL.
for p in $PIDS; do
kill "$p" 2>/dev/null || true
done
sleep 1
for p in $PIDS; do
kill -9 "$p" 2>/dev/null || true
done
echo "$PIDS"
args: { executable: /bin/bash }
register: reboot_kill
changed_when: false
failed_when: false
- name: CASE A | Append reboot cancellation result to cleanup report
when: dhcp_migrated_ok | bool
delegate_to: localhost
ansible.builtin.set_fact:
cleanup_report: >-
{{
cleanup_report ~
(
('; pending reboot found, cancelled (pids=' ~ (reboot_kill.stdout | trim) ~ ')')
if ((reboot_kill.stdout | default('') | trim) not in ['','NONE'])
else
'; no pending reboot found'
)
}}
changed_when: false
- name: CASE A | Final cumulative cleanup report
when: dhcp_migrated_ok | bool
delegate_to: localhost
ansible.builtin.debug:
msg:
- "{{ cleanup_report }}"
changed_when: false