This is needed for situations, where one wants to use a vendor-provided compose file and configure it using environment variables. Like for example: https://github.com/zammad/zammad-docker-compose
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
	
		
			4.3 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: deploy the .env file
 | 
						|
  ansible.builtin.copy:
 | 
						|
    content: "{{ docker_compose__env_file_content }}"
 | 
						|
    dest: /ansible_docker_compose/.env
 | 
						|
    mode: "0644"
 | 
						|
    owner: root
 | 
						|
    group: root
 | 
						|
  become: true
 | 
						|
  when: docker_compose__env_file_content is defined
 | 
						|
  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
 | 
						|
  notify: docker compose reload script
 | 
						|
 | 
						|
- 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: ensure automatic update cron job is present
 | 
						|
  become: true
 | 
						|
  ansible.builtin.cron:
 | 
						|
    name: 'ansible docker compose auto update'
 | 
						|
    minute: "0"
 | 
						|
    hour: "5"
 | 
						|
    job: "cd /ansible_docker_compose; docker compose pull && docker compose up -d"
 | 
						|
 | 
						|
- name: ensure automatic cleanup cron job is present
 | 
						|
  become: true
 | 
						|
  ansible.builtin.cron:
 | 
						|
    name: 'ansible docker compose auto cleanup'
 | 
						|
    minute: "23"
 | 
						|
    hour: "4"
 | 
						|
    job: "docker system prune -a -f"
 |