mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 11:03:59 +00:00
- Moved files from 'prole/' subdirectory to root level or appropriate subdirectories (tests, authority, infrastructure) to flatten the project structure. - Updated 'install.py' and initialization scripts in 'etc/' to reflect the new directory layout. - Added 'etc/repair_pipeline.sh' for automated pipeline repairs. - Updated configuration files including 'conf/prole.cfg' and 'env.sh'. - Integrated ArgoCD manifests in 'k8s/argocd/'. - Updated 'prole-app' environment and properties. - Moved and updated test scripts for better organization and reliability. - Added 'tests/silent_install_test.sh' for automated installation testing.
164 lines
4.8 KiB
Bash
Executable File
164 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# init_registry.sh
|
|
# Purpose:
|
|
# - Deploy ArgoCD into Kubernetes (replaces in-cluster Docker registry)
|
|
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
|
|
# Load environment and config via prole_cfg.sh
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/prole_cfg.sh"
|
|
|
|
if [[ -z "${PROLE_SERVICE:-}" ]]; then
|
|
echo "ERROR: PROLE_SERVICE is not defined. Provide PROLE_HOME/env.sh or ~/.prole/env.sh" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ACTION=""
|
|
NAMESPACE_OVERRIDE=""
|
|
|
|
if [[ -d "$SCRIPT_DIR/../k8s/argocd" ]]; then
|
|
ARGOCD_MANIFEST_DIR="$SCRIPT_DIR/../k8s/argocd"
|
|
elif [[ -n "${PROLE_HOME:-}" && -d "$PROLE_HOME/k8s/argocd" ]]; then
|
|
ARGOCD_MANIFEST_DIR="$PROLE_HOME/k8s/argocd"
|
|
else
|
|
ARGOCD_MANIFEST_DIR="$SCRIPT_DIR/../k8s/argocd"
|
|
fi
|
|
|
|
ARGOCD_MANIFEST_FILE=${ARGOCD_MANIFEST_FILE:-"$ARGOCD_MANIFEST_DIR/install.yaml"}
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage: init_registry.sh [-n|--namespace NS] <start|stop|status|restart|initialize|update|reload>
|
|
|
|
Deploys ArgoCD into the target namespace (common services layer).
|
|
Note: The local Docker registry (port 5000) is managed separately.
|
|
EOF
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-m|--mode)
|
|
shift
|
|
prole_set_mode "${1:-}"
|
|
;;
|
|
-m=*|--mode=*)
|
|
prole_set_mode "${1#*=}"
|
|
;;
|
|
-n|--namespace)
|
|
shift
|
|
if [[ -z "${1:-}" ]]; then
|
|
echo "ERROR: -n/--namespace requires a value" >&2
|
|
exit 2
|
|
fi
|
|
NAMESPACE_OVERRIDE="$1"
|
|
;;
|
|
-n=*|--namespace=*)
|
|
NAMESPACE_OVERRIDE="${1#*=}"
|
|
;;
|
|
start|stop|status|restart|initialize|update|reload)
|
|
ACTION="$1"
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
if [[ -z "$ACTION" && "$1" != -* ]]; then
|
|
ACTION="$1"
|
|
else
|
|
echo "Unknown argument: $1" >&2
|
|
usage
|
|
exit 2
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ -n "$NAMESPACE_OVERRIDE" ]]; then
|
|
ARGOCD_NAMESPACE="$NAMESPACE_OVERRIDE"
|
|
elif [[ -n "${ARGOCD_NAMESPACE:-}" ]]; then
|
|
ARGOCD_NAMESPACE="$ARGOCD_NAMESPACE"
|
|
elif [[ -n "${SERVICE_NAMESPACE:-}" ]]; then
|
|
ARGOCD_NAMESPACE="$SERVICE_NAMESPACE"
|
|
elif [[ -n "${NAMESPACE:-}" ]]; then
|
|
ARGOCD_NAMESPACE="$NAMESPACE"
|
|
else
|
|
ARGOCD_NAMESPACE="default"
|
|
fi
|
|
|
|
export ARGOCD_NAMESPACE
|
|
export NAMESPACE="$ARGOCD_NAMESPACE"
|
|
|
|
ARGOCD_LABEL_SELECTOR=${ARGOCD_LABEL_SELECTOR:-"app.kubernetes.io/part-of=argocd"}
|
|
ARGOCD_SERVER_SERVICE=${ARGOCD_SERVER_SERVICE:-argocd-server}
|
|
ARGOCD_PORT_FORWARD_LOCAL=${ARGOCD_PORT_FORWARD_LOCAL:-8081}
|
|
ARGOCD_PORT_FORWARD_REMOTE=${ARGOCD_PORT_FORWARD_REMOTE:-80}
|
|
|
|
ensure_tools() {
|
|
command -v kubectl >/dev/null || { echo "Missing required tool: kubectl" >&2; exit 1; }
|
|
}
|
|
|
|
ensure_namespace() {
|
|
if ! kubectl get namespace "$ARGOCD_NAMESPACE" >/dev/null 2>&1; then
|
|
echo "Creating namespace '$ARGOCD_NAMESPACE' ..."
|
|
kubectl create namespace "$ARGOCD_NAMESPACE" >/dev/null 2>&1 || true
|
|
fi
|
|
}
|
|
|
|
render_manifest() {
|
|
if [[ ! -f "$ARGOCD_MANIFEST_FILE" ]]; then
|
|
echo "ERROR: ArgoCD manifest not found: $ARGOCD_MANIFEST_FILE" >&2
|
|
exit 1
|
|
fi
|
|
sed "s|\\${ARGOCD_NAMESPACE}|$ARGOCD_NAMESPACE|g" "$ARGOCD_MANIFEST_FILE"
|
|
}
|
|
|
|
apply_k8s() {
|
|
echo "Applying ArgoCD manifest to namespace '$ARGOCD_NAMESPACE' ..."
|
|
render_manifest | kubectl apply --server-side --force-conflicts --field-manager=prole-installer --validate=false -n "$ARGOCD_NAMESPACE" -f -
|
|
kubectl rollout status deploy/argocd-server -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status deploy/argocd-repo-server -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status deploy/argocd-dex-server -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status deploy/argocd-applicationset-controller -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status deploy/argocd-notifications-controller -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status deploy/argocd-redis -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
kubectl rollout status statefulset/argocd-application-controller -n "$ARGOCD_NAMESPACE" --timeout=180s || true
|
|
}
|
|
|
|
delete_k8s() {
|
|
echo "Removing ArgoCD resources from namespace '$ARGOCD_NAMESPACE' ..."
|
|
render_manifest | kubectl delete -n "$ARGOCD_NAMESPACE" -f - --ignore-not-found
|
|
}
|
|
|
|
status_k8s() {
|
|
kubectl -n "$ARGOCD_NAMESPACE" get deploy,statefulset,svc -l "$ARGOCD_LABEL_SELECTOR" 2>/dev/null || true
|
|
kubectl -n "$ARGOCD_NAMESPACE" get pods -l "$ARGOCD_LABEL_SELECTOR" 2>/dev/null || true
|
|
}
|
|
|
|
case "${ACTION:-}" in
|
|
start|initialize|update|reload|restart)
|
|
ensure_tools
|
|
ensure_namespace
|
|
apply_k8s
|
|
prole_register_port_forward "argocd" "$ARGOCD_NAMESPACE" "svc/${ARGOCD_SERVER_SERVICE}" \
|
|
"$ARGOCD_PORT_FORWARD_LOCAL" "$ARGOCD_PORT_FORWARD_REMOTE" "0.0.0.0" "TCP" "ArgoCD"
|
|
;;
|
|
stop)
|
|
ensure_tools
|
|
delete_k8s
|
|
;;
|
|
status)
|
|
ensure_tools
|
|
status_k8s
|
|
;;
|
|
*)
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|