diff --git a/ansible/roles/woodpecker-agent/tasks/main.yml b/ansible/roles/woodpecker-agent/tasks/main.yml index aacca355..ba93ef79 100644 --- a/ansible/roles/woodpecker-agent/tasks/main.yml +++ b/ansible/roles/woodpecker-agent/tasks/main.yml @@ -7,6 +7,25 @@ when: woodpecker_agent_docker_ipv6 | bool notify: Restart docker +# The daemon.json change only restarts Docker on change; the earlier +# self-deploy restarts were unreliable, so verify Docker actually loaded the +# IPv6 config and force a (deferred) restart if not — idempotent once active. +- name: Check whether Docker already has IPv6 active on the default bridge + ansible.builtin.command: "docker network inspect bridge --format '{% raw %}{{.EnableIPv6}}{% endraw %}'" + register: _docker_bridge_v6 + changed_when: false + failed_when: false + when: woodpecker_agent_docker_ipv6 | bool + +- name: Force a deferred Docker restart if IPv6 isn't active yet + ansible.builtin.command: >- + systemd-run --on-active=15s --timer-property=AccuracySec=100ms + systemctl restart docker + when: + - woodpecker_agent_docker_ipv6 | bool + - "'true' not in (_docker_bridge_v6.stdout | default('') | lower)" + changed_when: true + - name: Create Woodpecker agent directory file: path: "{{ woodpecker_agent_compose_dir }}"