|
91 | 91 | # Validate status.desiredProcessGroups field |
92 | 92 | timeout 60 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.desiredProcessGroups}' | grep -q '^[0-9][0-9]*$'; do sleep 10; done" |
93 | 93 |
|
94 | | - # Validate status.generations.reconciled field |
95 | | - timeout 60 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.generations.reconciled}' | grep -q '^[0-9][0-9]*$'; do sleep 10; done" |
96 | | - |
97 | | - # Validate status.hasListenIPsForAllPods field |
98 | | - timeout 60 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.hasListenIPsForAllPods}' | grep -q 'true'; do sleep 10; done" |
99 | | - |
100 | | - # Validate comprehensive status.health fields |
101 | | - timeout 60 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.health.fullReplication}' | grep -q 'true'; do sleep 10; done" |
102 | | - timeout 60 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.health.healthy}' | grep -q 'true'; do sleep 10; done" |
| 94 | + # Validate status.generations.reconciled field. |
| 95 | + # The operator only stamps generations.reconciled after every process has |
| 96 | + # held its role for minimumUptimeSecondsForBounce (60s, see |
| 97 | + # packages/apps/foundationdb/templates/cluster.yaml), so this is structurally |
| 98 | + # the last status field to converge. It needs at least the same budget as the |
| 99 | + # earlier health.available gate (300s), not the short 60s ceiling. |
| 100 | + timeout 300 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.generations.reconciled}' | grep -q '^[0-9][0-9]*$'; do sleep 10; done" |
| 101 | + |
| 102 | + # Validate status.hasListenIPsForAllPods field. A bounce restarts fdbserver |
| 103 | + # in-place, so pods and their listen IPs do not churn and this usually settles |
| 104 | + # before the reconciled gate. Widened to 300s for a conservative ceiling |
| 105 | + # consistent with the surrounding gates; the 300s is headroom, not because |
| 106 | + # this field is as late-converging as generations.reconciled. |
| 107 | + timeout 300 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.hasListenIPsForAllPods}' | grep -q 'true'; do sleep 10; done" |
| 108 | + |
| 109 | + # Validate comprehensive status.health fields. fullReplication and healthy |
| 110 | + # settle only once the cluster is fully reconciled (after the post-bounce |
| 111 | + # uptime gate), so they share the same 300s budget rather than the short 60s |
| 112 | + # ceiling. |
| 113 | + timeout 300 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.health.fullReplication}' | grep -q 'true'; do sleep 10; done" |
| 114 | + timeout 300 sh -ec "until kubectl -n tenant-test get foundationdbclusters.apps.foundationdb.org foundationdb-$name -o jsonpath='{.status.health.healthy}' | grep -q 'true'; do sleep 10; done" |
103 | 115 |
|
104 | 116 | # Verify security context is applied correctly (non-root user) |
105 | 117 | storage_pod=$(kubectl -n tenant-test get pods -l foundationdb.org/fdb-cluster-name=foundationdb-$name,foundationdb.org/fdb-process-class=storage --no-headers | head -n1 | awk '{print $1}') |
|
0 commit comments