149 lines
4.0 KiB
Plaintext
Executable File
149 lines
4.0 KiB
Plaintext
Executable File
#\!/bin/bash
|
|
|
|
set -e
|
|
set -o pipefail
|
|
|
|
# Usage function
|
|
usage() {
|
|
echo "Usage: wild-cluster-services-fetch [options]"
|
|
echo ""
|
|
echo "Fetch cluster services setup files from the repository."
|
|
echo ""
|
|
echo "Arguments:"
|
|
echo " service Specific service(s) to install (optional)"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -h, --help Show this help message"
|
|
echo " --force Force fetching even if files exist"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " wild-cluster-services-fetch # Fetch all services"
|
|
echo " wild-cluster-services-fetch metallb traefik # Fetch specific services"
|
|
echo ""
|
|
echo "Available services:"
|
|
echo " metallb, longhorn, traefik, coredns, cert-manager,"
|
|
echo " externaldns, kubernetes-dashboard, nfs, docker-registry"
|
|
}
|
|
|
|
# Parse arguments
|
|
FORCE=false
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
--force)
|
|
FORCE=true
|
|
shift
|
|
;;
|
|
-*)
|
|
echo "Unknown option $1"
|
|
usage
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo "Unexpected argument: $1"
|
|
usage
|
|
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
|
|
|
|
print_header "Fetching cluster services templates"
|
|
|
|
SOURCE_DIR="${WC_ROOT}/setup/cluster-services"
|
|
DEST_DIR="${WC_HOME}/setup/cluster-services"
|
|
|
|
# Check if source directory exists
|
|
if [ ! -d "$SOURCE_DIR" ]; then
|
|
print_error "Cluster setup source directory not found: $SOURCE_DIR"
|
|
print_info "Make sure the wild-cloud repository is properly set up"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if destination already exists
|
|
if [ -d "$DEST_DIR" ] && [ "$FORCE" = false ]; then
|
|
print_warning "Cluster setup directory already exists: $DEST_DIR"
|
|
read -p "Overwrite existing files? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
FORCE=true
|
|
fi
|
|
else
|
|
mkdir -p "$DEST_DIR"
|
|
fi
|
|
|
|
# Copy README
|
|
if [ ! -f "${WC_HOME}/setup/README.md" ]; then
|
|
cp "${WC_ROOT}/setup/README.md" "${WC_HOME}/setup/README.md"
|
|
fi
|
|
|
|
# Get list of services to install
|
|
if [ ${#SPECIFIC_SERVICES[@]} -gt 0 ]; then
|
|
SERVICES_TO_INSTALL=("${SPECIFIC_SERVICES[@]}")
|
|
print_info "Fetching specific services: ${SERVICES_TO_INSTALL[*]}"
|
|
else
|
|
# Install all available services in a specific order for dependencies
|
|
SERVICES_TO_INSTALL=(
|
|
"metallb"
|
|
"longhorn"
|
|
"traefik"
|
|
"coredns"
|
|
"cert-manager"
|
|
"externaldns"
|
|
"kubernetes-dashboard"
|
|
"nfs"
|
|
"docker-registry"
|
|
)
|
|
print_info "Fetching all available services."
|
|
fi
|
|
|
|
for service in "${SERVICES_TO_INSTALL[@]}"; do
|
|
|
|
SERVICE_SOURCE_DIR="$SOURCE_DIR/$service"
|
|
SERVICE_DEST_DIR="$DEST_DIR/$service"
|
|
TEMPLATE_SOURCE_DIR="$SERVICE_SOURCE_DIR/kustomize.template"
|
|
TEMPLATE_DEST_DIR="$SERVICE_DEST_DIR/kustomize.template"
|
|
|
|
if [ ! -d "$TEMPLATE_SOURCE_DIR" ]; then
|
|
print_error "Source directory not found: $TEMPLATE_SOURCE_DIR"
|
|
continue
|
|
fi
|
|
|
|
if $FORCE && [ -d "$TEMPLATE_DEST_DIR" ]; then
|
|
print_info "Removing existing $service templates in: $TEMPLATE_DEST_DIR"
|
|
rm -rf "$TEMPLATE_DEST_DIR"
|
|
elif [ -d "$TEMPLATE_DEST_DIR" ]; then
|
|
print_info "Files already exist for $service, skipping (use --force to overwrite)."
|
|
continue
|
|
fi
|
|
|
|
mkdir -p "$SERVICE_DEST_DIR"
|
|
mkdir -p "$TEMPLATE_DEST_DIR"
|
|
cp -f "$SERVICE_SOURCE_DIR/README.md" "$SERVICE_DEST_DIR/"
|
|
|
|
if [ -f "$SERVICE_SOURCE_DIR/configure.sh" ]; then
|
|
cp -f "$SERVICE_SOURCE_DIR/configure.sh" "$SERVICE_DEST_DIR/"
|
|
fi
|
|
|
|
if [ -f "$SERVICE_SOURCE_DIR/install.sh" ]; then
|
|
cp -f "$SERVICE_SOURCE_DIR/install.sh" "$SERVICE_DEST_DIR/"
|
|
fi
|
|
|
|
if [ -d "$TEMPLATE_SOURCE_DIR" ]; then
|
|
cp -r "$TEMPLATE_SOURCE_DIR/"* "$TEMPLATE_DEST_DIR/"
|
|
fi
|
|
|
|
print_success "Fetched $service templates."
|
|
done
|