oc-doc/stack.sh

167 lines
4.7 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# This script will help you running the different services needed
# in the open cloud stack :
# - checks if directories containing the core services are present
# - allows you to build or not each service image
# - launch the containerized service
# TODO :
# - Provide a list of all directories wich contain a dockerfile and choose which to build
# - Parallelize building
# - Flag building errors without stoping the other and flooding the stdout
# - Provide a list of directories with a docker-compose and choose which to launch
# Define the required directories
REQUIRED_DIRECTORIES=("oc-auth" "oc-catalog" "oc-schedulerd")
oc_root=""
check_directory() {
for dir in "${REQUIRED_DIRECTORIES[@]}"; do
if [ ! -d "$dir" ]; then
return 1 # Return failure if any required directory is missing
fi
done
return 0
}
check_path() {
local path="$1"
if [ -e "$PWD/$path" ]; then
cd "$PWD/$path"
echo "$PWD"
elif [ -e "$path" ]; then
echo "$path"
else
echo "$path does not exist"
return 1 # Return a non-zero exit status to indicate failure
fi
}
create_oc_root_env() {
if [ -z ${OC_ROOT} ]; then
echo "export OC_ROOT='$1'" >> ~/.bashrc
echo "OC_ROOT has been added to your ~/.bashrc file for next executions."
echo "Please run 'source ~/.bashrc' or restart your terminal to apply the changes."
fi
}
# Main script
echo "Verifying the script is being run in the correct directory..."
sleep 1.1
echo
if [ ! -z ${OC_ROOT} ]; then
echo "la variable env existe : $OC_ROOT"
cd $OC_ROOT
oc_root=${OC_ROOT}
fi
if ! check_directory; then
echo "The current directory ($(pwd)) does not contain all required directories:"
for dir in "${REQUIRED_DIRECTORIES[@]}"; do
echo " - $dir"
done
echo
echo "Please ensure the script is run from the correct root directory."
read -p "Would you like to specify the path to the correct directory? (y/n): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
read -p "Enter the relative or absolute path to the correct directory: " target_path
target_path=$(eval echo "$target_path")
target_path=$(check_path "$target_path")
echo
echo "updated path : $target_path"
echo
cd "$target_path" || { echo "Failed to change directory. Exiting."; exit 1; }
if check_directory; then
oc_root="$(pwd)"
echo "Directory verified successfully. All required directories are present."
echo
create_oc_root_env "$oc_root"
sleep 2.5
else
echo "The specified directory does not contain all required directories. Exiting."
exit 1
fi
else
echo "Please rerun the script from the correct directory. Exiting."
exit 1
fi
else
echo "Directory verification passed. All required directories are present."
create_oc_root_env "$(pwd)"
fi
arr=("oc-catalog" "oc-datacenter" "oc-peer" "oc-scheduler" "oc-shared" "oc-workflow" "oc-workspace" "oc-auth")
oc_directories=($(find . -maxdepth 1 -type d -name "oc-*" -exec basename {} \;))
# Check for directories in 'arr' that are missing from 'oc_directories'
missing_directories=()
for dir in "${arr[@]}"; do
if [[ ! " ${oc_directories[@]} " =~ " $dir " ]]; then
missing_directories+=("$dir")
fi
done
if [ ${#missing_directories[@]} -gt 0 ]; then
echo "Warning: The following directories are missing and won't be built:"
for missing in "${missing_directories[@]}"; do
echo "- $missing"
done
read -p "Do you want to proceede with deploy, without these missing components ?[Y/n]: " choice
if [[ ! "$choice" =~ ^[Yy]$ ]]; then
echo "Exiting the Open Cloud deployment process"
exit 0
fi
fi
# Continue with the rest of your script
echo "Executing the main script..."
docker create networks catalog | true
docker kill mongo | true
docker rm mongo | true
docker kill nats | true
docker rm nats | true
docker kill loki | true
docker rm loki | true
docker kill graphana | true
docker rm graphana | true
cd ./oc-auth/ldap-hydra && docker compose up -d
cd ../keto && docker compose up -d
cd ../../oc-catalog && docker compose -f docker-compose.base.yml up -d
cd ../oc-schedulerd && docker compose -f docker-compose.tools.yml up -d
for i in "${oc_directories[@]}"
do
cd ../$i
if [ -e "$PWD/Dockerfile" ];then
read -p "Do you want to build the image for $i [y/n] : " build
if [[ "$build" =~ ^[Yy]$ ]];then
docker build . -t $i
fi
if [ -e "$PWD/docker-compose.yml" ];then
docker compose up -d
fi
fi
done
cd ../oc-schedulerd && go build . && ./oc-schedulerd