From 8d136caa9906eb7b129c80b1e6c28f777bec5d42 Mon Sep 17 00:00:00 2001 From: mathieu Date: Sun, 24 May 2026 17:13:31 +0200 Subject: [PATCH] feat: initial installation role for docker --- .gitignore | 1 + README.md | 27 +++++++++++++++++++++++ defaults/main.yml | 9 ++++++++ handlers/main.yml | 1 + meta/main.yml | 17 +++++++++++++++ tasks/debian.yml | 55 +++++++++++++++++++++++++++++++++++++++++++++++ tasks/main.yml | 9 ++++++++ tasks/redhat.yml | 27 +++++++++++++++++++++++ 8 files changed, 146 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 tasks/debian.yml create mode 100644 tasks/main.yml create mode 100644 tasks/redhat.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8b42eb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.retry diff --git a/README.md b/README.md new file mode 100644 index 0000000..4e81c78 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# ansible-role-docker + +Installs Docker CE on Debian/Ubuntu and RHEL/Fedora/CentOS. + +## Requirements + +- Ansible >= 2.14 + +## Role Variables + +| Variable | Default | Description | +|---|---|---| +| `docker_packages` | see defaults | List of Docker packages to install | +| `docker_service_enabled` | `true` | Enable Docker service at boot | +| `docker_service_state` | `started` | Service state after installation | + +## Example Playbook + +```yaml +- hosts: servers + roles: + - role: ansible-role-docker +``` + +## License + +MIT diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..14fe6d8 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,9 @@ +--- +docker_packages: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin +docker_service_enabled: true +docker_service_state: started diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..1ba1df8 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + author: mathieu + description: Install Docker CE on Debian and RedHat based distributions + license: MIT + min_ansible_version: "2.14" + platforms: + - name: Debian + versions: [bullseye, bookworm] + - name: Ubuntu + versions: [focal, jammy, noble] + - name: EL + versions: ["8", "9"] + - name: Fedora + versions: [all] + galaxy_tags: [docker, containers, system] +dependencies: [] diff --git a/tasks/debian.yml b/tasks/debian.yml new file mode 100644 index 0000000..df83e47 --- /dev/null +++ b/tasks/debian.yml @@ -0,0 +1,55 @@ +--- +- name: Install Docker prerequisites + ansible.builtin.apt: + name: + - ca-certificates + - curl + state: present + update_cache: true + become: true + +- name: Create Docker keyring directory + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: '0755' + become: true + +- name: Download Docker GPG key + ansible.builtin.shell: + cmd: > + curl -fsSL https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg + | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + creates: /etc/apt/keyrings/docker.gpg + become: true + +- name: Set Docker GPG key permissions + ansible.builtin.file: + path: /etc/apt/keyrings/docker.gpg + mode: '0644' + become: true + +- name: Add Docker apt repository + ansible.builtin.copy: + content: > + deb [arch={{ ansible_architecture | replace('x86_64', 'amd64') | replace('aarch64', 'arm64') }} + signed-by=/etc/apt/keyrings/docker.gpg] + https://download.docker.com/linux/{{ ansible_distribution | lower }} + {{ ansible_distribution_release }} stable + dest: /etc/apt/sources.list.d/docker.list + mode: '0644' + become: true + +- name: Install Docker packages + ansible.builtin.apt: + name: "{{ docker_packages }}" + state: present + update_cache: true + become: true + +- name: Enable and start Docker service + ansible.builtin.systemd: + name: docker + enabled: "{{ docker_service_enabled }}" + state: "{{ docker_service_state }}" + become: true diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..45c0a09 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,9 @@ +--- +- name: Assert supported OS family + ansible.builtin.assert: + that: + - ansible_os_family in ['Debian', 'RedHat'] + fail_msg: "Unsupported OS family: {{ ansible_os_family }}" + +- name: Include OS-specific installation tasks + ansible.builtin.include_tasks: "{{ ansible_os_family | lower }}.yml" diff --git a/tasks/redhat.yml b/tasks/redhat.yml new file mode 100644 index 0000000..a575217 --- /dev/null +++ b/tasks/redhat.yml @@ -0,0 +1,27 @@ +--- +- name: Install Docker prerequisites + ansible.builtin.dnf: + name: + - dnf-plugins-core + state: present + become: true + +- name: Add Docker yum repository + ansible.builtin.get_url: + url: https://download.docker.com/linux/centos/docker-ce.repo + dest: /etc/yum.repos.d/docker-ce.repo + mode: '0644' + become: true + +- name: Install Docker packages + ansible.builtin.dnf: + name: "{{ docker_packages }}" + state: present + become: true + +- name: Enable and start Docker service + ansible.builtin.systemd: + name: docker + enabled: "{{ docker_service_enabled }}" + state: "{{ docker_service_state }}" + become: true