homelab/ansible/archive/playbooks/proxmox/replace_proxmox_node_interactive.yml

106 lines
3.8 KiB
YAML

---
# playbooks/proxmox/replace_proxmox_node_interactive.yml
# Interactive wrapper for proxmox node replacement workflow.
#
# Usage:
# ansible-playbook -i inventory/hosts.ini playbooks/proxmox/replace_proxmox_node_interactive.yml
- name: Interactive Proxmox physical node replacement
hosts: localhost
gather_facts: false
vars_prompt:
- name: replacement_project_name
prompt: "Project name"
private: false
default: "node-replacement-{{ lookup('pipe', 'date +%Y%m%d') }}"
- name: replacement_old_logical_host
prompt: "Logical host identity to preserve (example: pve01)"
private: false
default: "pve01"
- name: replacement_old_ip
prompt: "Current logical host IP"
private: false
default: "10.0.0.201"
- name: replacement_new_physical_host
prompt: "Physical donor host to take over identity (example: pve04)"
private: false
default: "pve04"
- name: replacement_new_physical_ip
prompt: "Current donor host IP"
private: false
default: "10.0.0.204"
- name: replacement_swarm_manager_name
prompt: "Swarm manager identity tied to the logical host"
private: false
default: "swarm-manager-1"
- name: replacement_swarm_worker_name
prompt: "Swarm worker identity tied to the logical host"
private: false
default: "swarm-worker-1"
- name: replacement_execute_cutover
prompt: "Enable execution mode? (true/false)"
private: false
default: "false"
- name: replacement_phase2_rebuild_and_rejoin
prompt: "Run phase 2 rebuild and swarm rejoin? (true/false)"
private: false
default: "false"
- name: replacement_phase3_identity_cutover
prompt: "Run phase 3 source-of-truth cutover? (true/false)"
private: false
default: "false"
- name: replacement_phase4_validate_cutover
prompt: "Run phase 4 validation gates? (true/false)"
private: false
default: "true"
- name: replacement_overwrite_existing_vmids
prompt: "Allow overwrite of conflicting VMIDs on target host? (true/false)"
private: false
default: "false"
- name: replacement_poweroff_old_host
prompt: "Power off old logical host at the end? (true/false)"
private: false
default: "false"
- name: replacement_confirm_phrase
prompt: "Confirmation phrase for execution mode (must be EXECUTE_NODE_REPLACEMENT)"
private: false
default: ""
pre_tasks:
- name: Normalize interactive boolean inputs
ansible.builtin.set_fact:
replacement_execute_cutover: "{{ replacement_execute_cutover | bool }}"
replacement_phase2_rebuild_and_rejoin: "{{ replacement_phase2_rebuild_and_rejoin | bool }}"
replacement_phase3_identity_cutover: "{{ replacement_phase3_identity_cutover | bool }}"
replacement_phase4_validate_cutover: "{{ replacement_phase4_validate_cutover | bool }}"
replacement_overwrite_existing_vmids: "{{ replacement_overwrite_existing_vmids | bool }}"
replacement_poweroff_old_host: "{{ replacement_poweroff_old_host | bool }}"
- name: Show interactive replacement selections
ansible.builtin.debug:
msg:
- "Project: {{ replacement_project_name }}"
- "Logical identity: {{ replacement_old_logical_host }} ({{ replacement_old_ip }})"
- "Donor physical host: {{ replacement_new_physical_host }} ({{ replacement_new_physical_ip }})"
- "Swarm identities: {{ replacement_swarm_manager_name }}, {{ replacement_swarm_worker_name }}"
- "Execute cutover: {{ replacement_execute_cutover }}"
- "Phases: 2={{ replacement_phase2_rebuild_and_rejoin }}, 3={{ replacement_phase3_identity_cutover }}, 4={{ replacement_phase4_validate_cutover }}"
- "Poweroff old host: {{ replacement_poweroff_old_host }}"
roles:
- role: proxmox_node_replacement