kubernetes-sigs/kubespray

Container image pull/export issue using nerdctl (pull) and ctr (export)

Open

#13235 opened on May 6, 2026

View on GitHub
 (5 comments) (0 reactions) (0 assignees)HTML (10,380 stars) (4,419 forks)batch import
RHEL 9help wantedkind/bug

Description

What happened?

Hi all,

we are trying setting up our airgapped cluster using:

  • KUBESPRAY 2.31.0
  • K8S: 1.35.0

Our cluster is not open to internet public registries and uses an AZURE ACR as pull-through cache. Due to this infrastructure configuration we are working with following variables:

download_run_once: true
download_localhost: true
download_force_cache: true
download_cache_dir: /opt/gitlab-runner/ansible/kubespray_cache
download_container: true

Containerd is hosted on our ansible controller host and always succeeds pulling from acr.

Some months ago we have tried to setup and upgrade the cluster with kubespray 2.29 and 2.30, but always failed at download container time with error like the following:

ctr: failed to get reader: content digest sha256:045fc1c20da893bef6d0ed64e92b243213b0cebcd478389573bdfb095e212a98: not found

We have added some tasks before kubespray playbook execution to be sure to have the registry completely clean/empty and then we succeeded.

We were pretty sure to have solved the issue, but this time with K8S1.35/KUBESPRAY2.31 no luck at all.

2026-05-06T09:35:29.301503Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Download image if required] ***
2026-05-06T09:35:29.301504Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/fabrick-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:57
2026-05-06T09:35:29.301506Z 01O Wednesday 06 May 2026  11:35:24 +0200 (0:00:00.506)       0:20:31.574 ********* 
2026-05-06T09:35:29.301507Z 01O changed: [fbktek8sctl01.sg.gbs.tst -> localhost] => changed=true 
2026-05-06T09:35:29.301509Z 01O   attempts: 1
2026-05-06T09:35:29.301510Z 01O   cmd:
2026-05-06T09:35:29.301510Z 01O   - /usr/bin/nerdctl
2026-05-06T09:35:29.301511Z 01O   - -n
2026-05-06T09:35:29.301512Z 01O   - k8s.io
2026-05-06T09:35:29.301513Z 01O   - pull
2026-05-06T09:35:29.301514Z 01O   - --quiet
2026-05-06T09:35:29.301515Z 01O   - acrfbkpronpci01.azurecr.io/k8s/kube-apiserver:v1.35.0
2026-05-06T09:35:29.301516Z 01O   delta: '0:00:02.248485'
2026-05-06T09:35:29.301517Z 01O   end: '2026-05-06 11:35:26.745802'
2026-05-06T09:35:29.301518Z 01O   msg: ''
2026-05-06T09:35:29.301519Z 01O   rc: 0
2026-05-06T09:35:29.301520Z 01O   start: '2026-05-06 11:35:24.497317'
2026-05-06T09:35:29.301521Z 01O   stderr: ''
2026-05-06T09:35:29.301522Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301523Z 01O   stdout: ''
2026-05-06T09:35:29.301524Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301525Z 01O 
2026-05-06T09:35:29.301526Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Save and compress image] ***
2026-05-06T09:35:29.301527Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/fabrick-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:72
2026-05-06T09:35:29.301529Z 01O Wednesday 06 May 2026  11:35:26 +0200 (0:00:02.615)       0:20:34.190 ********* 
2026-05-06T09:35:29.301531Z 01O [DEPRECATION WARNING]: Conditional result at location /opt/gitlab-
2026-05-06T09:35:29.301537Z 01O runner/builds/bKpUow5MT/0/components/fabrick-it/devopstool/kubespray/ansible/co
2026-05-06T09:35:29.301539Z 01O llections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/do
2026-05-06T09:35:29.301540Z 01O wnload_container.yml 77:20 was of type 'AnsibleUnsafeText'. Conditional results
2026-05-06T09:35:29.301541Z 01O  should only be True or False. The result was interpreted as True. This feature
2026-05-06T09:35:29.301543Z 01O  will be removed in version 2.19. Deprecation warnings can be disabled by 
2026-05-06T09:35:29.301544Z 01O setting deprecation_warnings=False in ansible.cfg.
2026-05-06T09:35:29.301545Z 01O fatal: [fbktek8sctl01.sg.gbs.tst -> localhost]: FAILED! => changed=true 
2026-05-06T09:35:29.301547Z 01O   cmd: /usr/bin/ctr -n k8s.io image export --platform linux/amd64 /opt/gitlab-runner/ansible/kubespray_cache/images/acrfbkpronpci01.azurecr.io_k8s_kube-apiserver_v1.35.0.tar acrfbkpronpci01.azurecr.io/k8s/kube-apiserver:v1.35.0
2026-05-06T09:35:29.301549Z 01O   delta: '0:00:00.043001'
2026-05-06T09:35:29.301550Z 01O   end: '2026-05-06 11:35:27.125362'
2026-05-06T09:35:29.301551Z 01O   failed_when_result: true
2026-05-06T09:35:29.301552Z 01O   msg: non-zero return code
2026-05-06T09:35:29.301553Z 01O   rc: 1
2026-05-06T09:35:29.301553Z 01O   start: '2026-05-06 11:35:27.082361'
2026-05-06T09:35:29.301554Z 01O   stderr: 'ctr: failed to get reader: content digest sha256:045fc1c20da893bef6d0ed64e92b243213b0cebcd478389573bdfb095e212a98: not found'
2026-05-06T09:35:29.301556Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301557Z 01O   stdout: ''
2026-05-06T09:35:29.301558Z 01O   stdout_lines: <omitted>

Checking manually integrity of ansible controller registry at failure time I can see what follow:

[root@************]ctr -n k8s.io image export --platform linux/amd64 /tmp/test-export-ctr.tar acr.azurecr.io/k8s/kube-apiserver:v1.35.0
ctr: failed to get reader: content digest sha256:045fc1c20da893bef6d0ed64e92b243213b0cebcd478389573bdfb095e212a98: not found
[root@************]nerdctl -n k8s.io save -o  /tmp/test-export-nerdctl.tar acr.azurecr.io/k8s/kube-apiserver:v1.35.0
acr.azurecr.io/k8s/kube-apiserver:v1.35.0:                            resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:32f98b308862e1cf98c900927d84630fb86a836a480f02752a779eb85c1489f3:    exists         |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:50e01ce089b6b6508e2f68ba0da943a3bc4134596e7e2afaac27dd26f71aca7a: exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:5d5772cea92929b7b055616254863006804d8a87de637d1fc55301843739fb33:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:7c12895b777bcaa8ccae0605b4de635b68fc32d60fa08f421dc3818bf55ee212:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:bfb59b82a9b65e47d485e53b3e815bca3b3e21a095bd0cb88ced9ac0b48062bf:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:62de241dac5fe19d5f8f4defe034289006ddaa0f2cca735db4718fe2a23e504e:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:017886f7e1764618ffad6fbd503c42a60076c63adc16355cac80f0f311cae4c9:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:fd4aa3667332c2a4837e1b5f395b0555b3c4ec299e38166ae93ee84bad01befa:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:2780920e5dbfbe103d03a583ed75345306e572ec5a48cb10361f046767d9f29a:    exists         |++++++++++++++++++++++++++++++++++++++| 
config-sha256:5c6acd67e9cd10eb60a246cd233db251ef62ea97e6572f897e873f0cb648f499:   exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:5664b15f108bf9436ce3312090a767300800edbbfd4511aa1a6d64357024d5dd:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:da7816fa955ea24533c388143c78804c28682eef99b4ee3723b548c70148bba6:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:aa4c344abb026d1e243c1dae45c14b41fee10af4567ac393f39113c3df81565c:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:3214acf345c0cc6bbdb56b698a41ccdefc624a09d6beb0d38b5de0b2303ecaf4:    exists         |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:045fc1c20da893bef6d0ed64e92b243213b0cebcd478389573bdfb095e212a98:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ddf74a63f7d8b7d157e5db1a45675a58e304b4c1d425b05c28c835b987623395:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:4aa0ea1413d37a58615488592a0b827ea4b2e48fa5a77cf707d0e35f025e613f:    exists         |++++++++++++++++++++++++++++++++++++++| 
elapsed: 2.0 s

Tryning manually same command of kubespray playbook I got a big failure, but using nerdctl idempotent command it succeeds.

What did you expect to happen?

We would want to have a dirty quick way to override "image_save_command_on_localhost" variable, avoiding to use ansible external vars, if this is the only solution can be applied.

If not possible, could you please explain which is the cause of nerdctl/ctr command use instead of just one of them?

How can we reproduce it (as minimally and precisely as possible)?

Airgapped target cluster with ansible controller cache and registry pull-through.

OS

RHEL 9

Version of Ansible

ansible [core 2.18.16]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/python3_12_0/venvs/kubespray_main/lib64/python3.12/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = ./ansible
  python version = 3.12.1 (main, Nov 25 2025, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-4)] (/opt/python3_12_0/venvs/kubespray_main/bin/python3)
  jinja version = 3.1.6
  libyaml = True

Version of Python

Python 3.12.1

Version of Kubespray (commit)

2.31.0

Network plugin used

calico

Full inventory with variables

---
#####################################
upgrade_infra: false
reset_infra: false
#####################################

ansible_user: k8sansible

ansible_ssh_private_key_file: ./secrets/.ssh/k8sansiblersa

ansible_timeout: 120
ansible_become_timeout: 120
ansible_ssh_extra_args: >-
  -o ServerAliveInterval=30
  -o ServerAliveCountMax=10
  -o StrictHostKeyChecking=no
  -o ControlMaster=auto
  -o ControlPersist=30m
  -o ControlPath=/tmp/ansible-ssh-%h-%p-%r

# Debug var
unsafe_show_logs: true
################################

## KUBESPRAY vars
kubespray:
  python:
    version: "3.12.0"

download_run_once: true
download_localhost: true
download_force_cache: true # MUST be set to TRUE to use ansible CONTROLLER as CACHE
download_cache_dir: /opt/gitlab-runner/ansible/kubespray_cache

download_container: true

kube_image_repo: acr.azurecr.io/k8s
quay_image_repo: acr.azurecr.io/quayiok8s
docker_image_repo: acr.azurecr.io/dockeriok8s

################################

## K8S vars
bin_dir: /usr/bin

kube_version: 1.35.0
kube_network_plugin: calico
kube_log_level: 2
disable_ipv6: true
disable_ipv6_dns: true
disable_selinux: true
etcd_deployment_type: host
k8s_image_pull_policy: IfNotPresent

# Container management
container_manager: containerd
containerd_storage_dir: /opt/containerd/images
containerd_state_dir: /opt/containerd/state

containerd_registries_mirrors:
  - prefix: acr.azurecr.io
    mirrors:
      - host: https://acr.azurecr.io
        capabilities: ["pull", "resolve"]
        skip_verify: false
        header:
          Authorization: "Basic *************************************************************************************"

################################

## DNS CONFIGURATION
# NO CHANGES MUST be APLLIED to nodes /etc/resolv.conf cause company DNS servers cannot be overridden.
# They ARE MANDATORY to all commands underlying lookup to AD and DS for authentication and authorization of nodes and users.
resolvconf_mode: none

# Upstream DNS servers for early cluster deployment and fallback
# If an infrastructure service (outside of cluster) are defined through FQDN somewhere
# following DNS will be the only one used, otherwise timeout.
upstream_dns_servers:
  - 172.17.8.105

# CoreDNS static host entries for Azure ACR using dns_etchosts
# This is used by both CoreDNS and NodeLocalDNS
# dns_etchosts: |
#   10.163.68.69 acr.azurecr.io
#   10.163.68.68 acrfbkpronpci01.germanywestcentral.data.azurecr.io

# /etc/hosts custom entries for static host resolutions (for node-level resolution)
custom_etc_hosts:
  # Azure ACR - static IP resolution via /etc/hosts (Private Endpoint IP)
  - domain: "acr.azurecr.io"
    ip: "10.163.68.69"

################################

## ADDONS
dashboard_enabled: true
metrics_server_enabled: true
helm_enabled: true
cert_manager_enabled: true
# Override cert-manager image repo (default: quay.io/jetstack)
jetstack_image_repo: acr.azurecr.io/quayiok8s/jetstack
################################

## METALLB configuration
# EXAMPLE: https://github.com/TayoG/Kubernetes-kubespray/blob/master/docs/metallb.md
kube_proxy_strict_arp: true
metallb_enabled: true
metallb_speaker_enabled: true
metallb_namespace: metallb
metallb_config:
  address_pools:
    primary:
      ip_range:
        - 172.17.253.8-172.17.253.10
      metallb_auto_assign: true
  layer2:
    - primary

#abilitare InPlacePodVerticalScaling
kube_feature_gates:
  - InPlacePodVerticalScaling=true

# Kubernetes etcd encryption at rest
kube_encrypt_secret_data: true
kube_encryption_resources_dir: /etc/kubernetes/enc

kube_apiserver_encryption_provider_config: |
  apiVersion: apiserver.config.k8s.io/v1
  kind: EncryptionConfiguration
  resources:
    - resources:
        - secrets
      providers:
        - aesgcm:
            keys:
              - name: k8s-secrets-encryption
                secret: "Ih1XNQrTYa4zhy2tmoz5GPNOB+YJws7Dww+oIJ63sb4="
        - identity: {}
    - resources:
        - configmaps
      providers:
        - aesgcm:
            keys:
              - name: k8s-configmaps-encryption
                secret: "Zg7iTnJAtLzkVwzkddIjKq6FbtsGtuJ05SE13UumNIE="
        - identity: {}
    - resources:
        - '*.*'
      providers:
        - identity: {}

Command used to invoke ansible

$kubespray_home/bin/ansible-playbook -vv -i $inventory --become --become-user root $wd/../ansible/kubespray_setup.yml

Output of ansible run

... ... ...
2026-05-06T09:35:29.301182Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Prepare container download] ***
2026-05-06T09:35:29.301188Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:18
2026-05-06T09:35:29.301190Z 01O Wednesday 06 May 2026  11:35:12 +0200 (0:00:00.841)       0:20:19.627 ********* 
2026-05-06T09:35:29.301191Z 01O included: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/check_pull_required.yml for ctl01.tst, ctl02.tst, ctl03.tst, wrk01.tst, wrk02.tst, wrk03.tst, wrk04.tst
2026-05-06T09:35:29.301194Z 01O 
2026-05-06T09:35:29.301195Z 01O TASK [kubernetes_sigs.kubespray.download : Check_pull_required |  Generate a list of information about the images on a node] ***
2026-05-06T09:35:29.301196Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/check_pull_required.yml:4
2026-05-06T09:35:29.301199Z 01O Wednesday 06 May 2026  11:35:13 +0200 (0:00:01.171)       0:20:20.799 ********* 
2026-05-06T09:35:29.301200Z 01O ok: [ctl01.tst] => changed=false 
2026-05-06T09:35:29.301201Z 01O   cmd: |-
2026-05-06T09:35:29.301202Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301203Z 01O     ' ','
2026-05-06T09:35:29.301204Z 01O   delta: '0:00:00.109894'
2026-05-06T09:35:29.301205Z 01O   end: '2026-05-06 11:35:14.773023'
2026-05-06T09:35:29.301206Z 01O   msg: ''
2026-05-06T09:35:29.301207Z 01O   rc: 0
2026-05-06T09:35:29.301208Z 01O   start: '2026-05-06 11:35:14.663129'
2026-05-06T09:35:29.301209Z 01O   stderr: ''
2026-05-06T09:35:29.301210Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301211Z 01O   stdout: <none>:<none>,acr.azurecr.io/quayiok8s/metallb/controller:v0.13.9,<none>:<none>,acr.azurecr.io/quayiok8s/metallb/speaker:v0.13.9,<none>:<none>,acr.azurecr.io/k8s/metrics-server/metrics-server:v0.8.1,<none>:<none>,acr.azurecr.io/k8s/cpa/cluster-proportional-autoscaler:v1.8.8,<none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301216Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301217Z 01O ok: [ctl02.tst] => changed=false 
2026-05-06T09:35:29.301218Z 01O   cmd: |-
2026-05-06T09:35:29.301219Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301220Z 01O     ' ','
2026-05-06T09:35:29.301221Z 01O   delta: '0:00:00.119582'
2026-05-06T09:35:29.301222Z 01O   end: '2026-05-06 11:35:14.813282'
2026-05-06T09:35:29.301223Z 01O   msg: ''
2026-05-06T09:35:29.301224Z 01O   rc: 0
2026-05-06T09:35:29.301225Z 01O   start: '2026-05-06 11:35:14.693700'
2026-05-06T09:35:29.301226Z 01O   stderr: ''
2026-05-06T09:35:29.301227Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301228Z 01O   stdout: <none>:<none>,acr.azurecr.io/quayiok8s/metallb/controller:v0.13.9,<none>:<none>,acr.azurecr.io/quayiok8s/metallb/speaker:v0.13.9,<none>:<none>,acr.azurecr.io/k8s/metrics-server/metrics-server:v0.8.1,<none>:<none>,acr.azurecr.io/k8s/cpa/cluster-proportional-autoscaler:v1.8.8,<none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301242Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301243Z 01O ok: [ctl03.tst] => changed=false 
2026-05-06T09:35:29.301244Z 01O   cmd: |-
2026-05-06T09:35:29.301245Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301247Z 01O     ' ','
2026-05-06T09:35:29.301248Z 01O   delta: '0:00:00.103430'
2026-05-06T09:35:29.301248Z 01O   end: '2026-05-06 11:35:14.928665'
2026-05-06T09:35:29.301249Z 01O   msg: ''
2026-05-06T09:35:29.301250Z 01O   rc: 0
2026-05-06T09:35:29.301251Z 01O   start: '2026-05-06 11:35:14.825235'
2026-05-06T09:35:29.301252Z 01O   stderr: ''
2026-05-06T09:35:29.301253Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301254Z 01O   stdout: <none>:<none>,acr.azurecr.io/quayiok8s/metallb/controller:v0.13.9,<none>:<none>,acr.azurecr.io/quayiok8s/metallb/speaker:v0.13.9,<none>:<none>,acr.azurecr.io/k8s/metrics-server/metrics-server:v0.8.1,<none>:<none>,acr.azurecr.io/k8s/cpa/cluster-proportional-autoscaler:v1.8.8,<none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301259Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301260Z 01O ok: [wrk01.tst] => changed=false 
2026-05-06T09:35:29.301261Z 01O   cmd: |-
2026-05-06T09:35:29.301262Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301264Z 01O     ' ','
2026-05-06T09:35:29.301265Z 01O   delta: '0:00:00.074121'
2026-05-06T09:35:29.301266Z 01O   end: '2026-05-06 11:35:18.076264'
2026-05-06T09:35:29.301267Z 01O   msg: ''
2026-05-06T09:35:29.301267Z 01O   rc: 0
2026-05-06T09:35:29.301268Z 01O   start: '2026-05-06 11:35:18.002143'
2026-05-06T09:35:29.301269Z 01O   stderr: ''
2026-05-06T09:35:29.301270Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301271Z 01O   stdout: <none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301274Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301275Z 01O ok: [wrk02.tst] => changed=false 
2026-05-06T09:35:29.301276Z 01O   cmd: |-
2026-05-06T09:35:29.301277Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301279Z 01O     ' ','
2026-05-06T09:35:29.301280Z 01O   delta: '0:00:00.094081'
2026-05-06T09:35:29.301281Z 01O   end: '2026-05-06 11:35:18.269064'
2026-05-06T09:35:29.301282Z 01O   msg: ''
2026-05-06T09:35:29.301283Z 01O   rc: 0
2026-05-06T09:35:29.301283Z 01O   start: '2026-05-06 11:35:18.174983'
2026-05-06T09:35:29.301285Z 01O   stderr: ''
2026-05-06T09:35:29.301285Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301286Z 01O   stdout: <none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301294Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301295Z 01O ok: [wrk03.tst] => changed=false 
2026-05-06T09:35:29.301297Z 01O   cmd: |-
2026-05-06T09:35:29.301297Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301299Z 01O     ' ','
2026-05-06T09:35:29.301300Z 01O   delta: '0:00:00.086641'
2026-05-06T09:35:29.301301Z 01O   end: '2026-05-06 11:35:19.286911'
2026-05-06T09:35:29.301302Z 01O   msg: ''
2026-05-06T09:35:29.301303Z 01O   rc: 0
2026-05-06T09:35:29.301304Z 01O   start: '2026-05-06 11:35:19.200270'
2026-05-06T09:35:29.301305Z 01O   stderr: ''
2026-05-06T09:35:29.301305Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301306Z 01O   stdout: <none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301310Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301311Z 01O ok: [wrk04.tst] => changed=false 
2026-05-06T09:35:29.301312Z 01O   cmd: |-
2026-05-06T09:35:29.301313Z 01O     /usr/bin/nerdctl -n k8s.io images --format '{{ .Repository }}:{{ .Tag }}' 2>/dev/null | grep -v ^:$ | tr '
2026-05-06T09:35:29.301314Z 01O     ' ','
2026-05-06T09:35:29.301315Z 01O   delta: '0:00:00.111601'
2026-05-06T09:35:29.301316Z 01O   end: '2026-05-06 11:35:19.554065'
2026-05-06T09:35:29.301317Z 01O   msg: ''
2026-05-06T09:35:29.301318Z 01O   rc: 0
2026-05-06T09:35:29.301319Z 01O   start: '2026-05-06 11:35:19.442464'
2026-05-06T09:35:29.301320Z 01O   stderr: ''
2026-05-06T09:35:29.301321Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301322Z 01O   stdout: <none>:<none>,acr.azurecr.io/k8s/dns/k8s-dns-node-cache:1.25.0,<none>:<none>,acr.azurecr.io/k8s/coredns/coredns:v1.12.4,<none>:<none>,acr.azurecr.io/k8s/pause:3.10.1,<none>:<none>,acr.azurecr.io/quayiok8s/calico/kube-controllers:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/cni:v3.31.5,<none>:<none>,acr.azurecr.io/quayiok8s/calico/node:v3.31.5,
2026-05-06T09:35:29.301325Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301326Z 01O 
2026-05-06T09:35:29.301327Z 01O TASK [kubernetes_sigs.kubespray.download : Check_pull_required | Set pull_required if the desired image is not yet loaded] ***
2026-05-06T09:35:29.301328Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/check_pull_required.yml:11
2026-05-06T09:35:29.301330Z 01O Wednesday 06 May 2026  11:35:19 +0200 (0:00:06.360)       0:20:27.160 ********* 
2026-05-06T09:35:29.301332Z 01O ok: [ctl01.tst] => changed=false 
2026-05-06T09:35:29.301333Z 01O   ansible_facts:
2026-05-06T09:35:29.301334Z 01O     pull_required: true
2026-05-06T09:35:29.301335Z 01O ok: [ctl02.tst] => changed=false 
2026-05-06T09:35:29.301336Z 01O   ansible_facts:
2026-05-06T09:35:29.301337Z 01O     pull_required: true
2026-05-06T09:35:29.301338Z 01O ok: [ctl03.tst] => changed=false 
2026-05-06T09:35:29.301339Z 01O   ansible_facts:
2026-05-06T09:35:29.301340Z 01O     pull_required: true
2026-05-06T09:35:29.301341Z 01O ok: [wrk01.tst] => changed=false 
2026-05-06T09:35:29.301342Z 01O   ansible_facts:
2026-05-06T09:35:29.301343Z 01O     pull_required: true
2026-05-06T09:35:29.301344Z 01O ok: [wrk02.tst] => changed=false 
2026-05-06T09:35:29.301345Z 01O   ansible_facts:
2026-05-06T09:35:29.301346Z 01O     pull_required: true
2026-05-06T09:35:29.301352Z 01O ok: [wrk03.tst] => changed=false 
2026-05-06T09:35:29.301353Z 01O   ansible_facts:
2026-05-06T09:35:29.301354Z 01O     pull_required: true
2026-05-06T09:35:29.301355Z 01O ok: [wrk04.tst] => changed=false 
2026-05-06T09:35:29.301356Z 01O   ansible_facts:
2026-05-06T09:35:29.301357Z 01O     pull_required: true
2026-05-06T09:35:29.301357Z 01O 
2026-05-06T09:35:29.301358Z 01O TASK [kubernetes_sigs.kubespray.download : Check_pull_required | Check that the local digest sha256 corresponds to the given image tag] ***
2026-05-06T09:35:29.301360Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/check_pull_required.yml:17
2026-05-06T09:35:29.301362Z 01O Wednesday 06 May 2026  11:35:20 +0200 (0:00:00.896)       0:20:28.057 ********* 
2026-05-06T09:35:29.301363Z 01O skipping: [ctl01.tst] => changed=false 
2026-05-06T09:35:29.301364Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301366Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301367Z 01O skipping: [ctl02.tst] => changed=false 
2026-05-06T09:35:29.301368Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301369Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301370Z 01O skipping: [ctl03.tst] => changed=false 
2026-05-06T09:35:29.301371Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301372Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301373Z 01O skipping: [wrk01.tst] => changed=false 
2026-05-06T09:35:29.301375Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301376Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301377Z 01O skipping: [wrk02.tst] => changed=false 
2026-05-06T09:35:29.301378Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301379Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301380Z 01O skipping: [wrk03.tst] => changed=false 
2026-05-06T09:35:29.301381Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301382Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301383Z 01O skipping: [wrk04.tst] => changed=false 
2026-05-06T09:35:29.301384Z 01O   false_condition: not pull_required
2026-05-06T09:35:29.301385Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301387Z 01O 
2026-05-06T09:35:29.301387Z 01O TASK [kubernetes_sigs.kubespray.download : debug] ******************************
2026-05-06T09:35:29.301389Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:23
2026-05-06T09:35:29.301391Z 01O Wednesday 06 May 2026  11:35:21 +0200 (0:00:00.531)       0:20:28.588 ********* 
2026-05-06T09:35:29.301392Z 01O ok: [ctl01.tst] => 
2026-05-06T09:35:29.301393Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301395Z 01O ok: [ctl02.tst] => 
2026-05-06T09:35:29.301396Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301397Z 01O ok: [ctl03.tst] => 
2026-05-06T09:35:29.301398Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301400Z 01O ok: [wrk01.tst] => 
2026-05-06T09:35:29.301401Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301402Z 01O ok: [wrk02.tst] => 
2026-05-06T09:35:29.301403Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301404Z 01O ok: [wrk03.tst] => 
2026-05-06T09:35:29.301405Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301411Z 01O ok: [wrk04.tst] => 
2026-05-06T09:35:29.301412Z 01O   msg: 'Pull acr.azurecr.io/k8s/kube-apiserver:v1.35.0 required is: True'
2026-05-06T09:35:29.301414Z 01O 
2026-05-06T09:35:29.301414Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Determine if image is in cache] ***
2026-05-06T09:35:29.301416Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:26
2026-05-06T09:35:29.301418Z 01O Wednesday 06 May 2026  11:35:22 +0200 (0:00:00.853)       0:20:29.441 ********* 
2026-05-06T09:35:29.301419Z 01O ok: [ctl01.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301420Z 01O   stat:
2026-05-06T09:35:29.301421Z 01O     exists: false
2026-05-06T09:35:29.301422Z 01O ok: [ctl02.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301423Z 01O   stat:
2026-05-06T09:35:29.301424Z 01O     exists: false
2026-05-06T09:35:29.301425Z 01O ok: [ctl03.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301426Z 01O   stat:
2026-05-06T09:35:29.301427Z 01O     exists: false
2026-05-06T09:35:29.301428Z 01O ok: [wrk01.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301429Z 01O   stat:
2026-05-06T09:35:29.301430Z 01O     exists: false
2026-05-06T09:35:29.301431Z 01O ok: [wrk02.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301432Z 01O   stat:
2026-05-06T09:35:29.301433Z 01O     exists: false
2026-05-06T09:35:29.301434Z 01O ok: [wrk03.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301435Z 01O   stat:
2026-05-06T09:35:29.301436Z 01O     exists: false
2026-05-06T09:35:29.301437Z 01O ok: [wrk04.tst -> localhost] => changed=false 
2026-05-06T09:35:29.301438Z 01O   stat:
2026-05-06T09:35:29.301439Z 01O     exists: false
2026-05-06T09:35:29.301440Z 01O 
2026-05-06T09:35:29.301441Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Set fact indicating if image is in cache] ***
2026-05-06T09:35:29.301443Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:41
2026-05-06T09:35:29.301444Z 01O Wednesday 06 May 2026  11:35:22 +0200 (0:00:00.748)       0:20:30.190 ********* 
2026-05-06T09:35:29.301446Z 01O ok: [ctl01.tst] => changed=false 
2026-05-06T09:35:29.301447Z 01O   ansible_facts:
2026-05-06T09:35:29.301448Z 01O     image_is_cached: false
2026-05-06T09:35:29.301449Z 01O ok: [ctl02.tst] => changed=false 
2026-05-06T09:35:29.301450Z 01O   ansible_facts:
2026-05-06T09:35:29.301451Z 01O     image_is_cached: false
2026-05-06T09:35:29.301452Z 01O ok: [ctl03.tst] => changed=false 
2026-05-06T09:35:29.301453Z 01O   ansible_facts:
2026-05-06T09:35:29.301454Z 01O     image_is_cached: false
2026-05-06T09:35:29.301455Z 01O ok: [wrk01.tst] => changed=false 
2026-05-06T09:35:29.301456Z 01O   ansible_facts:
2026-05-06T09:35:29.301457Z 01O     image_is_cached: false
2026-05-06T09:35:29.301458Z 01O ok: [wrk02.tst] => changed=false 
2026-05-06T09:35:29.301460Z 01O   ansible_facts:
2026-05-06T09:35:29.301460Z 01O     image_is_cached: false
2026-05-06T09:35:29.301461Z 01O ok: [wrk03.tst] => changed=false 
2026-05-06T09:35:29.301462Z 01O   ansible_facts:
2026-05-06T09:35:29.301463Z 01O     image_is_cached: false
2026-05-06T09:35:29.301464Z 01O ok: [wrk04.tst] => changed=false 
2026-05-06T09:35:29.301466Z 01O   ansible_facts:
2026-05-06T09:35:29.301466Z 01O     image_is_cached: false
2026-05-06T09:35:29.301468Z 01O 
2026-05-06T09:35:29.301468Z 01O TASK [kubernetes_sigs.kubespray.download : Stop if image not in cache on ansible host when download_force_cache=true] ***
2026-05-06T09:35:29.301475Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:49
2026-05-06T09:35:29.301477Z 01O Wednesday 06 May 2026  11:35:23 +0200 (0:00:00.877)       0:20:31.067 ********* 
2026-05-06T09:35:29.301478Z 01O skipping: [ctl01.tst] => changed=false 
2026-05-06T09:35:29.301479Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301480Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301482Z 01O skipping: [ctl02.tst] => changed=false 
2026-05-06T09:35:29.301483Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301484Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301485Z 01O skipping: [ctl03.tst] => changed=false 
2026-05-06T09:35:29.301486Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301487Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301488Z 01O skipping: [wrk01.tst] => changed=false 
2026-05-06T09:35:29.301489Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301490Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301491Z 01O skipping: [wrk02.tst] => changed=false 
2026-05-06T09:35:29.301493Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301494Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301495Z 01O skipping: [wrk03.tst] => changed=false 
2026-05-06T09:35:29.301496Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301497Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301498Z 01O skipping: [wrk04.tst] => changed=false 
2026-05-06T09:35:29.301500Z 01O   false_condition: not download_run_once
2026-05-06T09:35:29.301501Z 01O   skip_reason: Conditional result was False
2026-05-06T09:35:29.301502Z 01O 
2026-05-06T09:35:29.301503Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Download image if required] ***
2026-05-06T09:35:29.301504Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:57
2026-05-06T09:35:29.301506Z 01O Wednesday 06 May 2026  11:35:24 +0200 (0:00:00.506)       0:20:31.574 ********* 
2026-05-06T09:35:29.301507Z 01O changed: [ctl01.tst -> localhost] => changed=true 
2026-05-06T09:35:29.301509Z 01O   attempts: 1
2026-05-06T09:35:29.301510Z 01O   cmd:
2026-05-06T09:35:29.301510Z 01O   - /usr/bin/nerdctl
2026-05-06T09:35:29.301511Z 01O   - -n
2026-05-06T09:35:29.301512Z 01O   - k8s.io
2026-05-06T09:35:29.301513Z 01O   - pull
2026-05-06T09:35:29.301514Z 01O   - --quiet
2026-05-06T09:35:29.301515Z 01O   - acr.azurecr.io/k8s/kube-apiserver:v1.35.0
2026-05-06T09:35:29.301516Z 01O   delta: '0:00:02.248485'
2026-05-06T09:35:29.301517Z 01O   end: '2026-05-06 11:35:26.745802'
2026-05-06T09:35:29.301518Z 01O   msg: ''
2026-05-06T09:35:29.301519Z 01O   rc: 0
2026-05-06T09:35:29.301520Z 01O   start: '2026-05-06 11:35:24.497317'
2026-05-06T09:35:29.301521Z 01O   stderr: ''
2026-05-06T09:35:29.301522Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301523Z 01O   stdout: ''
2026-05-06T09:35:29.301524Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301525Z 01O 
2026-05-06T09:35:29.301526Z 01O TASK [kubernetes_sigs.kubespray.download : Download_container | Save and compress image] ***
2026-05-06T09:35:29.301527Z 01O task path: /opt/gitlab-runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/collections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/download_container.yml:72
2026-05-06T09:35:29.301529Z 01O Wednesday 06 May 2026  11:35:26 +0200 (0:00:02.615)       0:20:34.190 ********* 
2026-05-06T09:35:29.301531Z 01O [DEPRECATION WARNING]: Conditional result at location /opt/gitlab-
2026-05-06T09:35:29.301537Z 01O runner/builds/bKpUow5MT/0/components/company-it/devopstool/kubespray/ansible/co
2026-05-06T09:35:29.301539Z 01O llections/ansible_collections/kubernetes_sigs/kubespray/roles/download/tasks/do
2026-05-06T09:35:29.301540Z 01O wnload_container.yml 77:20 was of type 'AnsibleUnsafeText'. Conditional results
2026-05-06T09:35:29.301541Z 01O  should only be True or False. The result was interpreted as True. This feature
2026-05-06T09:35:29.301543Z 01O  will be removed in version 2.19. Deprecation warnings can be disabled by 
2026-05-06T09:35:29.301544Z 01O setting deprecation_warnings=False in ansible.cfg.
2026-05-06T09:35:29.301545Z 01O fatal: [ctl01.tst -> localhost]: FAILED! => changed=true 
2026-05-06T09:35:29.301547Z 01O   cmd: /usr/bin/ctr -n k8s.io image export --platform linux/amd64 /opt/gitlab-runner/ansible/kubespray_cache/images/acr.azurecr.io_k8s_kube-apiserver_v1.35.0.tar acr.azurecr.io/k8s/kube-apiserver:v1.35.0
2026-05-06T09:35:29.301549Z 01O   delta: '0:00:00.043001'
2026-05-06T09:35:29.301550Z 01O   end: '2026-05-06 11:35:27.125362'
2026-05-06T09:35:29.301551Z 01O   failed_when_result: true
2026-05-06T09:35:29.301552Z 01O   msg: non-zero return code
2026-05-06T09:35:29.301553Z 01O   rc: 1
2026-05-06T09:35:29.301553Z 01O   start: '2026-05-06 11:35:27.082361'
2026-05-06T09:35:29.301554Z 01O   stderr: 'ctr: failed to get reader: content digest sha256:045fc1c20da893bef6d0ed64e92b243213b0cebcd478389573bdfb095e212a98: not found'
2026-05-06T09:35:29.301556Z 01O   stderr_lines: <omitted>
2026-05-06T09:35:29.301557Z 01O   stdout: ''
2026-05-06T09:35:29.301558Z 01O   stdout_lines: <omitted>
2026-05-06T09:35:29.301559Z 01O 
2026-05-06T09:35:29.301560Z 01O PLAY RECAP *********************************************************************
2026-05-06T09:35:29.301561Z 01O ctl01.tst   : ok=554  changed=79   unreachable=0    failed=1    skipped=298  rescued=0    ignored=1   
2026-05-06T09:35:29.301563Z 01O ctl02.tst   : ok=447  changed=39   unreachable=0    failed=0    skipped=260  rescued=0    ignored=0   
2026-05-06T09:35:29.301565Z 01O ctl03.tst   : ok=447  changed=39   unreachable=0    failed=0    skipped=260  rescued=0    ignored=0   
2026-05-06T09:35:29.301566Z 01O wrk01.tst   : ok=334  changed=29   unreachable=0    failed=0    skipped=214  rescued=0    ignored=0   
2026-05-06T09:35:29.301568Z 01O wrk02.tst   : ok=334  changed=29   unreachable=0    failed=0    skipped=214  rescued=0    ignored=0   
2026-05-06T09:35:29.301569Z 01O wrk03.tst   : ok=334  changed=29   unreachable=0    failed=0    skipped=214  rescued=0    ignored=0   
2026-05-06T09:35:29.301571Z 01O wrk04.tst   : ok=334  changed=29   unreachable=0    failed=0    skipped=214  rescued=0    ignored=0   
2026-05-06T09:35:29.301572Z 01O localhost                  : ok=0    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

Anything else we need to know

No response

Contributor guide