#!/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)"