5e70ce6c7e
New environment variables to set docker image tags for the images used by the helm chart, as well as the images we download from Docker Hub. When these new vars are missing, the scripts behave as before this patch. TESTS ============================ * Re-create the environment with/without the new env vars, with/without "--rebuild" * Make sure "stx control start/stop" works * Make sure images created by stx-init-env use tags matching new env vars Signed-off-by: Davlet Panech <davlet.panech@windriver.com> Change-Id: I66e061aef52fdb26c99303ecfbcd1fa9b43bc6bc
238 lines
7.0 KiB
Plaintext
238 lines
7.0 KiB
Plaintext
# bash
|
|
# vim:syn=sh
|
|
|
|
#
|
|
# ENVIRONMENT
|
|
# ===========
|
|
#
|
|
# These variables may be defined before sourcing this script:
|
|
#
|
|
# PROJECT (required)
|
|
# unique (within k8s) name of your prooject. Used as part of
|
|
# pod names etc.
|
|
#
|
|
# USER (required)
|
|
# usually defined by the shell; used in file names as well as
|
|
# the user that runs the build inside the builder container
|
|
#
|
|
# STX_PLATFORM
|
|
# "minikube" or "kubernetes" (for vanilla k8s)
|
|
# Default: "minikube"
|
|
#
|
|
# STX_BUILD_HOME
|
|
# root directory of all files used by this project
|
|
# Default: /localdisk/designer/$USER/$PROJECT
|
|
#
|
|
# MINIKUBE_HOME
|
|
# Minikube saves its profile information here. Must be on a local
|
|
# file system, not NFS.
|
|
# Default: $HOME
|
|
#
|
|
# MINIKUBEMEMORY
|
|
# Max amount of RAM for minikube in mebibytes (1024-based)
|
|
# Default: 16000
|
|
#
|
|
# STX_BUILD_CPUS
|
|
# How may CPU cores to allocate to PODs.
|
|
# Default: 6
|
|
#
|
|
# MINIKUBENAME
|
|
# Minikube's profile name
|
|
# Default: minikube-$USER-upstream
|
|
#
|
|
# KUBECONFIG
|
|
# Location of kubectl config file
|
|
# Default: $MINIKUBE_HOME/.kube/config or $HOME/.kube/config
|
|
# depending on $STX_PLATFORM
|
|
#
|
|
# STX_K8S_NAMESPACE (required on vanilla k8s)
|
|
# K8s namespace for builder pods & services. For vanilla k8s only.
|
|
# Minikube always uses the default namespace.
|
|
#
|
|
# STX_INSECURE_DOCKER_REGISTRIES
|
|
# Space-separated list of docker registries for which we want to disable
|
|
# SSL certificate validation. Only affects docker running in builder pods.
|
|
# Requires pod restart when changed.
|
|
#
|
|
# STX_CONTAINER_MTU
|
|
# Assume container network's MTU is this value. Currently this will be
|
|
# passed to docker-in-docker's command line. This must be <= to the k8s
|
|
# container network's MTU.
|
|
#
|
|
# STX_BUILDER_IMAGE_TAG
|
|
# Assign this tag to builder images generated or downloaded by stx-init-env,
|
|
# and reference them in builder helm charts.
|
|
# Default: $USER-$PROJECT-$DOCKER_TAG_VERSION
|
|
#
|
|
# STX_PREBUILT_BUILDER_IMAGE_TAG
|
|
# Download pre-built images with this tag. This is used by "stx-init-env"
|
|
# without the "--rebuild" flag.
|
|
# Default: master-debian-latest
|
|
|
|
notice_warn () {
|
|
local tty_on tty_off
|
|
if [[ -t 2 ]] ; then
|
|
tty_on=$'\033[1;33m'
|
|
tty_off=$'\033[0m'
|
|
fi
|
|
echo >&2 "${tty_on}$*${tty_off}"
|
|
}
|
|
|
|
number_of_users () {
|
|
local count
|
|
|
|
count=$(users | tr ' ' '\n' | sort --uniq | wc -l)
|
|
|
|
# Add in non-login users that might trigger a parallel build
|
|
# based on a timer, or other trigger.
|
|
if getent passwd | grep -q jenkins; then
|
|
count=$((count+1))
|
|
fi
|
|
|
|
# Always return at least one. i.e. someone is
|
|
# running this script.
|
|
if [ $count -le 0 ]; then
|
|
count=1
|
|
fi
|
|
|
|
echo $count
|
|
}
|
|
|
|
number_of_cpus () {
|
|
/usr/bin/nproc
|
|
}
|
|
|
|
sqrt () {
|
|
echo -e "sqrt($1)" | bc -q -i | head -2 | tail -1
|
|
}
|
|
|
|
|
|
if [ -z "$PROJECT" ]; then
|
|
notice_warn "\$PROJECT needs to be defined, this will be your project name."
|
|
notice_warn "It will be used on the docker image tagging to support multiusers."
|
|
return 1
|
|
fi
|
|
|
|
# Host side path, exports STX lib to user's PATH
|
|
export PRJDIR=$(pwd)
|
|
export PATH=$PRJDIR/stx/bin:$PATH
|
|
if [[ -n "$STX_BUILDER_IMAGE_TAG" ]] ; then
|
|
export DOCKER_TAG_LOCAL="$STX_BUILDER_IMAGE_TAG"
|
|
else
|
|
DOCKER_TAG_VERSION="v0.1.0"
|
|
export DOCKER_TAG_LOCAL="${USER}-${PROJECT}-${DOCKER_TAG_VERSION}"
|
|
fi
|
|
if [[ -z "$STX_PREBUILT_BUILDER_IMAGE_TAG" ]] ; then
|
|
STX_PREBUILT_BUILDER_IMAGE_TAG="master-debian-latest"
|
|
fi
|
|
export STX_PREBUILT_BUILDER_IMAGE_TAG
|
|
# Platform 'minikube' or 'kubernetes'
|
|
export STX_PLATFORM="${STX_PLATFORM:-minikube}"
|
|
# Max cpus for the build parallel jobs, replaces MINIKUBECPUS env var
|
|
export STX_BUILD_CPUS=${STX_BUILD_CPUS:-6}
|
|
|
|
STX_BUILD_HOME_DEFAULT_v1="/localdisk/$USER"
|
|
STX_BUILD_HOME_DEFAULT_v2="/localdisk/designer/$USER/$PROJECT"
|
|
|
|
if [ ! -f "stx.conf" ]; then
|
|
cp stx.conf.sample stx.conf
|
|
fi
|
|
|
|
# Platform specifics
|
|
if [ "$STX_PLATFORM" = "minikube" ]; then
|
|
# MINIKUBE Settings
|
|
if [ -z "$STX_BUILD_HOME" ]; then
|
|
# Verify default build home
|
|
if [ -d "${STX_BUILD_HOME_DEFAULT_v1}/localdisk/designer/$USER" ]; then
|
|
STX_BUILD_HOME="${STX_BUILD_HOME_DEFAULT_v1}"
|
|
else
|
|
STX_BUILD_HOME="${STX_BUILD_HOME_DEFAULT_v2}"
|
|
fi
|
|
export STX_BUILD_HOME
|
|
fi
|
|
|
|
if [ -z "$MINIKUBE_HOME" ]; then
|
|
MINIKUBE_HOME=$HOME
|
|
else
|
|
if [ ! -d "$MINIKUBE_HOME" ]; then
|
|
echo "The directory defined by \$MINIKUBE_HOME doesn't exist"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
FSTYPE=$(stat -f -L -c %T $MINIKUBE_HOME)
|
|
if [ x"$FSTYPE" == x"nfs" ]; then
|
|
echo ""
|
|
echo "Warning: stx minikube doesn't allow \$MINIKUBE_HOME or \$HOME directory as nfs mount point!!!"
|
|
echo " Please set non-nfs MINIKUBE_HOME with the command 'export MINIKUBE_HOME=XXX/YYY'"
|
|
echo ""
|
|
unset MINIKUBE_HOME
|
|
return 1
|
|
fi
|
|
|
|
export MINIKUBEMEMORY=${MINIKUBEMEMORY:-16000}
|
|
export MINIKUBENAME=${MINIKUBENAME:-minikube-$USER-upstream}
|
|
export KUBECONFIG=$MINIKUBE_HOME/.kube/config
|
|
|
|
# Consider many users are just working with code and not actually building.
|
|
NUM_USERS=$(sqrt $(number_of_users))
|
|
ABSOLUTE_MAX_CPUS=$(($(number_of_cpus)/$NUM_USERS))
|
|
MAX_CPUS=$(number_of_cpus)
|
|
if [ "$MAX_CPUS" == "" ] || [ "$MAX_CPUS" == "0" ]; then
|
|
MAX_CPUS=1
|
|
fi
|
|
|
|
if [ $MAX_CPUS -gt $ABSOLUTE_MAX_CPUS ]; then
|
|
MAX_CPUS=$ABSOLUTE_MAX_CPUS
|
|
fi
|
|
|
|
if [ $STX_BUILD_CPUS -gt $MAX_CPUS ]; then
|
|
notice_warn "\$STX_BUILD_CPUS setting:$STX_BUILD_CPUS is more than MAX_CPUS: $MAX_CPUS."
|
|
notice_warn "Limit the minikube cluster with MAX_CPUS."
|
|
|
|
export STX_BUILD_CPUS=$MAX_CPUS
|
|
fi
|
|
|
|
MAX_MEMORY=`expr $(cat /proc/meminfo |grep MemTotal | awk '{print $2}') / 1024`
|
|
if [ "$MAX_MEMORY" == "" ] || [ "$MAX_MEMORY" == "0" ]; then
|
|
MAX_MEMORY=2048
|
|
fi
|
|
|
|
if [ $MINIKUBEMEMORY -gt $MAX_MEMORY ]; then
|
|
|
|
notice_warn "MINIKUBEMEMORY setting:$MINIKUBEMEMORY is more than system MAX_MEMORY: $MAX_MEMORY M."
|
|
notice_warn "Limit the minikube cluster with MAX_MEMORY."
|
|
|
|
export MINIKUBEMEMORY=$MAX_MEMORY
|
|
fi
|
|
|
|
elif [ "$STX_PLATFORM" = "kubernetes" ]; then
|
|
# Host side path STX_BUILD_HOME
|
|
export STX_BUILD_HOME="${STX_BUILD_HOME:-${STX_BUILD_HOME_DEFAULT_v2}}"
|
|
|
|
if [ -z "$STX_K8S_NAMESPACE" ]; then
|
|
notice_warn "\$STX_K8S_NAMESPACE needs to be defined, this will be your namespace name"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$KUBECONFIG" ]; then
|
|
# Kubeconfig default location inside STX_BUILD_HOME
|
|
export KUBECONFIG=$STX_BUILD_HOME/.kube/config
|
|
fi
|
|
|
|
if [ ! -f "$KUBECONFIG" ]; then
|
|
notice_warn "KUBECONFIG: $KUBECONFIG not found"
|
|
notice_warn "Fix the kube config and try again."
|
|
return 1
|
|
fi
|
|
|
|
if ! kubectl get namespace 2>/dev/null | grep -q $STX_K8S_NAMESPACE; then
|
|
notice_warn "namespace $STX_K8S_NAMESPACE not found"
|
|
return 1
|
|
fi
|
|
|
|
else
|
|
notice_warn "\$STX_PLATFORM not specified, valid options are: 'minikube' or 'kubernetes'"
|
|
return 1
|
|
fi
|