--- # 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