From f3ddb838ed840a4ee1e241d3b547a2a7d5e5a6b6 Mon Sep 17 00:00:00 2001 From: Menno van Leeuwen Date: Fri, 14 Mar 2025 00:26:47 +0100 Subject: [PATCH] fix: improve service cleanup process by refining checks for disabled services --- .../servers/services/service_cleanup.yml | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/config/ansible/tasks/servers/services/service_cleanup.yml b/config/ansible/tasks/servers/services/service_cleanup.yml index b0dd8ad..ff27d25 100644 --- a/config/ansible/tasks/servers/services/service_cleanup.yml +++ b/config/ansible/tasks/servers/services/service_cleanup.yml @@ -1,40 +1,43 @@ --- - name: Cleanup disabled services block: - - name: Check service directories - ansible.builtin.stat: - path: "{{ ansible_env.HOME }}/services/{{ item.name }}" - register: service_dir_results - loop: "{{ services }}" - when: not item.enabled|bool - loop_control: - label: "{{ item.name }}" - - name: Prepare cleanup list ansible.builtin.set_fact: services_to_cleanup: "{{ services | selectattr('enabled', 'equalto', false) | list }}" - - name: Check running containers for disabled services - ansible.builtin.shell: > - set -o pipefail && - docker compose -f "{{ ansible_env.HOME }}/services/{{ item.name }}/docker-compose.yml" ps --format '{% raw %}{{.Name}}{% endraw %}' | - grep -q {{ item.name }} || true - register: container_check_results + - name: Check service directories existence for disabled services + ansible.builtin.stat: + path: "{{ ansible_env.HOME }}/services/{{ item.name }}" + register: service_dir_results loop: "{{ services_to_cleanup }}" - failed_when: false - changed_when: false loop_control: label: "{{ item.name }}" - when: - - item.name in (service_dir_results.results | map(attribute='item.name') | list) - - (service_dir_results.results | selectattr('item.name', 'equalto', item.name) | first).stat.exists - - name: Stop disabled services if running - ansible.builtin.command: docker compose -f "{{ ansible_env.HOME }}/services/{{ item.name }}/docker-compose.yml" down --remove-orphans - loop: "{{ services_to_cleanup }}" - when: - - item.name in (service_dir_results.results | map(attribute='item.name') | list) - - (service_dir_results.results | selectattr('item.name', 'equalto', item.name) | first).stat.exists - - (container_check_results.results | selectattr('item.name', 'equalto', item.name) | first).rc == 0 + - name: Filter services with existing directories + ansible.builtin.set_fact: + services_with_dirs: "{{ service_dir_results.results | selectattr('stat.exists', 'equalto', true) | map(attribute='item') | list }}" + + - name: Check if docker-compose file exists for services to cleanup + ansible.builtin.stat: + path: "{{ ansible_env.HOME }}/services/{{ item.name }}/docker-compose.yml" + register: compose_file_results + loop: "{{ services_with_dirs }}" + loop_control: + label: "{{ item.name }}" + + - name: Stop disabled services with docker-compose files + ansible.builtin.command: docker compose -f "{{ ansible_env.HOME }}/services/{{ item.item.name }}/docker-compose.yml" down --remove-orphans + loop: "{{ compose_file_results.results | selectattr('stat.exists', 'equalto', true) }}" + loop_control: + label: "{{ item.item.name }}" + register: service_stop_results + become: false + failed_when: false # Continue even if the command fails + + - name: Remove service directories for disabled services + ansible.builtin.file: + path: "{{ ansible_env.HOME }}/services/{{ item.name }}" + state: absent + loop: "{{ services_with_dirs }}" loop_control: label: "{{ item.name }}"