fix: improve service cleanup process by refining checks for disabled services

This commit is contained in:
Menno van Leeuwen 2025-03-14 00:26:47 +01:00
parent 27865a65c5
commit f3ddb838ed
Signed by: vleeuwenmenno
SSH Key Fingerprint: SHA256:OJFmjANpakwD3F2Rsws4GLtbdz1TJ5tkQF0RZmF0TRE

View File

@ -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 }}"