#!/usr/bin/env bash # Regression test: OpenBao restart should auto-recycle a Released synology-iscsi PV with a stale # claimRef when the PVC is Pending and rollout is stuck beyond the initial timeout. set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) KNOE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd) SOURCE_ETC_DIR="$KNOE_HOME/etc" SOURCE_ETC_LIB_SHELL_DIR="$KNOE_HOME/etc/lib/shell" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT WORK_DIR="$TMP_DIR/work" BIN_DIR="$TMP_DIR/bin" mkdir -p "$WORK_DIR/etc/lib/shell" "$WORK_DIR/conf" "$BIN_DIR" cp "$SOURCE_ETC_DIR/init_openbao.sh" "$WORK_DIR/etc/init_openbao.sh" cp "$SOURCE_ETC_DIR/common_core_lib.sh" "$WORK_DIR/etc/common_core_lib.sh" cp "$SOURCE_ETC_LIB_SHELL_DIR/common_core_lib.sh" "$WORK_DIR/etc/lib/shell/common_core_lib.sh" cp "$SOURCE_ETC_DIR/knoe_cfg.sh" "$WORK_DIR/etc/knoe_cfg.sh" chmod +x "$WORK_DIR/etc/init_openbao.sh" cat < "$WORK_DIR/conf/knoe.cfg" [globals] knoe.home = $WORK_DIR knoe.mode = k3s NAMESPACE = test-ns SERVICE_NAMESPACE = knoe-system EOF export KUBECTL_LOG="$TMP_DIR/kubectl.log" cat <<'EOF' > "$BIN_DIR/kubectl" #!/usr/bin/env bash set -euo pipefail printf '%s\n' "$*" >> "${KUBECTL_LOG}" # Skip global options like --request-timeout=... while [[ "${1:-}" == --* ]]; do shift done sub="${1:-}" case "$sub" in config) case "${2:-}" in current-context) printf '%s' "default" exit 0 ;; use-context|get-contexts) exit 0 ;; esac exit 0 ;; get) # statefulset existence check if [[ "$*" == *"get statefulset/openbao"* ]]; then exit 0 fi # PVC existence + phase/uid if [[ "$*" == *"get pvc data-openbao-0"*"-o jsonpath={.status.phase}"* ]]; then printf '%s' "Pending" exit 0 fi if [[ "$*" == *"get pvc data-openbao-0"*"-o jsonpath={.metadata.uid}"* ]]; then printf '%s' "newuid" exit 0 fi if [[ "$*" == *"get pvc data-openbao-0"* ]]; then exit 0 fi # PV list for recycle helper if [[ "$*" == *"get pv"*"-o jsonpath="* ]]; then printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ "synology-iscsi-d001-openbao" "synology-iscsi" "Retain" "Released" "knoe-system" "data-openbao-0" "olduid" exit 0 fi exit 0 ;; rollout) if [[ "$*" == *"rollout status"*"--timeout=0s"* ]]; then exit 1 fi exit 0 ;; scale) exit 0 ;; patch) exit 0 ;; *) exit 0 ;; esac EOF chmod +x "$BIN_DIR/kubectl" export PATH="$BIN_DIR:$PATH" export KNOE_HOME="$WORK_DIR" export KNOE_CONF="$WORK_DIR/conf" export KNOE_MODE="k3s" export PVC_REPAIR_WAIT_TIMEOUT="0s" if "$WORK_DIR/etc/init_openbao.sh" -n "knoe-system" restart >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr"; then : else echo "FAILURE: init_openbao.sh restart exited non-zero" >&2 cat "$TMP_DIR/stderr" >&2 exit 1 fi if ! grep -q "patch pv synology-iscsi-d001-openbao" "$KUBECTL_LOG"; then echo "FAILURE: expected PV claimRef recycle (kubectl patch pv) was not invoked" >&2 echo "--- kubectl log ---" >&2 sed -n '1,200p' "$KUBECTL_LOG" >&2 || true exit 1 fi echo "SUCCESS"