diff --git a/bin/install-loki.sh b/bin/install-loki.sh index 17f17bf2..3c53c7ba 100755 --- a/bin/install-loki.sh +++ b/bin/install-loki.sh @@ -1,24 +1,27 @@ #!/bin/bash -# Description: Fetches the version for Loki from the specified YAML file and executes a helm upgrade/install command. +# Description: Fetches the version for SERVICE_NAME_DEFAULT from the specified +# YAML file and executes a helm upgrade/install command with dynamic values files. # Disable SC2124 (unused array), SC2145 (array expansion issue), SC2294 (eval) # shellcheck disable=SC2124,SC2145,SC2294 # Service -SERVICE_NAME="loki" +SERVICE_NAME_DEFAULT="loki" SERVICE_NAMESPACE="grafana" # Helm -HELM_REPO_NAME="grafana" -HELM_REPO_URL="https://grafana.github.io/helm-charts" +HELM_REPO_NAME_DEFAULT="grafana" +HELM_REPO_URL_DEFAULT="https://grafana.github.io/helm-charts" # Base directories provided by the environment GENESTACK_BASE_DIR="${GENESTACK_BASE_DIR:-/opt/genestack}" GENESTACK_OVERRIDES_DIR="${GENESTACK_OVERRIDES_DIR:-/etc/genestack}" # Define service-specific override directories based on the framework -SERVICE_BASE_OVERRIDES="${GENESTACK_BASE_DIR}/base-helm-configs/${SERVICE_NAME}" -SERVICE_CUSTOM_OVERRIDES="${GENESTACK_OVERRIDES_DIR}/helm-configs/${SERVICE_NAME}" +SERVICE_BASE_OVERRIDES="${GENESTACK_BASE_DIR}/base-helm-configs/${SERVICE_NAME_DEFAULT}" +SERVICE_CUSTOM_OVERRIDES="${GENESTACK_OVERRIDES_DIR}/helm-configs/${SERVICE_NAME_DEFAULT}" + +# Define the Global Overrides directory used in the original script GLOBAL_OVERRIDES_DIR="${GENESTACK_OVERRIDES_DIR}/helm-configs/global_overrides" # Read the desired chart version from VERSION_FILE @@ -29,23 +32,58 @@ if [ ! -f "$VERSION_FILE" ]; then exit 1 fi -# Extract version dynamically using the SERVICE_NAME variable -SERVICE_VERSION=$(grep "^[[:space:]]*${SERVICE_NAME}:" "$VERSION_FILE" | sed "s/.*${SERVICE_NAME}: *//") +# Extract version dynamically using the SERVICE_NAME_DEFAULT variable +SERVICE_VERSION=$(grep "^[[:space:]]*${SERVICE_NAME_DEFAULT}:" "$VERSION_FILE" | sed "s/.*${SERVICE_NAME_DEFAULT}: *//") if [ -z "$SERVICE_VERSION" ]; then - echo "Error: Could not extract version for '$SERVICE_NAME' from $VERSION_FILE" >&2 + echo "Error: Could not extract version for '$SERVICE_NAME_DEFAULT' from $VERSION_FILE" >&2 exit 1 fi -echo "Found version for $SERVICE_NAME: $SERVICE_VERSION" +echo "Found version for $SERVICE_NAME_DEFAULT: $SERVICE_VERSION" + +# Load chart metadata from custom override YAML if defined +for yaml_file in "${SERVICE_CUSTOM_OVERRIDES}"/*.yaml; do + if [ -f "$yaml_file" ]; then + HELM_REPO_URL=$(yq eval '.chart.repo_url // ""' "$yaml_file") + HELM_REPO_NAME=$(yq eval '.chart.repo_name // ""' "$yaml_file") + SERVICE_NAME=$(yq eval '.chart.service_name // ""' "$yaml_file") + break # use the first match and stop + fi +done + +# Fallback to defaults if variables not set +: "${HELM_REPO_URL:=$HELM_REPO_URL_DEFAULT}" +: "${HELM_REPO_NAME:=$HELM_REPO_NAME_DEFAULT}" +: "${SERVICE_NAME:=$SERVICE_NAME_DEFAULT}" + + +# Determine Helm chart path +if [[ "$HELM_REPO_URL" == oci://* ]]; then + # OCI registry path + HELM_CHART_PATH="$HELM_REPO_URL/$HELM_REPO_NAME/$SERVICE_NAME" +else + # --- Helm Repository and Execution --- + helm repo add "$HELM_REPO_NAME" "$HELM_REPO_URL" # uncomment if needed + helm repo update + HELM_CHART_PATH="$HELM_REPO_NAME/$SERVICE_NAME" +fi + +# Debug output +echo "[DEBUG] HELM_REPO_URL=$HELM_REPO_URL" +echo "[DEBUG] HELM_REPO_NAME=$HELM_REPO_NAME" +echo "[DEBUG] SERVICE_NAME=$SERVICE_NAME" +echo "[DEBUG] HELM_CHART_PATH=$HELM_CHART_PATH" # Prepare an array to collect -f arguments overrides_args=() # Include all YAML files from the BASE configuration directory +# NOTE: Files in this directory are included first. if [[ -d "$SERVICE_BASE_OVERRIDES" ]]; then echo "Including base overrides from directory: $SERVICE_BASE_OVERRIDES" for file in "$SERVICE_BASE_OVERRIDES"/*.yaml; do + # Check that there is at least one match if [[ -e "$file" ]]; then echo " - $file" overrides_args+=("-f" "$file") @@ -56,8 +94,9 @@ else fi # Include all YAML files from the GLOBAL configuration directory +# NOTE: Files here override base settings and are applied before service-specific ones. if [[ -d "$GLOBAL_OVERRIDES_DIR" ]]; then - echo "Including overrides from global config directory:" + echo "Including global overrides from directory: $GLOBAL_OVERRIDES_DIR" for file in "$GLOBAL_OVERRIDES_DIR"/*.yaml; do if [[ -e "$file" ]]; then echo " - $file" @@ -65,10 +104,11 @@ if [[ -d "$GLOBAL_OVERRIDES_DIR" ]]; then fi done else - echo "Warning: Global config directory not found: $GLOBAL_OVERRIDES_DIR" + echo "Warning: Global override directory not found: $GLOBAL_OVERRIDES_DIR" fi # Include all YAML files from the custom SERVICE configuration directory +# NOTE: Files here have the highest precedence. if [[ -d "$SERVICE_CUSTOM_OVERRIDES" ]]; then echo "Including overrides from service config directory:" for file in "$SERVICE_CUSTOM_OVERRIDES"/*.yaml; do @@ -83,16 +123,12 @@ fi echo -# --- Helm Repository and Execution --- -helm repo add "$HELM_REPO_NAME" "$HELM_REPO_URL" -helm repo update - # Collect all --set arguments. set_args=() helm_command=( - helm upgrade --install "$SERVICE_NAME" "$HELM_REPO_NAME/$SERVICE_NAME" + helm upgrade --install "$SERVICE_NAME_DEFAULT" "$HELM_CHART_PATH" --version "${SERVICE_VERSION}" --namespace="$SERVICE_NAMESPACE" --timeout 120m @@ -101,8 +137,9 @@ helm_command=( "${overrides_args[@]}" "${set_args[@]}" + # Post-renderer configuration --post-renderer "$GENESTACK_OVERRIDES_DIR/kustomize/kustomize.sh" - --post-renderer-args "$SERVICE_NAME/overlay" + --post-renderer-args "$SERVICE_NAME_DEFAULT/overlay" "$@" )