diff --git a/inventories/z9/host_vars/yate.yaml b/inventories/z9/host_vars/yate.yaml index fecacb1..d2dc518 100644 --- a/inventories/z9/host_vars/yate.yaml +++ b/inventories/z9/host_vars/yate.yaml @@ -6,3 +6,4 @@ docker_compose__configuration_files: content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regexroute.conf.j2') }}" - name: regfile.conf content: "{{ lookup('ansible.builtin.template', 'resources/z9/yate/docker_compose/regfile.conf.j2') }}" +docker_compose__restart_cmd: "exec yate sh -c 'kill -1 1'" diff --git a/requirements.yml b/requirements.yml index 6011bda..e5538cc 100644 --- a/requirements.yml +++ b/requirements.yml @@ -6,6 +6,3 @@ collections: - name: community.sops version: ">=2.2.4" source: https://galaxy.ansible.com - - name: community.docker - version: ">=5.0.0" - source: https://galaxy.ansible.com diff --git a/roles/docker_compose/README.md b/roles/docker_compose/README.md index c0a7a93..d3204ec 100644 --- a/roles/docker_compose/README.md +++ b/roles/docker_compose/README.md @@ -7,18 +7,17 @@ A use case for the deployment of the additional configuration files is Composes ## Supported Distributions -Should work on Debian-based distributions. +The following distributions are supported: + +- Debian 11 ## Required Arguments -- `docker_compose__compose_file_content`: The content to deploy to the Compose file at `/ansible_docker_compose/compose.yaml`. +For the required arguments look at the [`argument_specs.yaml`](./meta/argument_specs.yaml). -## Optional Arguments +## `hosts` -- `docker_compose__env_file_content`: The content to deploy to the `.env` file at `/ansible_docker_compose/.env`. -- `docker_compose__configuration_files`: A list of configuration files to deploy to the `/ansible_docker_compose/configs/` directory. -- `docker_compose__configuration_files.*.name`: The name of the configuration file. -- `docker_compose__configuration_files.*.content`: The content to deploy to the configuration file. +The `hosts` for this role need to be the machines, for which you want to make sure the given Compose file is deployed and all services of it are up-to-date and running. ## Links & Resources diff --git a/roles/docker_compose/defaults/main.yaml b/roles/docker_compose/defaults/main.yaml index 76831d6..1312972 100644 --- a/roles/docker_compose/defaults/main.yaml +++ b/roles/docker_compose/defaults/main.yaml @@ -1 +1,2 @@ docker_compose__configuration_files: [ ] +docker_compose__restart_cmd: "" diff --git a/roles/docker_compose/handlers/main.yaml b/roles/docker_compose/handlers/main.yaml index 2aff0fe..49e064c 100644 --- a/roles/docker_compose/handlers/main.yaml +++ b/roles/docker_compose/handlers/main.yaml @@ -1,11 +1,13 @@ - name: docker compose down - community.docker.docker_compose_v2: - project_src: /ansible_docker_compose - state: absent + ansible.builtin.command: + cmd: /usr/bin/docker compose down + chdir: /ansible_docker_compose become: true - -- name: docker compose restart - community.docker.docker_compose_v2: - project_src: /ansible_docker_compose - state: restarted + changed_when: true # This is always changed. +- name: docker compose reload script + ansible.builtin.command: + cmd: /usr/bin/docker compose {{ docker_compose__restart_cmd }} + chdir: /ansible_docker_compose become: true + changed_when: true # Mark this as always changed (for now?). + when: docker_compose__restart_cmd != "" diff --git a/roles/docker_compose/meta/argument_specs.yaml b/roles/docker_compose/meta/argument_specs.yaml index 664496e..c588ba0 100644 --- a/roles/docker_compose/meta/argument_specs.yaml +++ b/roles/docker_compose/meta/argument_specs.yaml @@ -2,20 +2,31 @@ argument_specs: main: options: docker_compose__compose_file_content: + description: >- + The content of the Compose file at + `/ansible_docker_compose/compose.yaml`. type: str required: true docker_compose__env_file_content: + description: >- + The content of the .env file at + `/ansible_docker_compose/.env`. type: str required: false docker_compose__configuration_files: + description: >- + A list of configuration files to be deployed in the + `/ansible_docker_compose/configs/` directory. type: list elements: dict required: false default: [ ] options: name: + description: The name of the configuration file. type: str required: true content: + description: The content of the configuration file. type: str required: true diff --git a/roles/docker_compose/meta/main.yaml b/roles/docker_compose/meta/main.yaml index cb7d8e0..b9a6980 100644 --- a/roles/docker_compose/meta/main.yaml +++ b/roles/docker_compose/meta/main.yaml @@ -1,3 +1,10 @@ --- dependencies: + - role: distribution_check + vars: + distribution_check__distribution_support_spec: + - name: Debian + major_versions: + - 11 + - 12 - role: docker diff --git a/roles/docker_compose/tasks/main.yaml b/roles/docker_compose/tasks/main.yaml index bea3f4f..7b01304 100644 --- a/roles/docker_compose/tasks/main.yaml +++ b/roles/docker_compose/tasks/main.yaml @@ -59,7 +59,7 @@ state: absent become: true loop: "{{ docker_compose__config_files_to_remove.files }}" - notify: docker compose restart + # notify: docker compose down - name: make sure all given configuration files are deployed ansible.builtin.copy: @@ -70,19 +70,45 @@ group: root become: true loop: "{{ docker_compose__configuration_files }}" - notify: docker compose restart + # notify: docker compose down + notify: docker compose reload script -- name: Flush handlers to make "docker compose down" and "docker compose restart" handlers run now +- name: Flush handlers to make "docker compose down" handler run now ansible.builtin.meta: flush_handlers -- name: docker compose up - community.docker.docker_compose_v2: - project_src: /ansible_docker_compose - state: present - build: always - pull: always - remove_orphans: true +- 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