provisioning-catalog/components/_renderer/common-templates/install.sh.tmpl

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)"