- name: make sure the `/ansible_docker_compose` directory exists ansible.builtin.file: path: /ansible_docker_compose state: directory mode: "0755" owner: root group: root become: true - name: deploy the Compose file ansible.builtin.copy: content: "{{ docker_compose__compose_file_content }}" dest: /ansible_docker_compose/compose.yaml mode: "0644" owner: root group: root become: true notify: docker compose down - name: make sure the `/ansible_docker_compose/configs` directory exists ansible.builtin.file: path: /ansible_docker_compose/configs state: directory mode: "0755" owner: root group: root become: true - name: set `docker_compose__config_files_to_exist` fact initially to an empty list ansible.builtin.set_fact: docker_compose__config_files_to_exist: [ ] - name: add names from `docker_compose__configuration_files` to `docker_compose__config_files_to_exist` fact ansible.builtin.set_fact: docker_compose__config_files_to_exist: "{{ docker_compose__config_files_to_exist + [ item.name ] }}" # noqa: jinja[spacing] loop: "{{ docker_compose__configuration_files }}" - name: find configuration files to remove ansible.builtin.find: paths: /ansible_docker_compose/configs/ recurse: false excludes: "{{ docker_compose__config_files_to_exist }}" register: docker_compose__config_files_to_remove - name: remove all configuration files, which should be removed ansible.builtin.file: path: "{{ item.path }}" state: absent become: true loop: "{{ docker_compose__config_files_to_remove.files }}" # notify: docker compose down - name: make sure all given configuration files are deployed ansible.builtin.copy: content: "{{ item.content }}" dest: "/ansible_docker_compose/configs/{{ item.name }}" mode: "0644" owner: root group: root become: true loop: "{{ docker_compose__configuration_files }}" # notify: docker compose down - name: Flush handlers to make "docker compose down" handler run now ansible.builtin.meta: flush_handlers - name: docker compose ps --format json before docker compose up ansible.builtin.command: cmd: /usr/bin/docker compose ps --format json chdir: /ansible_docker_compose become: true changed_when: false register: docker_compose__ps_json_before_up - name: docker compose up --detach --pull always --build ansible.builtin.command: cmd: /usr/bin/docker compose up --detach --pull always --build --remove-orphans chdir: /ansible_docker_compose become: true changed_when: false # The changed for this task is tried to be determined by the "potentially # report changed" task together with the "docker compose ps --format json # [...]" tasks. - name: docker compose ps --format json after docker compose up ansible.builtin.command: cmd: /usr/bin/docker compose ps --format json chdir: /ansible_docker_compose become: true changed_when: false register: docker_compose__ps_json_after_up # Doesn't work anymore. Dunno why. # TODO: Fix # - name: potentially report changed # ansible.builtin.debug: # msg: "If this reports changed, then the docker compose containers changed." # changed_when: (docker_compose__ps_json_before_up.stdout | from_json | community.general.json_query('[].ID') | sort) # != (docker_compose__ps_json_after_up.stdout | from_json | community.general.json_query('[].ID') | sort) - name: Make sure anacron is installed become: true ansible.builtin.package: name: anacron state: present - name: Install automatic update cron job become: true ansible.builtin.cron: name: 'docker compose auto update' minute: "0" hour: "5" job: "cd /ansible_docker_compose; docker compose pull && docker compose up -d" - name: Install automatic cleanup cron job become: true ansible.builtin.cron: name: 'docker compose auto update' minute: "23" hour: "4" job: "docker system prune -a -f"