feat: add tasks
This commit is contained in:
57
tasks/configuration.yml
Normal file
57
tasks/configuration.yml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
- name: Add users to docker group
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: "{{ item }}"
|
||||||
|
groups: docker
|
||||||
|
append: true
|
||||||
|
loop: "{{ docker_users }}"
|
||||||
|
when: docker_users | length > 0
|
||||||
|
|
||||||
|
- name: Create /etc/docker directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/docker
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Enable and start Docker
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Create docker data directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ docker_data_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
group: docker
|
||||||
|
when: docker_data_dir is defined and docker_data_dir | length > 0
|
||||||
|
|
||||||
|
- name: Create systemd override directory for Docker
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/systemd/system/docker.service.d
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
when: docker_expose_api
|
||||||
|
|
||||||
|
- name: Deploy Docker systemd override for API exposure
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: docker-override.conf.j2
|
||||||
|
dest: /etc/systemd/system/docker.service.d/override.conf
|
||||||
|
mode: "0644"
|
||||||
|
notify: restart docker
|
||||||
|
when: docker_expose_api
|
||||||
|
|
||||||
|
- name: Remove Docker systemd override when API exposure is disabled
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/systemd/system/docker.service.d/override.conf
|
||||||
|
state: absent
|
||||||
|
notify: restart docker
|
||||||
|
when: not docker_expose_api
|
||||||
|
|
||||||
|
- name: Deploy Docker daemon.json configuration file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: daemon.json.j2
|
||||||
|
dest: /etc/docker/daemon.json
|
||||||
|
mode: "0644"
|
||||||
|
notify: restart docker
|
||||||
12
tasks/healthcheck.yml
Normal file
12
tasks/healthcheck.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
- name: Wait for Docker daemon to be ready
|
||||||
|
ansible.builtin.wait_for:
|
||||||
|
path: /var/run/docker.sock
|
||||||
|
state: present
|
||||||
|
timeout: 30
|
||||||
|
|
||||||
|
- name: Verify Docker is running and healthy
|
||||||
|
ansible.builtin.command: docker info
|
||||||
|
register: docker_health
|
||||||
|
changed_when: false
|
||||||
|
failed_when: docker_health.rc != 0
|
||||||
38
tasks/installation.yml
Normal file
38
tasks/installation.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
- name: Install dependencies to use docker's repository
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name:
|
||||||
|
- ca-certificates
|
||||||
|
- curl
|
||||||
|
- gnupg
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Create /etc/apt/keyrings directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/apt/keyrings
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Import docker GPG key
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg
|
||||||
|
dest: /etc/apt/keyrings/docker.asc
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Setup docker repository
|
||||||
|
ansible.builtin.apt_repository:
|
||||||
|
repo: "deb [arch={{ docker_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }} {{ ansible_facts['distribution_release'] }} stable"
|
||||||
|
state: present
|
||||||
|
filename: docker
|
||||||
|
|
||||||
|
- name: Install docker packages
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name:
|
||||||
|
- docker-ce
|
||||||
|
- docker-ce-cli
|
||||||
|
- containerd.io
|
||||||
|
- docker-buildx-plugin
|
||||||
|
- docker-compose-plugin
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
17
tasks/main.yml
Normal file
17
tasks/main.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
- name: Running installation
|
||||||
|
ansible.builtin.include_tasks: installation.yml
|
||||||
|
|
||||||
|
- name: Configure Docker
|
||||||
|
ansible.builtin.include_tasks: configuration.yml
|
||||||
|
|
||||||
|
- name: Verify Docker installation
|
||||||
|
ansible.builtin.include_tasks: healthcheck.yml
|
||||||
|
|
||||||
|
- name: Create Docker networks
|
||||||
|
ansible.builtin.include_tasks: networks.yml
|
||||||
|
when: docker_networks is defined
|
||||||
|
|
||||||
|
- name: Configure Docker registry authentication
|
||||||
|
ansible.builtin.include_tasks: registry.yml
|
||||||
|
when: docker_registry_url is defined
|
||||||
51
tasks/networks.yml
Normal file
51
tasks/networks.yml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
- name: Get all Docker networks
|
||||||
|
ansible.builtin.command: docker network ls --format "{{ '{{' }}.Name{{ '}}' }}"
|
||||||
|
register: all_networks
|
||||||
|
changed_when: false
|
||||||
|
when: docker_networks is defined
|
||||||
|
|
||||||
|
- name: Get list of managed network names
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
managed_network_names: "{{ docker_networks | map(attribute='name') | list }}"
|
||||||
|
when: docker_networks is defined
|
||||||
|
|
||||||
|
- name: Check networks to remove
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks_to_remove: "{{ all_networks.stdout_lines | difference(managed_network_names | default([])) | difference(['bridge', 'host', 'none']) | list }}"
|
||||||
|
when: docker_networks is defined
|
||||||
|
|
||||||
|
- name: Remove Docker networks no longer in configuration
|
||||||
|
ansible.builtin.command: docker network rm {{ item }}
|
||||||
|
loop: "{{ networks_to_remove | default([]) }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item }}"
|
||||||
|
when:
|
||||||
|
- docker_networks is defined
|
||||||
|
- networks_to_remove | default([]) | length > 0
|
||||||
|
ignore_errors: true
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Check if Docker network exists
|
||||||
|
ansible.builtin.command: docker network inspect {{ item.name }}
|
||||||
|
register: network_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
loop: "{{ docker_networks }}"
|
||||||
|
when: docker_networks | length > 0
|
||||||
|
|
||||||
|
- name: Create Docker networks
|
||||||
|
ansible.builtin.command: >
|
||||||
|
docker network create
|
||||||
|
--driver {{ item.driver | default('bridge') }}
|
||||||
|
{% if item.subnet is defined %}--subnet {{ item.subnet }}{% endif %}
|
||||||
|
{% if item.gateway is defined %}--gateway {{ item.gateway }}{% endif %}
|
||||||
|
{% if item.ip_range is defined %}--ip-range {{ item.ip_range }}{% endif %}
|
||||||
|
{{ item.name }}
|
||||||
|
loop: "{{ docker_networks }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.name }}"
|
||||||
|
when:
|
||||||
|
- docker_networks | length > 0
|
||||||
|
- network_check.results | selectattr('item.name', 'equalto', item.name) | selectattr('rc', 'equalto', 1) | list | length > 0
|
||||||
|
ignore_errors: true
|
||||||
36
tasks/registry.yml
Normal file
36
tasks/registry.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
- name: Validate registry credentials
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- docker_registry_username is defined or docker_registry_email is defined
|
||||||
|
fail_msg: "When docker_registry_url is set, either docker_registry_username or docker_registry_email must be provided"
|
||||||
|
when: docker_registry_url is defined
|
||||||
|
|
||||||
|
- name: Login to Docker registry as users
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
docker login
|
||||||
|
--password-stdin
|
||||||
|
{% if docker_registry_username is defined %}-u {{ docker_registry_username }}{% elif docker_registry_email is defined %}-u {{ docker_registry_email }}{% endif %}
|
||||||
|
{{ docker_registry_url }}
|
||||||
|
stdin: "{{ lookup('env', 'DOCKER_REGISTRY_PASSWORD') | default('', true) }}"
|
||||||
|
become_user: "{{ item }}"
|
||||||
|
loop: "{{ docker_users }}"
|
||||||
|
when:
|
||||||
|
- docker_registry_url is defined
|
||||||
|
- docker_users is defined
|
||||||
|
- docker_users | length > 0
|
||||||
|
no_log: true
|
||||||
|
|
||||||
|
- name: Login to Docker registry as root
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
docker login
|
||||||
|
--password-stdin
|
||||||
|
{% if docker_registry_username is defined %}-u {{ docker_registry_username }}{% elif docker_registry_email is defined %}-u {{ docker_registry_email }}{% endif %}
|
||||||
|
{{ docker_registry_url }}
|
||||||
|
stdin: "{{ lookup('env', 'DOCKER_REGISTRY_PASSWORD') | default('', true) }}"
|
||||||
|
when:
|
||||||
|
- docker_registry_url is defined
|
||||||
|
- docker_users is not defined or docker_users | length == 0
|
||||||
|
no_log: true
|
||||||
Reference in New Issue
Block a user