Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 31 additions & 7 deletions local-setup/scripts/check-environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ COL='\033[92m'
RED='\033[91m'
COL_RES='\033[0m'

check_local_cluster() {
# Check if local cluster is already running (non-kind cluster)
if kubectl cluster-info &> /dev/null; then
# Check if it's NOT a kind cluster
local context=$(kubectl config current-context)
if [[ ! "$context" =~ ^kind- ]]; then
echo -e "${COL}[$(date '+%H:%M:%S')] Local cluster already running (context: $context), using existing ${COL_RES}"
return 0 # Return 0 to indicate non-kind cluster exists
fi
fi
return 1 # Return 1 to indicate no local cluster exists
}

check_kind_cluster() {
# Check if kind cluster is already running
if [ $(kind get clusters | grep -c platform-mesh) -gt 0 ]; then
Expand Down Expand Up @@ -144,18 +157,28 @@ run_environment_checks() {
echo ""

local checks_failed=0
local has_local_cluster=false

# Check container runtime dependency (Docker or Podman)
if ! check_container_runtime_dependency; then
checks_failed=$((checks_failed + 1))
# Check if local cluster exists first
if check_local_cluster; then
has_local_cluster=true
echo -e "${COL}[$(date '+%H:%M:%S')] ✅ Local cluster detected, skipping kind and container runtime checks${COL_RES}"
fi

# Check kind dependency
if ! check_kind_dependency; then
checks_failed=$((checks_failed + 1))
# Only check container runtime and kind if no local cluster exists
if [ "$has_local_cluster" = false ]; then
# Check container runtime dependency (Docker or Podman)
if ! check_container_runtime_dependency; then
checks_failed=$((checks_failed + 1))
fi

# Check kind dependency
if ! check_kind_dependency; then
checks_failed=$((checks_failed + 1))
fi
fi

# Check mkcert dependency
# Check mkcert dependency (always needed)
if ! setup_mkcert_command; then
checks_failed=$((checks_failed + 1))
fi
Expand All @@ -179,6 +202,7 @@ run_environment_checks() {
}

# Export functions so they can be used by the main script
export -f check_local_cluster
export -f check_kind_cluster
export -f check_kind_dependency
export -f check_docker_dependency
Expand Down
79 changes: 52 additions & 27 deletions local-setup/scripts/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,20 +49,27 @@ check_wsl_compatibility
# Run environment checks
run_environment_checks

# Check if kind cluster is already running, if not create it
if ! check_kind_cluster; then
if [ -d "$SCRIPT_DIR/certs" ]; then
echo -e "${COL}[$(date '+%H:%M:%S')] Clearing existing certs directory ${COL_RES}"
rm -rf "$SCRIPT_DIR/certs"
fi
echo -e "${COL}[$(date '+%H:%M:%S')] Creating kind cluster ${COL_RES}"
$SCRIPT_DIR/../scripts/gen-certs.sh

if [ "$CACHED" = true ]; then
echo -e "${COL}[$(date '+%H:%M:%S')] Creating kind cluster with cached image ${COL_RES}"
kind create cluster --config $SCRIPT_DIR/../kind/kind-config-cached.yaml --name platform-mesh --image=$KINDEST_VERSION
else
kind create cluster --config $SCRIPT_DIR/../kind/kind-config.yaml --name platform-mesh --image=$KINDEST_VERSION
# Check if local cluster exists first, then check kind cluster
USE_LOCAL_CLUSTER=false
if check_local_cluster; then
echo -e "${COL}[$(date '+%H:%M:%S')] Using existing local cluster, bypassing kind cluster creation ${COL_RES}"
USE_LOCAL_CLUSTER=true
else
# Check if kind cluster is already running, if not create it
if ! check_kind_cluster; then
if [ -d "$SCRIPT_DIR/certs" ]; then
echo -e "${COL}[$(date '+%H:%M:%S')] Clearing existing certs directory ${COL_RES}"
rm -rf "$SCRIPT_DIR/certs"
fi
echo -e "${COL}[$(date '+%H:%M:%S')] Creating kind cluster ${COL_RES}"
$SCRIPT_DIR/../scripts/gen-certs.sh

if [ "$CACHED" = true ]; then
echo -e "${COL}[$(date '+%H:%M:%S')] Creating kind cluster with cached image ${COL_RES}"
kind create cluster --config $SCRIPT_DIR/../kind/kind-config-cached.yaml --name platform-mesh --image=$KINDEST_VERSION
else
kind create cluster --config $SCRIPT_DIR/../kind/kind-config.yaml --name platform-mesh --image=$KINDEST_VERSION
fi
fi
fi

Expand Down Expand Up @@ -91,18 +98,36 @@ helm repo add traefik https://traefik.github.io/charts
helm upgrade --install --namespace=default \
traefik-crds traefik/traefik-crds --version 1.12.0

helm upgrade --install --namespace=default \
--set="experimental.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.experimentalChannel=true" \
--set="gatewayClass.enabled=true" \
--set="service.type=NodePort" \
--set="ports.websecure.nodePort=31000" \
--set="ports.websecure.exposedPort=8443" \
--set="gateway.enabled=false" \
--skip-crds \
--set="service.spec.clusterIP=10.96.188.4" \
traefik traefik/traefik --version 37.3.0
# Set service type based on cluster type
if [ "$USE_LOCAL_CLUSTER" = true ]; then
SERVICE_TYPE="LoadBalancer"
echo -e "${COL}[$(date '+%H:%M:%S')] Using LoadBalancer service type for local cluster ${COL_RES}"
helm upgrade --install --namespace=default \
--set="experimental.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.experimentalChannel=true" \
--set="gatewayClass.enabled=true" \
--set="service.type=${SERVICE_TYPE}" \
--set="ports.websecure.exposedPort=8443" \
--set="gateway.enabled=false" \
--skip-crds \
traefik traefik/traefik --version 37.3.0
else
SERVICE_TYPE="NodePort"
echo -e "${COL}[$(date '+%H:%M:%S')] Using NodePort service type for kind cluster ${COL_RES}"
helm upgrade --install --namespace=default \
--set="experimental.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.enabled=true" \
--set="providers.kubernetesGateway.experimentalChannel=true" \
--set="gatewayClass.enabled=true" \
--set="service.type=${SERVICE_TYPE}" \
--set="ports.websecure.exposedPort=8443" \
--set="ports.websecure.nodePort=31000" \
--set="gateway.enabled=false" \
--skip-crds \
--set="service.spec.clusterIP=10.96.188.4" \
traefik traefik/traefik --version 37.3.0
fi

echo -e "${COL}[$(date '+%H:%M:%S')] Starting deployments ${COL_RES}"

Expand All @@ -126,7 +151,7 @@ echo -e "${COL}[$(date '+%H:%M:%S')] OCM Controller and Platform Mesh ${COL_RES}
kubectl apply -k $SCRIPT_DIR/../kustomize/base

echo -e "${COL}[$(date '+%H:%M:%S')] Creating necessary secrets ${COL_RES}"
kubectl create secret tls iam-authorization-webhook-webhook-ca -n platform-mesh-system --key $SCRIPT_DIR/../webhook-config/ca.key --cert $SCRIPT_DIR/../webhook-config/ca.crt --dry-run=client -o yaml | kubectl apply -f -
kubectl create secret tls iam-authorization-webhook-webhook-ca -n platform-mesh-system --key $SCRIPT_DIR/certs/cert.key --cert $SCRIPT_DIR/certs/cert.crt --dry-run=client -o yaml | kubectl apply -f -
kubectl create secret generic keycloak-admin -n platform-mesh-system --from-literal=secret=admin --dry-run=client -o yaml | kubectl apply -f -
kubectl create secret generic grafana-admin-secret -n observability --from-literal=admin-user=admin --from-literal=admin-password=admin --dry-run=client -o yaml | kubectl apply -f -
kubectl -n observability create secret generic slack-webhook-secret --from-literal=slack_webhook_url=https://hooks.slack.com/services/TEAMID/SERVICEID/TOKEN || echo "secret slack-webhook-secret already exists, skipping creation"
Expand Down