diff --git a/ansible/roles/kill_platform/tasks/main.yml b/ansible/roles/kill_platform/tasks/main.yml index b21ac11f..b4482c07 100644 --- a/ansible/roles/kill_platform/tasks/main.yml +++ b/ansible/roles/kill_platform/tasks/main.yml @@ -20,12 +20,89 @@ when: - inventory_hostname not in groups["hp_masternodes"] -- name: Remove any remaining docker data +- name: Prune stopped platform containers (dashmate) community.docker.docker_prune: containers: true + containers_filters: + label: + - "com.docker.compose.project=dashmate_{{ dash_network_name }}" + "label!": + - "com.docker.compose.service=core" + images: false + networks: false + volumes: false + builder_cache: false + when: + - inventory_hostname in groups["hp_masternodes"] + +- name: Prune stopped platform containers (seeds) + community.docker.docker_prune: + containers: true + containers_filters: + label: + - "com.docker.compose.project={{ tenderdash_compose_project_name }}" + images: false + networks: false + volumes: false + builder_cache: false + when: + - inventory_hostname not in groups["hp_masternodes"] + +- name: Prune only dangling Docker images + community.docker.docker_prune: + containers: false images: true images_filters: - dangling: false - networks: true - volumes: true - builder_cache: true + dangling: true + networks: false + volumes: false + builder_cache: false + +- name: Check for remaining platform Docker resources + ansible.builtin.shell: | + set -euo pipefail + + print_matching() { + local label="$1" + local pattern="$2" + local exclude="${3:-}" + + awk -v label="$label" -v pattern="$pattern" -v exclude="$exclude" ' + $0 ~ pattern && (exclude == "" || $0 !~ exclude) { + print label ": " $0 + } + ' + } + + if [ "{{ inventory_hostname in groups.get('hp_masternodes', []) }}" = "True" ]; then + project="dashmate_{{ dash_network_name }}" + + docker ps -a --format '{{ "{{" }}.Names{{ "}}" }}' | + print_matching "container" "^${project}-" "^${project}-core-1$" + + docker volume ls --format '{{ "{{" }}.Name{{ "}}" }}' | + print_matching "volume" "^${project}_" "^${project}_core_data$" + + docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | + print_matching "network" "^${project}_" "^${project}_default$" + else + docker ps -a --format '{{ "{{" }}.Names{{ "}}" }}' | + print_matching "container" '^tenderdash$' + + docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | + print_matching "network" '^tenderdash_' + fi + args: + executable: /bin/bash + register: platform_docker_leftovers + changed_when: false + +- name: Report platform Docker cleanup status + ansible.builtin.debug: + msg: | + {% if platform_docker_leftovers.stdout_lines | length > 0 %} + Remaining platform Docker resources after platform destroy on {{ inventory_hostname }}: + {{ platform_docker_leftovers.stdout }} + {% else %} + No remaining platform Docker containers, volumes, or networks after platform destroy on {{ inventory_hostname }}. + {% endif %}