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

58 lines
1.6 KiB
Cheetah
Raw Normal View History

#!/bin/bash
# GENERATED — component={{COMPONENT}} bundle={{BUNDLE_ID}} op=update
# Re-applies workload manifests only. Preserves namespace, pvc, secret.
set -euo pipefail
BUNDLE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG="${BUNDLE_DIR}/update.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 "[update] component=${COMPONENT} bundle={{BUNDLE_ID}} namespace=${NAMESPACE} started=$(date -Iseconds)"
STEP="precheck-namespace"
_kubectl get namespace "${NAMESPACE}" >/dev/null
STEP="apply-workload"
for manifest in {{MANIFESTS_ORDER}}; do
# Skip namespace and pvc — update must preserve durable slices
case "${manifest}" in
namespace.yaml|pvc.yaml) continue ;;
esac
STEP="apply-${manifest%.yaml}"
echo "[update] applying ${manifest}"
_kubectl apply -f "${BUNDLE_DIR}/${manifest}"
done
STEP="rollout"
for kind in statefulset deployment; do
for name in $(_kubectl get "${kind}" --namespace "${NAMESPACE}" --selector "app.kubernetes.io/name=${COMPONENT}" -o name 2>/dev/null || true); do
STEP="rollout-${name//\//-}"
_kubectl rollout status --namespace "${NAMESPACE}" "${name}" --timeout=240s
done
done
STEP="done"
echo "[update] OK finished=$(date -Iseconds)"