158 lines
4.5 KiB
Bash
Executable File
158 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "Usage: $0 KONG_SERVICE_ENV_FILE <extra_plugins_ee_directory>"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -d "$3/.pongo" ]; then
|
|
plugins_ee_directory=$3
|
|
elif [ ! -z "$3" ]; then
|
|
echo "Requested to start extra plugins-ee services at $3, but it doesn't contain a .pongo directory"
|
|
fi
|
|
|
|
cwd=$(realpath $(dirname $(readlink -f "${BASH_SOURCE[0]}")))
|
|
PATH=$PATH:$cwd
|
|
|
|
if [ ! -z "$plugins_ee_directory" ] && ! yq --version >/dev/null 2>&1; then
|
|
binary_name=""
|
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
binary_name="yq_linux"
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
binary_name="yq_darwin"
|
|
else
|
|
echo "Unsupported OS for yq: $OSTYPE"
|
|
exit 1
|
|
fi
|
|
if [[ $(uname -m) == "x86_64" ]]; then
|
|
binary_name="${binary_name}_amd64"
|
|
else
|
|
binary_name="${binary_name}_arm64"
|
|
fi
|
|
wget "https://github.com/mikefarah/yq/releases/download/v4.40.5/${binary_name}" -qO "$cwd/yq"
|
|
chmod +x "$cwd/yq"
|
|
fi
|
|
|
|
if docker compose version >/dev/null 2>&1; then
|
|
DOCKER_COMPOSE="docker compose"
|
|
elif [ -z "$(which docker-compose)" ]; then
|
|
echo "docker-compose or docker compose plugin not installed"
|
|
exit 1
|
|
else
|
|
DOCKER_COMPOSE="docker-compose"
|
|
fi
|
|
|
|
if [ "$2" == "down" ]; then
|
|
NETWORK_NAME="default" $DOCKER_COMPOSE down -v --remove-orphans
|
|
exit 0
|
|
fi
|
|
|
|
KONG_SERVICE_ENV_FILE=$1
|
|
# clear the file
|
|
> "$KONG_SERVICE_ENV_FILE"
|
|
|
|
# Initialize parallel arrays for service names and port definitions
|
|
services=()
|
|
port_defs=()
|
|
|
|
ptemp=$cwd/.pongo-compat
|
|
|
|
compose_file=$cwd/docker-compose-test-services.yml
|
|
|
|
if [ ! -z "$plugins_ee_directory" ]; then
|
|
echo "Starting extra plugins-ee services at $plugins_ee_directory"
|
|
rm -rf "$ptemp"
|
|
mkdir -p "$ptemp"
|
|
|
|
pushd "$plugins_ee_directory/.pongo" >/dev/null
|
|
|
|
shopt -s nullglob
|
|
yaml_files=(*.yml *.yaml)
|
|
shopt -u nullglob
|
|
|
|
for f in "${yaml_files[@]}"; do
|
|
compose_file="$compose_file:$(pwd)/$f"
|
|
for service in $(yq '.services | keys| .[]' <"$f"); do
|
|
# rest-proxy -> rest_proxy
|
|
services+=( "$service" )
|
|
service_normalized="${service//-/_}"
|
|
ports=""
|
|
for port in $(yq ".services.$service.ports.[]" <"$f" | rev | cut -d: -f1 | rev); do
|
|
# KEYCLOAK_PORT_8080:8080
|
|
ports="$ports ${service_normalized}_PORT_${port}:${port}"
|
|
done
|
|
port_defs+=( "$ports" )
|
|
done
|
|
done
|
|
popd >/dev/null
|
|
|
|
ln -sf "$(pwd)/$plugins_ee_directory/.pongo" "$ptemp/.pongo"
|
|
ln -sf "$(pwd)/$plugins_ee_directory/spec" "$ptemp/spec"
|
|
export PONGO_WD=$(realpath "$plugins_ee_directory")
|
|
pushd "$ptemp" >/dev/null
|
|
fi
|
|
|
|
export COMPOSE_FILE="$compose_file"
|
|
export COMPOSE_PROJECT_NAME="$(basename $(realpath $cwd/../../))-$(basename ${KONG_VENV:-kong-dev})"
|
|
echo "export COMPOSE_FILE=$COMPOSE_FILE" >> "$KONG_SERVICE_ENV_FILE"
|
|
echo "export COMPOSE_PROJECT_NAME=$COMPOSE_PROJECT_NAME" >> "$KONG_SERVICE_ENV_FILE"
|
|
|
|
NETWORK_NAME="default" $DOCKER_COMPOSE up -d --build --wait --remove-orphans
|
|
|
|
if [ ! -z "$plugins_ee_directory" ]; then
|
|
unset PONGO_WD
|
|
popd >/dev/null
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Something goes wrong, please check $DOCKER_COMPOSE output"
|
|
exit 1
|
|
fi
|
|
|
|
# Add elements to the parallel arrays
|
|
services+=("postgres")
|
|
port_defs+=("PG_PORT:5432")
|
|
|
|
services+=("redis")
|
|
port_defs+=("REDIS_PORT:6379 REDIS_SSL_PORT:6380")
|
|
|
|
services+=("redis-auth")
|
|
port_defs+=("REDIS_AUTH_PORT:6385")
|
|
|
|
services+=("grpcbin")
|
|
port_defs+=("GRPCBIN_PORT:9000 GRPCBIN_SSL_PORT:9001")
|
|
|
|
services+=("zipkin")
|
|
port_defs+=("ZIPKIN_PORT:9411")
|
|
|
|
_kong_added_envs=""
|
|
|
|
# Not all env variables need all three prefixes, but we add all of them for simplicity
|
|
env_prefixes="KONG_ KONG_TEST_ KONG_SPEC_TEST_"
|
|
|
|
for ((i = 0; i < ${#services[@]}; i++)); do
|
|
svc="${services[i]}"
|
|
|
|
for port_def in ${port_defs[i]}; do
|
|
env_name=$(echo "$port_def" | cut -d: -f1)
|
|
private_port=$(echo "$port_def" | cut -d: -f2)
|
|
exposed_port="$($DOCKER_COMPOSE port "$svc" "$private_port" | cut -d: -f2)"
|
|
|
|
if [ -z "$exposed_port" ]; then
|
|
echo "Port $env_name for service $svc unknown"
|
|
continue
|
|
fi
|
|
|
|
for prefix in $env_prefixes; do
|
|
_kong_added_envs="$_kong_added_envs ${prefix}${env_name}"
|
|
echo "export ${prefix}${env_name}=$exposed_port" >> "$KONG_SERVICE_ENV_FILE"
|
|
done
|
|
done
|
|
|
|
# all services go to localhost
|
|
for prefix in $env_prefixes; do
|
|
svcn="${svc//-/_}"
|
|
echo "export ${prefix}$(echo "$svcn" | tr '[:lower:]' '[:upper:]')_HOST=127.0.0.1" >> "$KONG_SERVICE_ENV_FILE"
|
|
done
|
|
done
|