--- - 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 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 loop_control: label: "{{ item.name }}"