From 169a6f80982c2d9424a4cc1ba7ff9a4e348727e7 Mon Sep 17 00:00:00 2001 From: vivekgsharma Date: Thu, 28 May 2026 14:36:24 +0000 Subject: [PATCH 1/4] fix platform destroy docker prune --- ansible/roles/kill_platform/tasks/main.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ansible/roles/kill_platform/tasks/main.yml b/ansible/roles/kill_platform/tasks/main.yml index b21ac11f..30c8b8b3 100644 --- a/ansible/roles/kill_platform/tasks/main.yml +++ b/ansible/roles/kill_platform/tasks/main.yml @@ -20,12 +20,13 @@ when: - inventory_hostname not in groups["hp_masternodes"] -- name: Remove any remaining docker data +- name: Prune only safe dangling Docker data community.docker.docker_prune: - containers: true + # Keep stopped Core containers and core_data volumes intact on platform-only destroy. + containers: false images: true images_filters: - dangling: false + dangling: true networks: true - volumes: true + volumes: false builder_cache: true From a350c3b325a039f18f45822f1b6f59e4d93b0c0f Mon Sep 17 00:00:00 2001 From: vivekgsharma Date: Tue, 9 Jun 2026 11:37:31 +0000 Subject: [PATCH 2/4] report platform destroy leftovers --- ansible/roles/kill_platform/tasks/main.yml | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/ansible/roles/kill_platform/tasks/main.yml b/ansible/roles/kill_platform/tasks/main.yml index 30c8b8b3..3af01229 100644 --- a/ansible/roles/kill_platform/tasks/main.yml +++ b/ansible/roles/kill_platform/tasks/main.yml @@ -30,3 +30,47 @@ networks: true volumes: false builder_cache: true + +- name: Check for remaining platform Docker resources + ansible.builtin.shell: | + set -o pipefail + + if [ "{{ inventory_hostname in groups['hp_masternodes'] }}" = "True" ]; then + project="dashmate_{{ dash_network_name }}" + + docker ps -a --format '{{ "{{" }}.Names{{ "}}" }}' | + grep -E "^${project}-" | + grep -Ev "^${project}-core-1$" | + sed 's/^/container: /' || true + + docker volume ls --format '{{ "{{" }}.Name{{ "}}" }}' | + grep -E "^${project}_" | + grep -Ev "^${project}_core_data$" | + sed 's/^/volume: /' || true + + docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | + grep -E "^${project}_" | + sed 's/^/network: /' || true + else + docker ps -a --format '{{ "{{" }}.Names{{ "}}" }}' | + grep -E '^tenderdash$' | + sed 's/^/container: /' || true + + docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | + grep -E '^tenderdash_' | + sed 's/^/network: /' || true + 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 %} From 8d4e72d3e97042467c519809e770af7769cc67d0 Mon Sep 17 00:00:00 2001 From: vivekgsharma Date: Tue, 9 Jun 2026 11:57:07 +0000 Subject: [PATCH 3/4] address platform destroy review feedback --- ansible/roles/kill_platform/tasks/main.yml | 39 ++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/ansible/roles/kill_platform/tasks/main.yml b/ansible/roles/kill_platform/tasks/main.yml index 3af01229..fbebf7ec 100644 --- a/ansible/roles/kill_platform/tasks/main.yml +++ b/ansible/roles/kill_platform/tasks/main.yml @@ -20,45 +20,50 @@ when: - inventory_hostname not in groups["hp_masternodes"] -- name: Prune only safe dangling Docker data +- name: Prune only dangling Docker images community.docker.docker_prune: # Keep stopped Core containers and core_data volumes intact on platform-only destroy. containers: false images: true images_filters: dangling: true - networks: true + networks: false volumes: false - builder_cache: true + builder_cache: false - name: Check for remaining platform Docker resources ansible.builtin.shell: | - set -o pipefail + set -euo pipefail - if [ "{{ inventory_hostname in groups['hp_masternodes'] }}" = "True" ]; then + 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{{ "}}" }}' | - grep -E "^${project}-" | - grep -Ev "^${project}-core-1$" | - sed 's/^/container: /' || true + print_matching "container" "^${project}-" "^${project}-core-1$" docker volume ls --format '{{ "{{" }}.Name{{ "}}" }}' | - grep -E "^${project}_" | - grep -Ev "^${project}_core_data$" | - sed 's/^/volume: /' || true + print_matching "volume" "^${project}_" "^${project}_core_data$" docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | - grep -E "^${project}_" | - sed 's/^/network: /' || true + print_matching "network" "^${project}_" "^${project}_default$" else docker ps -a --format '{{ "{{" }}.Names{{ "}}" }}' | - grep -E '^tenderdash$' | - sed 's/^/container: /' || true + print_matching "container" '^tenderdash$' docker network ls --format '{{ "{{" }}.Name{{ "}}" }}' | - grep -E '^tenderdash_' | - sed 's/^/network: /' || true + print_matching "network" '^tenderdash_' fi args: executable: /bin/bash From 4b9406677b0b859d9571248b4967142c9f330fae Mon Sep 17 00:00:00 2001 From: vivekgsharma Date: Tue, 9 Jun 2026 12:35:07 +0000 Subject: [PATCH 4/4] prune platform containers by label --- ansible/roles/kill_platform/tasks/main.yml | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/ansible/roles/kill_platform/tasks/main.yml b/ansible/roles/kill_platform/tasks/main.yml index fbebf7ec..b4482c07 100644 --- a/ansible/roles/kill_platform/tasks/main.yml +++ b/ansible/roles/kill_platform/tasks/main.yml @@ -20,9 +20,36 @@ when: - inventory_hostname not in groups["hp_masternodes"] +- 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: - # Keep stopped Core containers and core_data volumes intact on platform-only destroy. containers: false images: true images_filters: