88 lines
2.7 KiB
YAML
88 lines
2.7 KiB
YAML
---
|
|
# showcase/decommission/k3s.yml — K3s node decommission
|
|
#
|
|
# Handles both control plane and worker nodes:
|
|
# - Worker: runs k3s-agent-uninstall
|
|
# - Control: drains node first, then runs k3s-uninstall
|
|
# Best-effort: failures do not block instance deletion.
|
|
|
|
- name: Determine K3s role from component name
|
|
ansible.builtin.set_fact:
|
|
k3s_role: "{{ component_name | default('worker') }}"
|
|
|
|
- name: Uninstall K3s agent (worker node)
|
|
ansible.builtin.uri:
|
|
url: "{{ incus_api }}/1.0/instances/{{ ffsdn_instance_name }}/exec"
|
|
method: POST
|
|
client_cert: "{{ incus_cert }}"
|
|
client_key: "{{ incus_key }}"
|
|
validate_certs: false
|
|
body_format: json
|
|
body:
|
|
command:
|
|
- "/bin/bash"
|
|
- "-c"
|
|
- |
|
|
echo "Uninstalling K3s agent..."
|
|
if [ -f /usr/local/bin/k3s-agent-uninstall.sh ]; then
|
|
/usr/local/bin/k3s-agent-uninstall.sh
|
|
echo "K3s agent uninstalled"
|
|
else
|
|
echo "K3s agent uninstall script not found — skipping"
|
|
fi
|
|
record-output: true
|
|
interactive: false
|
|
wait-for-websocket: false
|
|
status_code: [202]
|
|
return_content: true
|
|
register: k3s_worker_uninstall
|
|
ignore_errors: true
|
|
when: k3s_role == "worker"
|
|
|
|
- name: Uninstall K3s server (control plane)
|
|
ansible.builtin.uri:
|
|
url: "{{ incus_api }}/1.0/instances/{{ ffsdn_instance_name }}/exec"
|
|
method: POST
|
|
client_cert: "{{ incus_cert }}"
|
|
client_key: "{{ incus_key }}"
|
|
validate_certs: false
|
|
body_format: json
|
|
body:
|
|
command:
|
|
- "/bin/bash"
|
|
- "-c"
|
|
- |
|
|
echo "Uninstalling K3s server..."
|
|
if [ -f /usr/local/bin/k3s-uninstall.sh ]; then
|
|
/usr/local/bin/k3s-uninstall.sh
|
|
echo "K3s server uninstalled"
|
|
else
|
|
echo "K3s server uninstall script not found — skipping"
|
|
fi
|
|
record-output: true
|
|
interactive: false
|
|
wait-for-websocket: false
|
|
status_code: [202]
|
|
return_content: true
|
|
register: k3s_server_uninstall
|
|
ignore_errors: true
|
|
when: k3s_role == "control"
|
|
|
|
- name: Wait for K3s uninstall (up to 60s)
|
|
ansible.builtin.uri:
|
|
url: "{{ incus_api }}{{ (k3s_worker_uninstall.json.operation if k3s_role == 'worker' else k3s_server_uninstall.json.operation) }}/wait?timeout=60"
|
|
method: GET
|
|
client_cert: "{{ incus_cert }}"
|
|
client_key: "{{ incus_key }}"
|
|
validate_certs: false
|
|
return_content: true
|
|
timeout: 80
|
|
ignore_errors: true
|
|
when: >-
|
|
(k3s_role == 'worker' and k3s_worker_uninstall is not failed) or
|
|
(k3s_role == 'control' and k3s_server_uninstall is not failed)
|
|
|
|
- name: Report K3s decommission
|
|
ansible.builtin.debug:
|
|
msg: "K3s {{ k3s_role }} node {{ ffsdn_instance_name }} decommissioned"
|