77 lines
2.1 KiB
Bash
77 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# GENERATED — component={{COMPONENT}} bundle={{BUNDLE_ID}} op=install
|
|
set -euo pipefail
|
|
|
|
BUNDLE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
LOG="${BUNDLE_DIR}/install.log"
|
|
NAMESPACE="{{NAMESPACE}}"
|
|
COMPONENT="{{COMPONENT}}"
|
|
STEP="init"
|
|
|
|
exec > >(tee -a "$LOG") 2>&1
|
|
|
|
_kubectl() {
|
|
if command -v kubectl >/dev/null 2>&1; then
|
|
command kubectl "$@"
|
|
elif command -v k0s >/dev/null 2>&1; then
|
|
k0s kubectl "$@"
|
|
else
|
|
echo "ERROR: no kubectl or k0s binary found on host" >&2
|
|
exit 127
|
|
fi
|
|
}
|
|
|
|
_fail() {
|
|
local rc=$?
|
|
echo "FAILED step=${STEP} line=${BASH_LINENO[0]} rc=${rc}" >&2
|
|
exit "${rc}"
|
|
}
|
|
trap _fail ERR
|
|
|
|
echo "[install] component=${COMPONENT} bundle={{BUNDLE_ID}} namespace=${NAMESPACE} started=$(date -Iseconds)"
|
|
|
|
STEP="precheck-kubectl"
|
|
_kubectl version --client=true >/dev/null
|
|
|
|
STEP="precheck-credential"
|
|
if ! _kubectl get secret "${COMPONENT}-credentials" --namespace "${NAMESPACE}" >/dev/null 2>&1; then
|
|
echo "ERROR: secret ${COMPONENT}-credentials missing in namespace ${NAMESPACE}." >&2
|
|
echo " The caller (deploy.nu) must create it via stdin BEFORE invoking install.sh." >&2
|
|
exit 2
|
|
fi
|
|
|
|
STEP="apply-manifests"
|
|
for manifest in {{MANIFESTS_ORDER}}; do
|
|
STEP="apply-${manifest%.yaml}"
|
|
echo "[install] applying ${manifest}"
|
|
_kubectl apply -f "${BUNDLE_DIR}/${manifest}"
|
|
done
|
|
|
|
STEP="wait-for-pods"
|
|
tries=0
|
|
while [ "$tries" -lt 30 ]; do
|
|
count=$(_kubectl get pods --namespace "${NAMESPACE}" --selector "app.kubernetes.io/name=${COMPONENT}" -o name 2>/dev/null | wc -l | tr -d ' ')
|
|
[ "$count" -gt 0 ] && break
|
|
tries=$((tries + 1))
|
|
sleep 2
|
|
done
|
|
if [ "$count" -eq 0 ]; then
|
|
echo "ERROR: no pods matched app.kubernetes.io/name=${COMPONENT} after 60s" >&2
|
|
exit 4
|
|
fi
|
|
|
|
STEP="wait-ready"
|
|
_kubectl wait pod \
|
|
--namespace "${NAMESPACE}" \
|
|
--selector "app.kubernetes.io/name=${COMPONENT}" \
|
|
--for=condition=Ready \
|
|
--timeout=240s
|
|
|
|
if [ -f "${BUNDLE_DIR}/post-install.sh" ]; then
|
|
STEP="post-install"
|
|
echo "[install] running post-install.sh"
|
|
bash "${BUNDLE_DIR}/post-install.sh"
|
|
fi
|
|
|
|
STEP="done"
|
|
echo "[install] OK finished=$(date -Iseconds)"
|