--- - name: Ensure required system packages are present ansible.builtin.apt: name: - ca-certificates - curl - gnupg - lsb-release state: present update_cache: true cache_valid_time: 3600 - name: Ensure /etc/apt/keyrings directory exists ansible.builtin.file: path: /etc/apt/keyrings state: directory mode: "0755" - name: Check if Docker GPG key already present ansible.builtin.stat: path: /etc/apt/keyrings/docker.asc register: docker_gpg_key - name: Download Docker's official GPG key ansible.builtin.get_url: url: https://download.docker.com/linux/ubuntu/gpg dest: /etc/apt/keyrings/docker.asc mode: "0644" when: not docker_gpg_key.stat.exists - name: Add Docker apt repository (deb822 format) ansible.builtin.deb822_repository: name: docker types: [deb] uris: "https://download.docker.com/linux/ubuntu" suites: "{{ ansible_distribution_release }}" components: [stable] architectures: "{{ docker_apt_arch }}" signed_by: /etc/apt/keyrings/docker.asc state: present register: docker_repo_added - name: Update apt cache after adding Docker repo ansible.builtin.apt: update_cache: true when: docker_repo_added.changed - name: Install Docker Engine and plugins ansible.builtin.apt: name: "{{ docker_packages }}" state: present notify: restart docker - name: Ensure docker service is started and enabled ansible.builtin.systemd: name: docker state: "{{ docker_service_state }}" enabled: "{{ docker_service_enabled }}" - name: Ensure docker group exists ansible.builtin.group: name: docker state: present - name: Add user(s) to the docker group ansible.builtin.user: name: "{{ item }}" groups: docker append: true loop: "{{ docker_users_to_add }}" register: docker_group_added - name: Notify about needing to re-login for group changes ansible.builtin.debug: msg: >- User '{{ item.item }}' was added to the docker group. They will need to log out and back in (or start a new SSH session) for this to take effect without using sudo for docker commands. loop: "{{ docker_group_added.results }}" when: item.changed - name: Verify Docker is installed and working ansible.builtin.command: docker --version register: docker_version_output changed_when: false - name: Show installed Docker version ansible.builtin.debug: msg: "{{ docker_version_output.stdout }}" - name: Verify Docker Compose plugin is installed ansible.builtin.command: docker compose version register: docker_compose_version_output changed_when: false - name: Show installed Docker Compose version ansible.builtin.debug: msg: "{{ docker_compose_version_output.stdout }}"