78 lines
2.7 KiB
YAML
78 lines
2.7 KiB
YAML
---
|
|
# decommission.yml — Runs before Aether deletes an instance
|
|
#
|
|
# Aether passes the same ffsdn_ extra vars as post-deploy:
|
|
# ffsdn_instance_name, ffsdn_instance_ip, ffsdn_cluster_id,
|
|
# ffsdn_cluster_name, ffsdn_deployed_by
|
|
#
|
|
# This playbook runs best-effort: failures do NOT block instance
|
|
# deletion in Aether. Uses the Incus REST API for all operations
|
|
# (no SSH needed).
|
|
|
|
- name: Decommission — graceful shutdown and logging
|
|
hosts: localhost
|
|
gather_facts: false
|
|
connection: local
|
|
|
|
vars:
|
|
incus_api: "https://192.168.102.140:8443"
|
|
# AWX runner mounts project at /runner/project/ during job execution
|
|
incus_cert: "/runner/project/incus-client.crt"
|
|
incus_key: "/runner/project/incus-client.key"
|
|
|
|
tasks:
|
|
- name: Check if instance still exists
|
|
ansible.builtin.uri:
|
|
url: "{{ incus_api }}/1.0/instances/{{ ffsdn_instance_name }}"
|
|
method: GET
|
|
client_cert: "{{ incus_cert }}"
|
|
client_key: "{{ incus_key }}"
|
|
validate_certs: false
|
|
return_content: true
|
|
status_code: [200, 404]
|
|
register: instance_check
|
|
when: ffsdn_instance_name is defined
|
|
|
|
- name: Stop application services (best-effort)
|
|
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"
|
|
- |
|
|
systemctl list-units --type=service --state=running --no-legend \
|
|
| awk '{print $1}' \
|
|
| grep -vE '^(ssh|systemd|dbus|cron|networking|rsyslog)' \
|
|
| head -20 \
|
|
| xargs -r -n1 systemctl stop 2>/dev/null || true
|
|
journalctl --flush 2>/dev/null || true
|
|
record-output: false
|
|
interactive: false
|
|
wait-for-websocket: false
|
|
status_code: [202]
|
|
ignore_errors: true
|
|
when:
|
|
- instance_check is defined
|
|
- instance_check.status == 200
|
|
- instance_check.json.metadata.status is defined
|
|
- instance_check.json.metadata.status == "Running"
|
|
|
|
- name: Record decommission in ledger
|
|
ansible.builtin.lineinfile:
|
|
path: /tmp/awx-deploy-ledger.log
|
|
line: >-
|
|
{{ lookup('pipe', 'date -Iseconds') }}
|
|
DECOMMISSION instance={{ ffsdn_instance_name | default('unknown') }}
|
|
ip={{ ffsdn_instance_ip | default('') }}
|
|
cluster={{ ffsdn_cluster_name | default('unknown') }}
|
|
deployed_by={{ ffsdn_deployed_by | default('unknown') }}
|
|
status=completed
|
|
create: true
|
|
mode: "0644"
|