provisioning-catalog/components/private_gateway/cluster/private_gateway-lib.sh

62 lines
1.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# Methods library for private_gateway — sourced by install-private_gateway.sh
_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" >&2; exit 127
fi
}
_require_env() {
local var="$1"
if [ -z "${!var:-}" ]; then
echo "ERROR: required variable $var is not set" >&2; exit 1
fi
}
# --validate=false skips kubectl CLIENT-side schema validation only; the API
# server still validates on admission. Required because applying the Cilium
# CiliumLoadBalancerIPPool (cilium.io/v2) trips a client-side openapi fetch that
# 404s on k0s ("failed to download openapi"), which would abort the plan.
_plan_apply() {
local file="$1"
local path="$SCRIPT_DIR/manifests/${file}.yaml"
[ -f "$path" ] || { echo " [skip] $file.yaml not in manifests/"; return 0; }
_kubectl apply --validate=false -f "$path"
}
_plan_apply_skip() {
local file="$1"
local path="$SCRIPT_DIR/manifests/${file}.yaml"
[ -f "$path" ] || { echo " [skip] $file.yaml not in manifests/"; return 0; }
if _kubectl get -f "$path" >/dev/null 2>&1; then
echo " [skip] $file already exists in cluster"
return 0
fi
_kubectl apply --validate=false -f "$path"
}
_plan_delete() {
local file="$1"
local path="$SCRIPT_DIR/manifests/${file}.yaml"
[ -f "$path" ] || { echo " [skip] $file.yaml not in manifests/"; return 0; }
_kubectl delete -f "$path" --ignore-not-found
}
_method_health() {
local gw_status
gw_status=$(_kubectl get gateway "$PGW_NAME" \
--namespace "$PGW_NAMESPACE" \
-o jsonpath='{.status.conditions[?(@.type=="Programmed")].status}' 2>/dev/null || true)
if [ "$gw_status" = "True" ]; then
echo "HEALTHY: gateway/$PGW_NAME is Programmed"
else
echo "UNHEALTHY: gateway/$PGW_NAME not Programmed (status=${gw_status:-unknown})" >&2
exit 1
fi
}