wulf-ansible/roles/docker/tasks/main.yml
2026-07-22 12:12:49 +00:00

131 lines
3.2 KiB
YAML

---
- name: Validate supported OS family
assert:
that:
- ansible_os_family == "Debian"
- ansible_distribution | lower in ["debian", "ubuntu"]
fail_msg: >-
Docker baseline currently supports Debian/Ubuntu apt-based hosts only.
Detected {{ ansible_distribution }} / {{ ansible_os_family }}.
- name: Remove conflicting Docker packages
apt:
name: "{{ docker_conflicting_packages }}"
state: absent
- name: Install Docker prerequisites
apt:
name: "{{ docker_prereq_packages }}"
state: present
update_cache: true
- name: Create Docker APT keyrings directory
file:
path: /etc/apt/keyrings
state: directory
mode: "0755"
- name: Determine dpkg architecture
command: dpkg --print-architecture
register: docker_dpkg_arch
changed_when: false
- name: Download Docker GPG key
get_url:
url: "https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg"
dest: /etc/apt/keyrings/docker.asc
mode: "0644"
force: true
- name: Add Docker APT repository
apt_repository:
repo: >
deb [arch={{ docker_dpkg_arch.stdout }} signed-by=/etc/apt/keyrings/docker.asc]
https://download.docker.com/linux/{{ ansible_distribution | lower }}
{{ ansible_distribution_release }} stable
filename: docker
state: present
update_cache: true
- name: Install Docker Engine and plugins
apt:
name: "{{ docker_packages }}"
state: "{{ docker_package_state }}"
- name: Configure Docker daemon
copy:
dest: /etc/docker/daemon.json
content: "{{ docker_daemon_config | to_nice_json }}"
owner: root
group: root
mode: "0644"
notify: Restart Docker
- name: Enable and start Docker
systemd:
name: docker
enabled: true
state: started
- name: Add user to docker group
user:
name: "{{ docker_manage_user | default(ansible_user) }}"
groups: docker
append: true
- name: Ensure standard Docker stack directory exists
file:
path: "{{ docker_stacks_dir }}"
state: directory
owner: root
group: docker
mode: "0775"
- name: Enable IP forwarding
ansible.posix.sysctl:
name: net.ipv4.ip_forward
value: "1"
state: present
reload: true
- name: Disable IPv6
ansible.posix.sysctl:
name: "{{ item }}"
value: "1"
state: present
reload: true
loop:
- net.ipv6.conf.all.disable_ipv6
- net.ipv6.conf.default.disable_ipv6
when: docker_disable_ipv6
- name: Create shared Docker networks
community.docker.docker_network:
name: "{{ item }}"
state: present
loop: "{{ docker_networks }}"
when: docker_networks | length > 0
- name: Check Docker version
command: docker --version
register: docker_version
changed_when: false
- name: Check Docker Compose version
command: docker compose version
register: docker_compose_version
changed_when: false
- name: Verify Docker can run containers
command: docker run --rm hello-world
register: docker_hello_world
changed_when: false
when: docker_run_hello_world
- name: Show Docker baseline summary
debug:
msg:
docker_version: "{{ docker_version.stdout }}"
docker_compose_version: "{{ docker_compose_version.stdout }}"
stacks_dir: "{{ docker_stacks_dir }}"
networks: "{{ docker_networks }}"