From 2c0224566e634ea424e309a948d75d582b815afc Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 15:09:10 +0300 Subject: [PATCH 1/3] add docker_ubuntu role --- roles/docker_ubuntu/README.md | 41 +++++++++++ roles/docker_ubuntu/defaults/main.yml | 5 ++ roles/docker_ubuntu/handlers/main.yml | 11 +++ roles/docker_ubuntu/meta/main.yml | 17 +++++ .../molecule/default/converge.yml | 9 +++ .../molecule/default/molecule.yml | 27 +++++++ .../docker_ubuntu/molecule/default/verify.yml | 31 ++++++++ roles/docker_ubuntu/tasks/main.yml | 71 +++++++++++++++++++ roles/docker_ubuntu/templates/daemon.json.j2 | 3 + roles/docker_ubuntu/vars/main.yml | 2 + 10 files changed, 217 insertions(+) create mode 100644 roles/docker_ubuntu/README.md create mode 100644 roles/docker_ubuntu/defaults/main.yml create mode 100644 roles/docker_ubuntu/handlers/main.yml create mode 100644 roles/docker_ubuntu/meta/main.yml create mode 100644 roles/docker_ubuntu/molecule/default/converge.yml create mode 100644 roles/docker_ubuntu/molecule/default/molecule.yml create mode 100644 roles/docker_ubuntu/molecule/default/verify.yml create mode 100644 roles/docker_ubuntu/tasks/main.yml create mode 100644 roles/docker_ubuntu/templates/daemon.json.j2 create mode 100644 roles/docker_ubuntu/vars/main.yml diff --git a/roles/docker_ubuntu/README.md b/roles/docker_ubuntu/README.md new file mode 100644 index 0000000..b196083 --- /dev/null +++ b/roles/docker_ubuntu/README.md @@ -0,0 +1,41 @@ +docker_ubuntu +========= + +Install Docker ecosystem on Ubuntu. + +[![lint](https://github.com/corvus-migratorius/ansible-docker-ubuntu/actions/workflows/lint.yaml/badge.svg)](https://github.com/corvus-migratorius/ansible-docker-ubuntu/actions/workflows/lint.yaml) + +[![molecule](https://github.com/corvus-migratorius/ansible-docker-ubuntu/actions/workflows/molecule.yaml/badge.svg)](https://github.com/corvus-migratorius/ansible-docker-ubuntu/actions/workflows/molecule.yaml) + +Requirements +------------ + +None + +Role Variables +-------------- + +None + +Dependencies +------------ + +None + +Example Playbook +---------------- + +```yaml +roles: + - role: docker_ubuntu +``` + +License +------- + +BSD + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/docker_ubuntu/defaults/main.yml b/roles/docker_ubuntu/defaults/main.yml new file mode 100644 index 0000000..b9fac9f --- /dev/null +++ b/roles/docker_ubuntu/defaults/main.yml @@ -0,0 +1,5 @@ +--- +du_docker_version: "27.3.1" +du_registry_mirrors: + - https://docker.io + - https://mirror.gcr.io diff --git a/roles/docker_ubuntu/handlers/main.yml b/roles/docker_ubuntu/handlers/main.yml new file mode 100644 index 0000000..73b8719 --- /dev/null +++ b/roles/docker_ubuntu/handlers/main.yml @@ -0,0 +1,11 @@ +--- +# handlers file for playbooks/roles/docker_ubuntu +- name: "Restart Docker daemon" + ansible.builtin.systemd_service: + name: docker + state: restarted + daemon_reload: true + +- name: "Sanity check" # noqa: no-changed-when + ansible.builtin.command: + cmd: "docker run --rm --pull=always hello-world" diff --git a/roles/docker_ubuntu/meta/main.yml b/roles/docker_ubuntu/meta/main.yml new file mode 100644 index 0000000..332cab7 --- /dev/null +++ b/roles/docker_ubuntu/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: docker_ubuntu + namespace: genlab + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + description: "Install Docker ecosystem on Ubuntu" + license: "MIT" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: [ "focal", "jammy", "noble" ] + + galaxy_tags: [ "docker" ] + +dependencies: [] diff --git a/roles/docker_ubuntu/molecule/default/converge.yml b/roles/docker_ubuntu/molecule/default/converge.yml new file mode 100644 index 0000000..b67f3d0 --- /dev/null +++ b/roles/docker_ubuntu/molecule/default/converge.yml @@ -0,0 +1,9 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.docker_ubuntu + du_docker_version: "27.3.1" + du_registry_mirrors: + - https://docker.io + - https://mirror.gcr.io diff --git a/roles/docker_ubuntu/molecule/default/molecule.yml b/roles/docker_ubuntu/molecule/default/molecule.yml new file mode 100644 index 0000000..fd2f06d --- /dev/null +++ b/roles/docker_ubuntu/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy + +driver: + name: docker + +platforms: + - name: ubuntu + image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + +provisioner: + name: ansible + +verifier: + name: ansible + +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/docker_ubuntu/molecule/default/verify.yml b/roles/docker_ubuntu/molecule/default/verify.yml new file mode 100644 index 0000000..ccc781d --- /dev/null +++ b/roles/docker_ubuntu/molecule/default/verify.yml @@ -0,0 +1,31 @@ +--- +- name: Verify + hosts: all + gather_facts: true + any_errors_fatal: true + + tasks: + # https://github.com/ansible/molecule/issues/3587#issuecomment-1158650179 + - name: "Include default vars" + ansible.builtin.include_vars: + dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/" + extensions: [ 'yml' ] + + - name: "Sanity check Docker by running a `hello-world` container" # noqa: no-changed-when + ansible.builtin.command: + cmd: "docker run --rm hello-world" + + - name: "Check if `Compose` is available from PATH" # noqa: no-changed-when + ansible.builtin.command: + cmd: "docker compose version" + + - name: "Check if Docker has the expected version" # noqa: no-changed-when + register: docker_version + ansible.builtin.command: + cmd: "docker version --format '{{ '{{' }} .Server.Version {{ '}}' }}'" + + - name: "Check if Docker has the expected version" # noqa: no-changed-when + ansible.builtin.assert: + that: "du_docker_version in docker_version.stdout" + success_msg: "Docker has the expected version ({{ docker_version.stdout }} )" + fail_msg: "Unexpected Docker version ({{ docker_version.stdout }})" diff --git a/roles/docker_ubuntu/tasks/main.yml b/roles/docker_ubuntu/tasks/main.yml new file mode 100644 index 0000000..9d0fa75 --- /dev/null +++ b/roles/docker_ubuntu/tasks/main.yml @@ -0,0 +1,71 @@ +--- +# REF: https://www.digitalocean.com/community/tutorials/how-to-use-ansible-to-install-and-set-up-docker-on-ubuntu-20-04 + +- name: "Install aptitude" + ansible.builtin.apt: + name: aptitude + state: present + update_cache: true + +- name: "Install required system packages" + ansible.builtin.apt: + pkg: + - apt-transport-https + - ca-certificates + - curl + - gpg-agent + - python3-pip + - python3-setuptools + - software-properties-common + - virtualenv + state: present + update_cache: true + +- name: "Add Docker GPG apt Key" + ansible.builtin.apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + state: present + +- name: "Add Docker Repository" + ansible.builtin.apt_repository: + repo: "deb https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable" + state: present + +- name: "Install Docker ecosystem" + notify: "Sanity check" + ansible.builtin.apt: + pkg: + - docker-ce={{ du_docker_version_full }} + - docker-ce-cli={{ du_docker_version_full }} + state: present + update_cache: true + +- name: "Ensure the 'docker' group exists" + ansible.builtin.group: + name: docker + state: present + system: true + +- name: "Install Python tools for Docker" + ansible.builtin.pip: + name: [ docker ] + break_system_packages: true + +- name: "Configure Docker daemon" + notify: + - "Restart Docker daemon" + - "Sanity check" + ansible.builtin.template: + src: daemon.json.j2 + dest: /etc/docker/daemon.json + owner: root + group: root + mode: "0664" + validate: "dockerd --validate --config-file=%s" + +- name: "Spin up the Docker system service" + notify: "Sanity check" + ansible.builtin.systemd: + name: docker + state: started + enabled: true diff --git a/roles/docker_ubuntu/templates/daemon.json.j2 b/roles/docker_ubuntu/templates/daemon.json.j2 new file mode 100644 index 0000000..b557ee6 --- /dev/null +++ b/roles/docker_ubuntu/templates/daemon.json.j2 @@ -0,0 +1,3 @@ +{ + "registry-mirrors": {{ du_registry_mirrors | to_json }} +} diff --git a/roles/docker_ubuntu/vars/main.yml b/roles/docker_ubuntu/vars/main.yml new file mode 100644 index 0000000..1455687 --- /dev/null +++ b/roles/docker_ubuntu/vars/main.yml @@ -0,0 +1,2 @@ +--- +du_docker_version_full: "5:{{ du_docker_version }}-1~ubuntu.{{ ansible_lsb.release }}~{{ ansible_lsb.codename }}" From 236c4cf189a11015a8b228e4f34975862f43bcf0 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 15:26:34 +0300 Subject: [PATCH 2/3] fix ansible-lint errors --- roles/docker_ubuntu/defaults/main.yml | 4 ++-- roles/docker_ubuntu/meta/main.yml | 4 ++-- roles/docker_ubuntu/molecule/default/converge.yml | 6 +++--- roles/docker_ubuntu/molecule/default/verify.yml | 12 ++++++------ roles/docker_ubuntu/tasks/main.yml | 6 +++--- roles/docker_ubuntu/templates/daemon.json.j2 | 2 +- roles/docker_ubuntu/vars/main.yml | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/roles/docker_ubuntu/defaults/main.yml b/roles/docker_ubuntu/defaults/main.yml index b9fac9f..85de886 100644 --- a/roles/docker_ubuntu/defaults/main.yml +++ b/roles/docker_ubuntu/defaults/main.yml @@ -1,5 +1,5 @@ --- -du_docker_version: "27.3.1" -du_registry_mirrors: +docker_ubuntu_version: "27.3.1" +docker_ubuntu_registry_mirrors: - https://docker.io - https://mirror.gcr.io diff --git a/roles/docker_ubuntu/meta/main.yml b/roles/docker_ubuntu/meta/main.yml index 332cab7..f6eca81 100644 --- a/roles/docker_ubuntu/meta/main.yml +++ b/roles/docker_ubuntu/meta/main.yml @@ -10,8 +10,8 @@ galaxy_info: platforms: - name: "Ubuntu" - versions: [ "focal", "jammy", "noble" ] + versions: ["focal", "jammy", "noble"] - galaxy_tags: [ "docker" ] + galaxy_tags: ["docker"] dependencies: [] diff --git a/roles/docker_ubuntu/molecule/default/converge.yml b/roles/docker_ubuntu/molecule/default/converge.yml index b67f3d0..d3e24f2 100644 --- a/roles/docker_ubuntu/molecule/default/converge.yml +++ b/roles/docker_ubuntu/molecule/default/converge.yml @@ -2,8 +2,8 @@ - name: Converge hosts: all roles: - - role: genlab.docker_ubuntu - du_docker_version: "27.3.1" - du_registry_mirrors: + - role: genlab.common.docker_ubuntu + docker_ubuntu_version: "27.3.1" + docker_ubuntu_registry_mirrors: - https://docker.io - https://mirror.gcr.io diff --git a/roles/docker_ubuntu/molecule/default/verify.yml b/roles/docker_ubuntu/molecule/default/verify.yml index ccc781d..a384184 100644 --- a/roles/docker_ubuntu/molecule/default/verify.yml +++ b/roles/docker_ubuntu/molecule/default/verify.yml @@ -9,7 +9,7 @@ - name: "Include default vars" ansible.builtin.include_vars: dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/" - extensions: [ 'yml' ] + extensions: ['yml'] - name: "Sanity check Docker by running a `hello-world` container" # noqa: no-changed-when ansible.builtin.command: @@ -19,13 +19,13 @@ ansible.builtin.command: cmd: "docker compose version" - - name: "Check if Docker has the expected version" # noqa: no-changed-when - register: docker_version + - name: "Get docker version" # noqa: no-changed-when + register: docker_ubuntu_current_version ansible.builtin.command: cmd: "docker version --format '{{ '{{' }} .Server.Version {{ '}}' }}'" - name: "Check if Docker has the expected version" # noqa: no-changed-when ansible.builtin.assert: - that: "du_docker_version in docker_version.stdout" - success_msg: "Docker has the expected version ({{ docker_version.stdout }} )" - fail_msg: "Unexpected Docker version ({{ docker_version.stdout }})" + that: "docker_ubuntu_version in docker_ubuntu_current_version.stdout" + success_msg: "Docker has the expected version ({{ docker_ubuntu_current_version.stdout }} )" + fail_msg: "Unexpected Docker version ({{ docker_ubuntu_current_version.stdout }})" diff --git a/roles/docker_ubuntu/tasks/main.yml b/roles/docker_ubuntu/tasks/main.yml index 9d0fa75..ec14880 100644 --- a/roles/docker_ubuntu/tasks/main.yml +++ b/roles/docker_ubuntu/tasks/main.yml @@ -35,8 +35,8 @@ notify: "Sanity check" ansible.builtin.apt: pkg: - - docker-ce={{ du_docker_version_full }} - - docker-ce-cli={{ du_docker_version_full }} + - docker-ce={{ docker_ubuntu_version_full }} + - docker-ce-cli={{ docker_ubuntu_version_full }} state: present update_cache: true @@ -48,7 +48,7 @@ - name: "Install Python tools for Docker" ansible.builtin.pip: - name: [ docker ] + name: [docker] break_system_packages: true - name: "Configure Docker daemon" diff --git a/roles/docker_ubuntu/templates/daemon.json.j2 b/roles/docker_ubuntu/templates/daemon.json.j2 index b557ee6..d128e9a 100644 --- a/roles/docker_ubuntu/templates/daemon.json.j2 +++ b/roles/docker_ubuntu/templates/daemon.json.j2 @@ -1,3 +1,3 @@ { - "registry-mirrors": {{ du_registry_mirrors | to_json }} + "registry-mirrors": {{ docker_ubuntu_registry_mirrors | to_json }} } diff --git a/roles/docker_ubuntu/vars/main.yml b/roles/docker_ubuntu/vars/main.yml index 1455687..3075048 100644 --- a/roles/docker_ubuntu/vars/main.yml +++ b/roles/docker_ubuntu/vars/main.yml @@ -1,2 +1,2 @@ --- -du_docker_version_full: "5:{{ du_docker_version }}-1~ubuntu.{{ ansible_lsb.release }}~{{ ansible_lsb.codename }}" +docker_ubuntu_version_full: "5:{{ docker_ubuntu_version }}-1~ubuntu.{{ ansible_lsb.release }}~{{ ansible_lsb.codename }}" From f541060cc13143addc588819b4f5b8b9075b8950 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 15:28:18 +0300 Subject: [PATCH 3/3] update meta --- README.md | 1 + galaxy.yml | 2 +- roles/docker_ubuntu/README.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d75026..6322429 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - [borgmatic](roles/borgmatic/README.md) - [curl_scheduled](roles/curl_scheduled/README.md) - [dnsmasq](roles/dnsmasq/README.md) +- [docker_ubuntu](roles/docker_ubuntu/README.md) - [grafana](roles/grafana/README.md) - [ipmi_exporter](roles/ipmi_exporter/README.md) - [karma](roles/karma/README.md) diff --git a/galaxy.yml b/galaxy.yml index 8c51504..dd3e469 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.23.0 +version: 0.25.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) diff --git a/roles/docker_ubuntu/README.md b/roles/docker_ubuntu/README.md index b196083..8760978 100644 --- a/roles/docker_ubuntu/README.md +++ b/roles/docker_ubuntu/README.md @@ -27,7 +27,7 @@ Example Playbook ```yaml roles: - - role: docker_ubuntu + - role: genlab.common.docker_ubuntu ``` License