Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Helm install script #27

Closed
wants to merge 29 commits into from
Closed
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
790122e
Added helm installation script.
Jun 18, 2024
60003cd
Copyright statement and information about the relevant Apache Licence.
Jun 18, 2024
62317f8
Refractored the function to detect cluster router base: Instead of us…
Jun 18, 2024
59965c6
Added clear instructions and a description of the script, the options…
Jun 18, 2024
6e1a1a1
Added --help option to display usage information.
Jun 19, 2024
733f5f8
.sh file name change as noted that the install-helm.sh file makes it …
Jun 19, 2024
45c1e1f
Added --cli <oc|kubectl> option to specify which CLI tool to use.
Jun 19, 2024
40aa740
Placed the checks for essential information at the top of the file en…
Jun 19, 2024
d4a5a5c
Support for --release-name and --generate-name options: Allows users …
Jun 19, 2024
aa66059
Merge branch 'redhat-developer:main' into helm-install-script
Fortune-Ndlovu Jun 24, 2024
8996e31
Using dirname to determine the base directory of the script ensuring …
Fortune-Ndlovu Jun 24, 2024
7673f4b
Removed login check because we already provide feedback if the user i…
Fortune-Ndlovu Jun 24, 2024
77042ae
Updated the detect_cluster_router_base function to use oc get ingress…
Fortune-Ndlovu Jun 24, 2024
a990059
Refactored the script to only handle the CLI Helm installation for OCP.
Fortune-Ndlovu Jun 25, 2024
bc57eed
Added install.md file.
Fortune-Ndlovu Jun 28, 2024
8ba23d9
Update install.md
Fortune-Ndlovu Jun 28, 2024
1b5f427
Update install.md
Fortune-Ndlovu Jun 28, 2024
ca84b36
Add suggestions
Fortune-Ndlovu Jul 1, 2024
8b01512
Update install.md
Fortune-Ndlovu Jul 1, 2024
cafbd47
Improve error handling and better practices in setting configuration …
Fortune-Ndlovu Jul 8, 2024
813fa8b
If detect_cluster_router_base fails, we could just exit with the righ…
Fortune-Ndlovu Jul 16, 2024
a67d111
since the ROUTER_BASE is always required and will either be provided …
Fortune-Ndlovu Jul 16, 2024
2317626
removing case
Fortune-Ndlovu Jul 16, 2024
905e1ae
adding space
Fortune-Ndlovu Jul 16, 2024
401589f
Not needed to specify the path to the Chart default values.yaml file.
Fortune-Ndlovu Jul 16, 2024
41bf45b
Trapping for each condition separately, and then providing a call to …
Fortune-Ndlovu Jul 16, 2024
dd8c73e
List all Helm releases in the specified name space
Fortune-Ndlovu Jul 18, 2024
cfa136f
Adding the -i flag to install the chart if it doesnt exists, or upgra…
Fortune-Ndlovu Jul 19, 2024
595db25
Testing script
Fortune-Ndlovu Jul 22, 2024
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
155 changes: 155 additions & 0 deletions scripts/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#!/bin/bash
#
# Copyright (c) 2024 Red Hat, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# You may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Script to handle CLI helm installation for OCP
#
# Requires: oc, helm and an active login session to a cluster.

set -e

usage() {
echo "
This script simplifies and automates the installation process of Helm charts on the OpenShift Container Platform (OCP) clusters.
It ensures that the user is logged into a cluster and attempts to detect the cluster router base, updating the Helm chart configuration accordingly.

Usage:
$0 [OPTIONS]

Options:
--router-base <router-base> : Manually provide the cluster router base if auto-detection fails.
--release-name <name> : Specify a custom release name for the Helm chart.
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
--generate-name : Generate a name for the Helm release (overrides --release-name).
--namespace <namespace> : Specify the namespace for the Helm release (autodetects if not provided).
--values <file> : Specify your own values file for the Helm chart.
--help : Show this help message and exit.

Examples:
$0 # Auto-detects router base and installs the Helm chart
$0 --router-base example.com # Manually specifies the router base and installs the Helm chart
$0 --release-name myrelease # Installs the Helm chart with the specified release name
$0 --generate-name # Generates a name for the Helm release
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
$0 --values /path/to/values.yaml # Installs the Helm chart using the specified values file
"
}

# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}

# Check for required commands
if ! command_exists helm; then
echo "Error: 'helm' is required. Install it from https://docs.openshift.com/container-platform/4.16/applications/working_with_helm_charts/installing-helm.html to continue."
exit 1
fi
if ! command_exists oc; then
echo "Error: 'oc' is required. Install it from https://docs.openshift.com/container-platform/4.16/cli_reference/openshift_cli/getting-started-cli.html to continue."
exit 1
fi

# Check if required files and directories exist
HELM_CHART_DIR="$(dirname "$0")/../charts/backstage"
DEFAULT_VALUES_FILE="$HELM_CHART_DIR/values.yaml"

if [ ! -d "$HELM_CHART_DIR" ]; then
echo "Error: Helm chart directory not found at $HELM_CHART_DIR"
exit 1
fi

# Parse command-line arguments
ROUTER_BASE=""
RELEASE_NAME=""
GENERATE_NAME=false
NAMESPACE=""
VALUES_FILE="$DEFAULT_VALUES_FILE"
EXTRA_HELM_ARGS=""

while [[ "$#" -gt 0 ]]; do
case $1 in
--router-base)
ROUTER_BASE="$2"
shift
;;
--release-name)
RELEASE_NAME="$2"
shift
;;
--generate-name)
GENERATE_NAME=true
;;
--namespace)
NAMESPACE="$2"
shift
;;
--values)
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
VALUES_FILE="$2"
shift
;;
--help)
usage
exit 0
;;
*)
EXTRA_HELM_ARGS+=" $1"
;;
esac
shift
done

# Function to detect cluster router base
detect_cluster_router_base() {
ROUTER_BASE=$(oc get ingress.config.openshift.io/cluster -o=jsonpath='{.spec.domain}')
}

# Detect cluster router base if not provided
if [[ -z "$ROUTER_BASE" ]]; then
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
detect_cluster_router_base || (echo "Error: Cluster router base could not be detected. Please provide it using the --router-base flag." && exit 1)
fi

# Detect namespace if not provided
if [[ -z "$NAMESPACE" ]]; then
NAMESPACE=$(oc config view --minify --output 'jsonpath={..namespace}')
if [[ -z $NAMESPACE ]]; then
NAMESPACE="default"
fi
fi

# Always include the router base in Helm arguments
EXTRA_HELM_ARGS+=" --set global.clusterRouterBase=$ROUTER_BASE"

# Construct Helm install or upgrade command
if [[ $GENERATE_NAME == true ]]; then
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
HELM_CMD="helm install --generate-name"
else
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
if [[ -z "$RELEASE_NAME" ]]; then
echo "Error: Either --release-name must be specified or --generate-name must be used."
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
exit 1
else
HELM_CMD="helm upgrade -i $RELEASE_NAME"
fi
fi

HELM_CMD+=" $HELM_CHART_DIR --namespace $NAMESPACE --values $VALUES_FILE $EXTRA_HELM_ARGS"

# Execute Helm install or upgrade command
echo "Executing: $HELM_CMD"

if eval "$HELM_CMD"; then
echo "Helm installation completed successfully."
else
echo "Something went wrong with Helm installation!"
helm list --namespace "$NAMESPACE"
exit 1
Fortune-Ndlovu marked this conversation as resolved.
Show resolved Hide resolved
fi