#!/bin/bash set -e set -o pipefail # Parse arguments SKIP_INSTALL=false while [[ $# -gt 0 ]]; do case $1 in --skip-install) SKIP_INSTALL=true shift ;; -h|--help) echo "Usage: $0 [options]" echo "" echo "Install Kubernetes cluster services (Phase 4)." echo "" echo "Options:" echo " --skip-install Generate service configs but skip installation" echo " -h, --help Show this help message" echo "" echo "This script will:" echo " - Generate cluster service configurations" echo " - Install core services (MetalLB, Traefik, cert-manager, etc.)" echo " - Each service will prompt for its required configuration" echo "" echo "Prerequisites:" echo " - Run 'wild-setup-cluster' to set up cluster infrastructure" echo " - Kubernetes cluster must be running and kubectl configured" exit 0 ;; -*) echo "Unknown option $1" echo "Usage: $0 [options]" echo "Use --help for full usage information" exit 1 ;; *) echo "Unexpected argument: $1" echo "Usage: $0 [options]" echo "Use --help for full usage information" exit 1 ;; esac done # Initialize Wild Cloud environment if [ -z "${WC_ROOT}" ]; then print "WC_ROOT is not set." exit 1 else source "${WC_ROOT}/scripts/common.sh" init_wild_env fi # Check cluster configuration if [ -z "$(wild-config "cluster.name")" ]; then print_error "Cluster configuration is missing" print_info "Run 'wild-setup-cluster' first to configure cluster settings" exit 1 fi print_header "Wild Cloud services setup" # Define services in dependency order SERVICES_TO_INSTALL=( "metallb" "longhorn" "traefik" "coredns" "cert-manager" "externaldns" "kubernetes-dashboard" "nfs" "docker-registry" ) # Set up services one by one INSTALLED_COUNT=0 FAILED_COUNT=0 if [ "${SKIP_INSTALL}" = false ]; then for service in "${SERVICES_TO_INSTALL[@]}"; do echo "" print_header "Setting up service: $service" if wild-service-setup "$service" --fetch; then print_success "$service setup completed" INSTALLED_COUNT=$((INSTALLED_COUNT + 1)) else print_error "$service setup failed" FAILED_COUNT=$((FAILED_COUNT + 1)) # Stop on first failure for easier debugging break fi done if [ $FAILED_COUNT -eq 0 ]; then SERVICES_INSTALLED=true print_success "All $INSTALLED_COUNT services set up successfully!" else print_error "Service setup stopped after $service failure" print_info "Fix the issue and resume with: wild-service-setup $service --fetch" print_info "Then continue with remaining services or re-run wild-setup-services" exit 1 fi else print_info "Skipping cluster services installation (--skip-install specified)" print_info "You can install them later with:" for service in "${SERVICES_TO_INSTALL[@]}"; do print_info " wild-service-setup $service --fetch" done fi # Summary output print_header "Wild Cloud Services Setup Complete!" echo "" if [ "${SERVICES_INSTALLED:-false}" = true ]; then INTERNAL_DOMAIN=$(wild-config cloud.internalDomain 2>/dev/null || echo "your-internal-domain") echo "Next steps:" echo " 1. Access the dashboard at: https://dashboard.${INTERNAL_DOMAIN}" echo " 2. Get the dashboard token with: wild-dashboard-token" echo "" echo "To verify components, run:" echo " - kubectl get pods -n cert-manager" echo " - kubectl get pods -n externaldns" echo " - kubectl get pods -n kubernetes-dashboard" echo " - kubectl get clusterissuers" else echo "Next steps:" echo " 1. Ensure your cluster is running and kubectl is configured" echo " 2. Install services with: wild-cluster-services-up" echo " 3. Verify components are running correctly" fi print_success "Wild Cloud setup completed!"