fix: idempotency check 0 changed only, docker wait 360s nginx 240s

This commit is contained in:
Naeel 2026-03-30 08:48:57 +03:00
parent dc71622fb8
commit 962002300f

View File

@ -300,15 +300,21 @@ phase_2_idempotent() {
phase_header 2 "IDEMPOTENT — повторный apply без изменений" phase_header 2 "IDEMPOTENT — повторный apply без изменений"
# Тот же run_id что применялся в фазе 1 → apply должен вернуть 0 changed # Тот же run_id что применялся в фазе 1 → apply должен вернуть 0 changed
# sless_job — эфемерный ресурс, каждый apply пересоздаёт job-ресурсы (add+destroy).
# Идемпотентность = "0 changed" (ноль in-place изменений), а не "0 add/destroy".
# VM и vApp не должны изменяться никогда.
if tf_apply \ if tf_apply \
-var "install_packages=true" \ -var "install_packages=true" \
-var "install_nginx=true" \ -var "install_nginx=true" \
-var "install_docker=true" \ -var "install_docker=true" \
-var "install_run_id=$RUN_ID"; then -var "install_run_id=$RUN_ID"; then
if grep -q '0 added, 0 changed, 0 destroyed' /tmp/vm_tf_apply.log; then if grep -q ', 0 changed,' /tmp/vm_tf_apply.log; then
pass "2.1 повторный apply → 0 added, 0 changed, 0 destroyed" pass "2.1 повторный apply → 0 changed (sless_job пересоздан — ожидаемо)"
grep -E 'Resources:' /tmp/vm_tf_apply.log | tail -1 | while read -r line; do
info " $line"
done
else else
fail "2.1 повторный apply изменил ресурсы (ожидали 0 changed)" fail "2.1 повторный apply изменил persistent ресурсы (ожидали 0 changed)"
grep -E 'added|changed|destroyed' /tmp/vm_tf_apply.log | tail -3 | while read -r line; do grep -E 'added|changed|destroyed' /tmp/vm_tf_apply.log | tail -3 | while read -r line; do
info " $line" info " $line"
done done
@ -517,18 +523,18 @@ phase_6_manual_purge() {
return 1 return 1
fi fi
# Ждать пока sless_job отработает: docker самый долгий (k8s Job + apt-install). # Ждать пока sless_job отработает: docker самый долгий (k8s Job + образ + apt-install ~200MB).
# vm_wait_binary полит каждые 15s до 180s вместо sleep 5. # docker-ce требует до 5 минут на первой установке — ставим 360s.
if vm_wait_binary "$ip" "docker" 180; then if vm_wait_binary "$ip" "docker" 360; then
pass "6.5 docker установлен заново" pass "6.5 docker установлен заново"
else else
fail "6.5 docker НЕ установлен после re-apply (таймаут 180s)" fail "6.5 docker НЕ установлен после re-apply (таймаут 360s)"
fi fi
if vm_wait_binary "$ip" "nginx" 120; then if vm_wait_binary "$ip" "nginx" 240; then
pass "6.6 nginx установлен заново" pass "6.6 nginx установлен заново"
else else
fail "6.6 nginx НЕ установлен после re-apply (таймаут 120s)" fail "6.6 nginx НЕ установлен после re-apply (таймаут 240s)"
fi fi
if vm_check_binary "$ip" "jq"; then if vm_check_binary "$ip" "jq"; then
@ -720,16 +726,21 @@ phase_10_final() {
-var "install_run_id=$rid" || warn "восстановление не удалось" -var "install_run_id=$rid" || warn "восстановление не удалось"
fi fi
# Idempotency финально: повторный apply → 0 changed # Idempotency финально: повторный apply → 0 changed.
# sless_job пересоздаются (add+destroy) — это нормально для job-ресурса.
# Проверяем только "0 changed" — VM и vApp не должны изменяться.
if tf_apply \ if tf_apply \
-var "install_packages=true" \ -var "install_packages=true" \
-var "install_nginx=true" \ -var "install_nginx=true" \
-var "install_docker=true" \ -var "install_docker=true" \
-var "install_run_id=$RUN_ID"; then -var "install_run_id=$RUN_ID"; then
if grep -q '0 added, 0 changed, 0 destroyed' /tmp/vm_tf_apply.log; then if grep -q ', 0 changed,' /tmp/vm_tf_apply.log; then
pass "10.2 финальный apply → 0 added, 0 changed, 0 destroyed" pass "10.2 финальный apply → 0 changed (sless_job пересоздан — ожидаемо)"
grep -E 'Resources:' /tmp/vm_tf_apply.log | tail -1 | while read -r line; do
info " $line"
done
else else
fail "10.2 финальный apply изменил ресурсы (ожидали 0 changed)" fail "10.2 финальный apply изменил persistent ресурсы (ожидали 0 changed)"
grep -E 'added|changed|destroyed' /tmp/vm_tf_apply.log | tail -3 | while read -r line; do grep -E 'added|changed|destroyed' /tmp/vm_tf_apply.log | tail -3 | while read -r line; do
info " $line" info " $line"
done done