mirror of
https://github.com/cozystack/cozystack.git
synced 2026-10-29 08:07:33 +09:00
test(e2e): bump app HR-Ready waits for Flux v2.8 kstatus
Flux helm-controller v1.5.0 (shipped in Flux v2.8) replaced the legacy
Helm readiness logic with kstatus-based health checking, which polls
Deployment/StatefulSet/Service status and waits for kstatus to assess
rollout-ready. This typically adds 10-30s of latency between resource
apply and HR condition Ready=True compared to v2.7.
Our per-app bats tests had `kubectl wait hr/... --for=condition=ready
--timeout=` budgets of 20s, 30s, 60s, 100s — sized for v2.7's faster
readiness flip and previously masked by the 3x retry on Run E2E tests
(dropped in #2558). Under v2.8 with no retry, every app that runs after
the first few hit its HR wait timeout exactly, surfacing as 13 of 16
test failures on PR #2619.
Standardise on 5m for HR Ready across all app tests. Tight enough to
catch genuine bring-up failures within the per-app job budget, loose
enough to absorb kstatus dispatch jitter on a management cluster that
is concurrently reconciling multiple tenant-test HRs.
Post-HR-Ready checks for app-specific resources (StatefulSet/Service/
PVC/operator CRs) remain — for CR-based apps kstatus only observes
that the chart applied, not that the operator finished. Audit of
which of those are actually redundant under v2.8 kstatus is queued
as a follow-up.
Also bumps the 10s "kamajicontrolplane appears" wait in
run-kubernetes.sh to 2m, and the kubernetes-addon HR Ready loop from
1m to 5m for the same reason.
Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
(cherry picked from commit 5ef02ee7b3)
This commit is contained in:
13 files changed
+21
-21
No files matched your search
@@ -19,7 +19,7 @@ spec:
|
||||
EOF
|
||||
|
||||
# Wait for the bucket to be ready
|
||||
kubectl -n tenant-test wait hr bucket-${name} --timeout=100s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr bucket-${name} --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get bucketclaims.objectstorage.k8s.io bucket-${name} >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait bucketclaims.objectstorage.k8s.io bucket-${name} --timeout=300s --for=jsonpath='{.status.bucketReady}'
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get bucketaccesses.objectstorage.k8s.io bucket-${name}-admin >/dev/null 2>&1; do sleep 2; done"
|
||||
|
||||
@@ -38,7 +38,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr clickhouse-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr clickhouse-$name --timeout=20s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr clickhouse-$name --timeout=5m --for=condition=ready
|
||||
timeout 180 sh -ec "until kubectl -n tenant-test get svc chendpoint-clickhouse-$name -o jsonpath='{.spec.ports[*].port}' | grep -q '8123 9000'; do sleep 10; done"
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get statefulset.apps/chi-clickhouse-$name-clickhouse-0-0 >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait statefulset.apps/chi-clickhouse-$name-clickhouse-0-0 --timeout=120s --for=jsonpath='{.status.replicas}'=1
|
||||
|
||||
@@ -26,7 +26,7 @@ dump_diagnostics() {
|
||||
# resource, so poll for existence first.
|
||||
wait_etcd_hr_ready() {
|
||||
timeout 60 sh -ec 'until kubectl -n tenant-test get hr/etcd >/dev/null 2>&1; do sleep 2; done'
|
||||
kubectl -n tenant-test wait hr/etcd --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr/etcd --timeout=5m --for=condition=ready
|
||||
}
|
||||
|
||||
@test "Create Etcd" {
|
||||
|
||||
@@ -21,8 +21,8 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr ${name} >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr ${name} --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name}-system --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name} --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name}-system --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get deploy -l app.kubernetes.io/instance=${name}-system -o jsonpath='{.items[0].status.readyReplicas}' | grep -q '1'; do sleep 5; done"
|
||||
|
||||
kubectl -n tenant-test delete externaldns.apps.cozystack.io ${name}
|
||||
@@ -46,8 +46,8 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr ${name} >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr ${name} --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name}-system --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name} --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait hr ${name}-system --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get deploy -l app.kubernetes.io/instance=${name}-system -o jsonpath='{.items[0].status.readyReplicas}' | grep -q '1'; do sleep 5; done"
|
||||
|
||||
kubectl -n tenant-test delete externaldns.apps.cozystack.io ${name}
|
||||
|
||||
@@ -41,7 +41,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr $release >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr $release --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr $release --timeout=5m --for=condition=ready
|
||||
|
||||
# Wait for COSI to provision bucket
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get bucketclaims.objectstorage.k8s.io $release-registry >/dev/null 2>&1; do sleep 2; done"
|
||||
|
||||
@@ -42,7 +42,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr kafka-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr kafka-$name --timeout=30s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr kafka-$name --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get kafkas $name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl wait kafkas -n tenant-test $name --timeout=300s --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get pvc data-kafka-$name-zookeeper-0; do sleep 10; done"
|
||||
|
||||
@@ -38,7 +38,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr mariadb-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr mariadb-$name --timeout=30s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr mariadb-$name --timeout=5m --for=condition=ready
|
||||
timeout 80 sh -ec "until kubectl -n tenant-test get svc mariadb-$name -o jsonpath='{.spec.ports[0].port}' | grep -q '3306'; do sleep 10; done"
|
||||
timeout 80 sh -ec "until kubectl -n tenant-test get endpoints mariadb-$name -o jsonpath='{.subsets[*].addresses[*].ip}' | grep -q '[0-9]'; do sleep 10; done"
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get statefulset.apps/mariadb-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
|
||||
@@ -30,7 +30,7 @@ EOF
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr mongodb-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
# Wait for HelmRelease
|
||||
kubectl -n tenant-test wait hr mongodb-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr mongodb-$name --timeout=5m --for=condition=ready
|
||||
# Wait for MongoDB service (port 27017)
|
||||
timeout 120 sh -ec "until kubectl -n tenant-test get svc mongodb-$name-rs0 -o jsonpath='{.spec.ports[0].port}' | grep -q '27017'; do sleep 10; done"
|
||||
# Wait for endpoints
|
||||
|
||||
@@ -21,8 +21,8 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr openbao-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr openbao-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr openbao-$name-system --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr openbao-$name --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait hr openbao-$name-system --timeout=5m --for=condition=ready
|
||||
|
||||
# Wait for container to be started (pod Running does not guarantee container is ready for exec on slow CI)
|
||||
if ! timeout 120 sh -ec "until kubectl -n tenant-test get pod openbao-$name-0 --output jsonpath='{.status.containerStatuses[0].started}' 2>/dev/null | grep -q true; do sleep 5; done"; then
|
||||
|
||||
@@ -43,7 +43,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr postgres-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr postgres-$name --timeout=100s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr postgres-$name --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get job.batch postgres-$name-init-job >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait job.batch postgres-$name-init-job --timeout=50s --for=condition=Complete
|
||||
timeout 40 sh -ec "until kubectl -n tenant-test get svc postgres-$name-r -o jsonpath='{.spec.ports[0].port}' | grep -q '5432'; do sleep 10; done"
|
||||
|
||||
@@ -20,8 +20,8 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr qdrant-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr qdrant-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr qdrant-$name-system --timeout=120s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr qdrant-$name --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait hr qdrant-$name-system --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get sts qdrant-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait sts qdrant-$name --timeout=90s --for=jsonpath='{.status.readyReplicas}'=1
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get pvc qdrant-storage-qdrant-$name-0 >/dev/null 2>&1; do sleep 2; done"
|
||||
|
||||
@@ -21,7 +21,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr redis-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr redis-$name --timeout=20s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr redis-$name --timeout=5m --for=condition=ready
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get pvc redisfailover-persistent-data-rfr-redis-$name-0 >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait pvc redisfailover-persistent-data-rfr-redis-$name-0 --timeout=50s --for=jsonpath='{.status.phase}'=Bound
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get deploy rfs-redis-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
|
||||
@@ -28,7 +28,7 @@ EOF
|
||||
# Wait for the operator to materialise the HelmRelease before kubectl wait
|
||||
# kicks in (kubectl wait errors immediately if the object does not exist yet).
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr vm-disk-$name >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr vm-disk-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr vm-disk-$name --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait dv vm-disk-$name --timeout=250s --for=condition=ready
|
||||
kubectl -n tenant-test wait pvc vm-disk-$name --timeout=200s --for=jsonpath='{.status.phase}'=Bound
|
||||
# Drop the VMDisk so the next test starts from a clean slate. Each test
|
||||
@@ -63,7 +63,7 @@ spec:
|
||||
storageClass: replicated
|
||||
EOF
|
||||
timeout 60 sh -ec "until kubectl -n tenant-test get hr vm-disk-$diskName >/dev/null 2>&1; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr vm-disk-$diskName --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr vm-disk-$diskName --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test wait dv vm-disk-$diskName --timeout=250s --for=condition=ready
|
||||
kubectl -n tenant-test wait pvc vm-disk-$diskName --timeout=200s --for=jsonpath='{.status.phase}'=Bound
|
||||
kubectl apply -f - <<EOF
|
||||
@@ -104,9 +104,9 @@ EOF
|
||||
# routinely takes 30-60s under runner load; the previous 20s was unrealistic
|
||||
# and produced flakes. 120s is a comfortable upper bound for nested virt.
|
||||
timeout 120 sh -ec "until kubectl -n tenant-test get vmi vm-instance-$name -o jsonpath='{.status.interfaces[0].ipAddress}' | grep -q '[0-9]'; do sleep 2; done"
|
||||
kubectl -n tenant-test wait hr vm-instance-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait hr vm-instance-$name --timeout=5m --for=condition=ready
|
||||
# VM ready follows IP assignment closely; 60s gives buffer for the qemu-guest-agent.
|
||||
kubectl -n tenant-test wait vm vm-instance-$name --timeout=60s --for=condition=ready
|
||||
kubectl -n tenant-test wait vm vm-instance-$name --timeout=5m --for=condition=ready
|
||||
kubectl -n tenant-test delete vminstances.apps.cozystack.io $name --ignore-not-found --timeout=3m
|
||||
kubectl -n tenant-test delete vmdisks.apps.cozystack.io $diskName --ignore-not-found --timeout=3m
|
||||
}
|
||||
Reference in new issue
Block a user