152 lines
4.9 KiB
YAML
152 lines
4.9 KiB
YAML
- name: Add official Docker APT key
|
|
ansible.builtin.get_url:
|
|
url: "{{ docker_apt_keyring_url }}"
|
|
dest: "{{ docker_apt_keyring }}"
|
|
checksum: "sha256:{{ docker_apt_keyring_hash }}"
|
|
mode: "644"
|
|
owner: root
|
|
group: root
|
|
when: docker_official
|
|
|
|
- name: Remove official Docker APT key
|
|
ansible.builtin.file:
|
|
path: "{{ docker_apt_keyring }}"
|
|
state: absent
|
|
when: not docker_official
|
|
|
|
- name: Add/remove official Docker APT repository
|
|
ansible.builtin.apt_repository:
|
|
repo: >
|
|
deb [arch=amd64 signed-by={{ docker_apt_keyring }}]
|
|
{{ docker_apt_repo }} {{ ansible_distribution_release }} stable
|
|
state: "{{ 'present' if docker_official else 'absent' }}"
|
|
filename: "{{ docker_apt_keyring | regex_replace('^.*/', '') }}"
|
|
|
|
- name: Install/uninstall Docker from Debian repositories
|
|
ansible.builtin.apt:
|
|
name: ['docker.io', 'docker-compose', 'containerd', 'runc']
|
|
state: "{{ 'absent' if docker_official else 'present' }}"
|
|
autoremove: true
|
|
update_cache: true
|
|
|
|
- name: Install/uninstall Docker from Docker repositories
|
|
ansible.builtin.apt:
|
|
name: ['docker-ce', 'docker-ce-cli', 'containerd.io',
|
|
'docker-buildx-plugin', 'docker-compose-plugin']
|
|
state: "{{ 'present' if docker_official else 'absent' }}"
|
|
autoremove: true
|
|
update_cache: true
|
|
|
|
- name: Login to private registry
|
|
community.docker.docker_login:
|
|
registry_url: "{{ docker_login_url | default('') }}"
|
|
username: "{{ docker_login_user }}"
|
|
password: "{{ docker_login_pass }}"
|
|
when: docker_login_user is defined and docker_login_pass is defined
|
|
|
|
- name: Create docker-compose root
|
|
ansible.builtin.file:
|
|
path: "{{ docker_compose_root }}"
|
|
state: directory
|
|
mode: "500"
|
|
|
|
- name: Install docker-compose systemd service
|
|
ansible.builtin.template:
|
|
src: docker-compose.service.j2
|
|
dest: "/etc/systemd/system/{{ docker_compose_service }}@.service"
|
|
mode: "400"
|
|
notify: compose_systemd
|
|
|
|
- name: Create directories to clone docker-compose repositories
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
mode: "400"
|
|
loop:
|
|
- "{{ docker_repos_path }}"
|
|
- "{{ docker_repos_keys }}"
|
|
when: docker_compose_deploy is defined
|
|
|
|
- name: Generate OpenSSH deploy keys for docker-compose clones
|
|
community.crypto.openssh_keypair:
|
|
path: "{{ docker_repos_keys }}/id_{{ docker_repos_keytype }}"
|
|
type: "{{ docker_repos_keytype }}"
|
|
comment: "{{ ansible_hostname }}-deploy-key"
|
|
mode: "400"
|
|
state: present
|
|
when: docker_compose_deploy is defined
|
|
|
|
- name: Check for git installation
|
|
ansible.builtin.apt:
|
|
name: git
|
|
state: present
|
|
when: docker_compose_deploy is defined
|
|
|
|
- name: Clone external docker-compose projects
|
|
ansible.builtin.git:
|
|
repo: "{{ item.url }}"
|
|
dest: "{{ docker_repos_path }}/{{ item.name }}"
|
|
version: "{{ item.version }}"
|
|
accept_newhostkey: "{{ item.accept_newhostkey | default(false) }}"
|
|
gpg_whitelist: "{{ item.trusted_keys | default([]) }}"
|
|
verify_commit: "{{ true if (item.trusted_keys is defined and item.trusted_keys) else false }}"
|
|
key_file: "{{ docker_repos_keys }}/id_{{ docker_repos_keytype }}"
|
|
loop: "{{ docker_compose_deploy }}"
|
|
loop_control:
|
|
label: "{{ item.url }}"
|
|
when: docker_compose_deploy is defined
|
|
|
|
- name: Create directories for docker-compose projects using the systemd service
|
|
ansible.builtin.file:
|
|
path: "{{ docker_compose_root }}/{{ item.name }}"
|
|
state: directory
|
|
mode: "400"
|
|
loop: "{{ docker_compose_deploy }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: docker_compose_deploy is defined
|
|
|
|
- name: Synchronize docker-compose.yml
|
|
ansible.posix.synchronize:
|
|
src: "{{ docker_repos_path }}/{{ item.name }}/{{ item.path | default('docker-compose.yml') }}"
|
|
dest: "{{ docker_compose_root }}/{{ item.name }}/docker-compose.yml"
|
|
delegate_to: "{{ inventory_hostname }}"
|
|
register: compose_update
|
|
notify:
|
|
- compose_restart
|
|
- compose_enable
|
|
loop: "{{ docker_compose_deploy | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: docker_compose_deploy is defined and docker_compose_deploy | length > 0
|
|
|
|
- name: Set environment variables for docker-compose projects
|
|
ansible.builtin.template:
|
|
src: docker-compose-env.j2
|
|
dest: "{{ docker_compose_root }}/{{ item.name }}/.env"
|
|
mode: "400"
|
|
register: compose_env_update
|
|
notify:
|
|
- compose_restart
|
|
- compose_enable
|
|
no_log: "{{ docker_compose_env_nolog | default(true) }}"
|
|
loop: "{{ docker_compose_deploy }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: docker_compose_deploy is defined and item.env is defined
|
|
|
|
- name: Add users to docker group
|
|
ansible.builtin.user:
|
|
name: "{{ item }}"
|
|
groups: docker
|
|
append: true
|
|
loop: "{{ docker_users }}"
|
|
when: docker_users is defined
|
|
|
|
- name: Start Docker and enable on boot
|
|
ansible.builtin.service:
|
|
name: docker
|
|
state: started
|
|
enabled: true
|
|
when: docker_managed | default(true)
|