June
abc738c9c2
All checks were successful
/ Ansible Lint (push) Successful in 1m33s
Because of how Ansible local relative search paths work, the global "files" and "templates" directories need to be next to the playbooks. However its not intuitive to look into the playbooks directory to find the files and templates for a host. Therefore flatten the playbooks directory to get rid of this confusing structure. Also see: https://docs.ansible.com/ansible/latest/playbook_guide/playbook_pathing.html#resolving-local-relative-paths
121 lines
3.9 KiB
YAML
121 lines
3.9 KiB
YAML
- 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"
|