42 lines
1.8 KiB
YAML
42 lines
1.8 KiB
YAML
# 可复用:按顺序对多个 label selector 执行 kubectl wait pod --for=condition=ready。
|
||
# 必填:verify_kubectl_wait_items(列表元素含 selector、timeout_s)
|
||
# 可选:verify_kubectl_wait_namespace(默认 default)、k3s_kubeconfig
|
||
- name: Assert verify_kubectl_wait_items for kubectl-wait-pods-ready
|
||
ansible.builtin.assert:
|
||
that:
|
||
- verify_kubectl_wait_items is defined
|
||
- verify_kubectl_wait_items | length > 0
|
||
fail_msg: "verify_common kubectl-wait-pods-ready:需设置非空 verify_kubectl_wait_items"
|
||
|
||
- name: kubectl wait pods ready (verify_common)
|
||
ansible.builtin.shell: |
|
||
set -euo pipefail
|
||
KCFG="{{ k3s_kubeconfig | default('/etc/rancher/k3s/k3s.yaml') }}"
|
||
ns="{{ verify_kubectl_wait_namespace | default('default') }}"
|
||
{% for item in verify_kubectl_wait_items %}
|
||
echo "[OC-ASSERT] assertion=kubectl_wait_pod_ready selector={{ item.selector | quote }} namespace=${ns} timeout={{ item.timeout_s | int }}s"
|
||
ok=0
|
||
for attempt in 1 2 3 4 5 6 7 8; do
|
||
set +e
|
||
out=$(KUBECONFIG="$KCFG" kubectl wait --for=condition=ready pod \
|
||
-l "{{ item.selector }}" -n "$ns" --timeout={{ item.timeout_s | int }}s 2>&1)
|
||
rc=$?
|
||
set -e
|
||
if [ "$rc" -eq 0 ]; then ok=1; break; fi
|
||
if echo "$out" | grep -qE 'NotFound|not found'; then
|
||
echo "[OC-ASSERT] assertion=kubectl_wait_pod_ready selector={{ item.selector | quote }} retry=${attempt} reason=pod_churn_notfound"
|
||
sleep 3
|
||
continue
|
||
fi
|
||
echo "$out" >&2
|
||
exit "$rc"
|
||
done
|
||
if [ "$ok" != "1" ]; then
|
||
echo "[OC-ASSERT] assertion=kubectl_wait_pod_ready selector={{ item.selector | quote }} result=fail reason=exhausted_retries"
|
||
exit 1
|
||
fi
|
||
{% endfor %}
|
||
args:
|
||
executable: /bin/bash
|
||
changed_when: false
|