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