--- # Compose-down one Django app+env. Called per item with loop_var app_item. # No `down -v` — volumes stay. Checkout and secrets stay. - name: "stop[{{ app_item.name }}/{{ app_item.env }}] locals" ansible.builtin.set_fact: _spec: "{{ app_catalog[app_item.name] }}" _src: "{{ apps_src_dir }}/{{ app_item.name }}_{{ app_item.env }}" _project: "{{ app_item.name }}_{{ app_item.env }}" - name: "stop[{{ _project }}] checkout dir" ansible.builtin.stat: path: "{{ _src }}" register: _src_stat - name: "stop[{{ _project }}] compose file" ansible.builtin.stat: path: "{{ _src }}/{{ _spec.compose_file }}" register: _compose_stat when: _src_stat.stat.exists - name: "stop[{{ _project }}] env file" ansible.builtin.stat: path: "{{ _src }}/.env" register: _env_stat when: _src_stat.stat.exists - name: "stop[{{ _project }}] use compose down" ansible.builtin.set_fact: _use_compose: "{{ _src_stat.stat.exists and _compose_stat is defined and _compose_stat.stat.exists }}" - name: "stop[{{ _project }}] compose down" ansible.builtin.command: cmd: >- docker compose -f {{ _spec.compose_file }} {{ '--env-file .env' if (_env_stat is defined and _env_stat.stat.exists) else '' }} down chdir: "{{ _src }}" environment: COMPOSE_PROJECT_NAME: "{{ _project }}" WEB_PORT: "{{ app_item.port }}" COMPOSE_PROFILES: "{{ (app_item.compose_profiles | default([])) | join(',') }}" become: true become_user: "{{ admin_user }}" when: _use_compose | bool changed_when: true - name: "stop[{{ _project }}] find leftover project containers" ansible.builtin.command: cmd: docker ps -aq --filter label=com.docker.compose.project={{ _project }} register: _leftovers changed_when: false become: true when: not (_use_compose | bool) - name: "stop[{{ _project }}] remove leftover project containers" ansible.builtin.command: cmd: "docker rm -f {{ _leftovers.stdout_lines | join(' ') }}" become: true when: - not (_use_compose | bool) - _leftovers is defined - _leftovers.stdout_lines | length > 0 changed_when: true - name: "stop[{{ _project }}] nothing to stop (no checkout)" ansible.builtin.debug: msg: "no checkout at {{ _src }} and no containers for project {{ _project }}" when: - not (_use_compose | bool) - _leftovers is defined - _leftovers.stdout_lines | length == 0