--- - name: Cleanup disabled services block: - name: Prepare cleanup list ansible.builtin.set_fact: services_to_cleanup: "{{ services | selectattr('enabled', 'equalto', false) | list }}" - 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 }}" loop_control: label: "{{ item.name }}" - 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 }}"