58 lines
1.6 KiB
Cheetah
58 lines
1.6 KiB
Cheetah
|
|
#!/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)"
|