--- - name: Ensure keyrings directory exists (Debian/Ubuntu) ansible.builtin.file: path: "/etc/apt/keyrings" state: directory mode: "0755" when: ansible_facts['os_family'] == 'Debian' - name: Download and dearmor Docker GPG key (Debian/Ubuntu) ansible.builtin.shell: | set -o pipefail curl -fsSL "https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg" | gpg --dearmor --yes -o {{ docker_gpg_key_path }} args: creates: "{{ docker_gpg_key_path }}" executable: /bin/bash when: ansible_facts['os_family'] == 'Debian' - name: Add Docker APT repository (Debian/Ubuntu) ansible.builtin.copy: dest: /etc/apt/sources.list.d/docker.list content: "{{ docker_apt_source_line }}\n" mode: "0644" register: docker_apt_repo when: ansible_facts['os_family'] == 'Debian' - name: Update apt cache after adding Docker repo (Debian/Ubuntu) ansible.builtin.apt: update_cache: true when: - ansible_facts['os_family'] == 'Debian' - docker_apt_repo is changed - name: Install rootless Docker dependencies (Debian/Ubuntu) ansible.builtin.apt: name: - uidmap - slirp4netns - fuse-overlayfs - docker-ce - docker-ce-cli - docker-ce-rootless-extras - containerd.io - docker-compose-plugin - rsync state: present when: ansible_facts['os_family'] == 'Debian' - name: Update pacman cache (Arch Linux) community.general.pacman: update_cache: true when: ansible_facts['os_family'] == 'Archlinux' changed_when: false - name: Install rootless Docker dependencies (Arch Linux) community.general.pacman: name: - docker - docker-compose - slirp4netns - fuse-overlayfs - rsync state: present when: ansible_facts['os_family'] == 'Archlinux' - name: Check if rootless Docker is already set up ansible.builtin.stat: path: "{{ gitea_runner_home }}/.config/systemd/user/docker.service" register: rootless_docker_check - name: Set up rootless Docker for runner user ansible.builtin.command: dockerd-rootless-setuptool.sh install args: creates: "{{ gitea_runner_home }}/.config/systemd/user/docker.service" become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" when: - docker_rootless_setup - not rootless_docker_check.stat.exists - name: Start rootless Docker daemon (systemd user service) ansible.builtin.command: systemctl --user start docker become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" changed_when: true when: docker_rootless_setup - name: Enable rootless Docker daemon (systemd user service) ansible.builtin.command: systemctl --user enable docker become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" changed_when: true when: docker_rootless_setup - name: Wait for rootless Docker daemon to be ready ansible.builtin.command: docker version become: true become_user: "{{ gitea_runner_service_user }}" environment: DOCKER_HOST: "unix:///run/user/{{ gitea_runner_uid }}/docker.sock" XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" register: docker_ready until: docker_ready.rc == 0 retries: 10 delay: 2 changed_when: false when: docker_rootless_setup