mirror of
https://github.com/dredx/prole.git
synced 2026-09-27 11:24:30 +00:00
- Tighten Cluster Environment screen layout; switch Service/Prod to kubectx context selection; keep namespace and key controls on one line; ensure Repair button remains reachable. - Add UI layout regression test to render with large mock data and assert key widgets remain visible and console is scrollable. - Make kubeconfig generation deterministic under tests by avoiding overwriting cert-based kubeconfigs; write token sidecar kubeconfig when needed. - Update common-services init scripts and add k3s/Helm deployment bits (svc-check, Kong/CertMgr tasks).
155 lines
4.1 KiB
Bash
Executable File
155 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# init_certmgr.sh
|
|
# Purpose:
|
|
# - Install or manage cert-manager for ACME certificates
|
|
# - Provide start/stop/status/restart/update actions
|
|
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
|
|
# Shared option parsing for common core scripts
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/common_core_lib.sh"
|
|
|
|
# Inject default config if not provided
|
|
_has_config=0
|
|
for _arg in "$@"; do
|
|
[[ "$_arg" == "-c" || "$_arg" == "--config" || "$_arg" == -c=* || "$_arg" == --config=* ]] && _has_config=1
|
|
done
|
|
if [[ $_has_config -eq 0 && -f "$SCRIPT_DIR/../conf/prole.cfg" ]]; then
|
|
set -- "-c" "$SCRIPT_DIR/../conf/prole.cfg" "$@"
|
|
fi
|
|
unset _has_config _arg
|
|
|
|
common_core_preparse_config "$@"
|
|
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/prole_cfg.sh"
|
|
|
|
set -- "${COMMON_CORE_ARGS[@]}"
|
|
common_core_parse_args "$@"
|
|
|
|
if [[ -z "${PROLE_MODE:-}" ]]; then
|
|
export PROLE_MODE="k3s"
|
|
fi
|
|
|
|
if [[ "${COMMON_CORE_HELP:-0}" == 1 ]]; then
|
|
common_core_usage "$0"
|
|
exit 0
|
|
fi
|
|
|
|
if [[ -n "${COMMON_CORE_PARSE_ERROR:-}" ]]; then
|
|
echo "ERROR: ${COMMON_CORE_PARSE_ERROR}" >&2
|
|
common_core_usage "$0"
|
|
exit 2
|
|
fi
|
|
|
|
ACTION="$COMMON_CORE_ACTION"
|
|
CERTMGR_NAMESPACE="$(common_core_resolve_namespace "default")"
|
|
common_core_apply_namespace "$CERTMGR_NAMESPACE"
|
|
|
|
CERTMGR_VERSION="${CERTMGR_VERSION:-v1.14.6}"
|
|
CERTMGR_RELEASE_URL="https://github.com/cert-manager/cert-manager/releases/download/${CERTMGR_VERSION}/cert-manager.yaml"
|
|
|
|
usage() {
|
|
cat <<USAGE
|
|
Usage: $0 [--mode MODE] [-n NAMESPACE] [${COMMON_CORE_ACTIONS//|/|}] [-c conf/prole.cfg]
|
|
|
|
Actions:
|
|
start Install cert-manager (CRDs + controller)
|
|
stop Remove cert-manager resources
|
|
status Show cert-manager deployment status
|
|
restart Restart cert-manager deployments
|
|
update Install or update cert-manager resources
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
ensure_tools() {
|
|
for t in kubectl curl; do
|
|
command -v "$t" >/dev/null || { echo "Missing required tool: $t" >&2; exit 1; }
|
|
done
|
|
}
|
|
|
|
ensure_namespace() {
|
|
if ! kubectl get namespace "$CERTMGR_NAMESPACE" >/dev/null 2>&1; then
|
|
echo "Creating namespace '$CERTMGR_NAMESPACE' ..."
|
|
kubectl create namespace "$CERTMGR_NAMESPACE" >/dev/null 2>&1 || true
|
|
fi
|
|
}
|
|
|
|
_patch_manifest_namespace() {
|
|
local ns="$1"
|
|
if [[ "$ns" == "cert-manager" ]]; then
|
|
cat
|
|
return 0
|
|
fi
|
|
|
|
awk -v ns="$ns" '
|
|
$1=="kind:" && $2=="Namespace" {in_ns=1}
|
|
in_ns && $1=="name:" && $2=="cert-manager" {print "name: " ns; in_ns=0; next}
|
|
$1=="namespace:" && $2=="cert-manager" {print "namespace: " ns; next}
|
|
{print}
|
|
'
|
|
}
|
|
|
|
_apply_manifest() {
|
|
curl -fsSL "$CERTMGR_RELEASE_URL" | _patch_manifest_namespace "$CERTMGR_NAMESPACE" | kubectl apply -f -
|
|
}
|
|
|
|
_delete_manifest() {
|
|
curl -fsSL "$CERTMGR_RELEASE_URL" | _patch_manifest_namespace "$CERTMGR_NAMESPACE" | kubectl delete -f - --ignore-not-found=true
|
|
}
|
|
|
|
wait_rollout() {
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout status deployment/cert-manager --timeout=180s
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout status deployment/cert-manager-cainjector --timeout=180s
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout status deployment/cert-manager-webhook --timeout=180s
|
|
}
|
|
|
|
status() {
|
|
echo "=== cert-manager deployments (${CERTMGR_NAMESPACE}) ==="
|
|
kubectl -n "$CERTMGR_NAMESPACE" get deploy cert-manager cert-manager-cainjector cert-manager-webhook 2>/dev/null || echo "No deployments found"
|
|
echo ""
|
|
echo "=== cert-manager pods (${CERTMGR_NAMESPACE}) ==="
|
|
kubectl -n "$CERTMGR_NAMESPACE" get pods 2>/dev/null || echo "No pods found"
|
|
}
|
|
|
|
restart() {
|
|
echo "Restarting cert-manager deployments in namespace '$CERTMGR_NAMESPACE' ..."
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout restart deployment/cert-manager
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout restart deployment/cert-manager-cainjector
|
|
kubectl -n "$CERTMGR_NAMESPACE" rollout restart deployment/cert-manager-webhook
|
|
wait_rollout
|
|
}
|
|
|
|
action_update() {
|
|
ensure_tools
|
|
ensure_namespace
|
|
_apply_manifest
|
|
wait_rollout
|
|
}
|
|
|
|
case "$ACTION" in
|
|
start|initialize|update|reload)
|
|
action_update
|
|
;;
|
|
stop)
|
|
ensure_tools
|
|
_delete_manifest
|
|
;;
|
|
status)
|
|
ensure_tools
|
|
status
|
|
;;
|
|
restart)
|
|
ensure_tools
|
|
restart
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|