--- # Periodic timer that pre-pulls CI runner images into the local Docker cache. # Prevents thundering-herd registry timeouts when all runners start jobs # simultaneously with empty/stale caches. Runs every 6 hours (configurable). # The prune timer removes dangling images but NOT tagged ones, so pre-pulled # images persist between runs. - name: Create docker-pull-images user service file ansible.builtin.template: src: docker-pull-images.service.j2 dest: "{{ gitea_runner_home }}/.config/systemd/user/docker-pull-images.service" owner: "{{ gitea_runner_service_user }}" group: "{{ gitea_runner_service_user }}" mode: "0644" register: gitea_runner_pre_cache_service - name: Create docker-pull-images user timer file ansible.builtin.template: src: docker-pull-images.timer.j2 dest: "{{ gitea_runner_home }}/.config/systemd/user/docker-pull-images.timer" owner: "{{ gitea_runner_service_user }}" group: "{{ gitea_runner_service_user }}" mode: "0644" register: gitea_runner_pre_cache_timer - name: Reload systemd user daemon for pre-cache timer ansible.builtin.command: systemctl --user daemon-reload become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ gitea_runner_uid | default(0) }}/bus" changed_when: true when: - gitea_runner_systemd_available.stat.exists - gitea_runner_docker_rootless_setup - gitea_runner_pre_cache_service is changed or gitea_runner_pre_cache_timer is changed - gitea_runner_pre_cache_schedule | length > 0 - gitea_runner_pre_cache_images | length > 0 - name: Enable and start docker-pull-images user timer ansible.builtin.command: systemctl --user enable --now docker-pull-images.timer become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ gitea_runner_uid | default(0) }}/bus" changed_when: true when: - gitea_runner_systemd_available.stat.exists - gitea_runner_docker_rootless_setup - gitea_runner_pre_cache_schedule | length > 0 - gitea_runner_pre_cache_images | length > 0 - name: Disable and stop docker-pull-images timer (no images or schedule) ansible.builtin.command: systemctl --user disable --now docker-pull-images.timer become: true become_user: "{{ gitea_runner_service_user }}" environment: XDG_RUNTIME_DIR: "/run/user/{{ gitea_runner_uid }}" DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ gitea_runner_uid | default(0) }}/bus" changed_when: true failed_when: false when: - gitea_runner_systemd_available.stat.exists - gitea_runner_docker_rootless_setup - gitea_runner_pre_cache_schedule | length == 0 or gitea_runner_pre_cache_images | length == 0