#!/bin/bash
# This script holds library functions for setting up the shell environment for OpenShift scripts
# os::util::environment::use_sudo updates $USE_SUDO to be 'true', so that later scripts choosing between
# execution using 'sudo' and execution without it chose to use 'sudo'
#
# Globals:
# None
# Arguments:
# None
# Returns:
# - export USE_SUDO
function os::util::environment::use_sudo() {
USE_SUDO=true
export USE_SUDO
}
readonly -f os::util::environment::use_sudo
# os::util::environment::setup_time_vars sets up environment variables that describe durations of time
# These variables can be used to specify times for other utility functions
#
# Globals:
# None
# Arguments:
# None
# Returns:
# - export TIME_MS
# - export TIME_SEC
# - export TIME_MIN
function os::util::environment::setup_time_vars() {
TIME_MS=1
export TIME_MS
TIME_SEC="$(( 1000 * ${TIME_MS} ))"
export TIME_SEC
TIME_MIN="$(( 60 * ${TIME_SEC} ))"
export TIME_MIN
}
readonly -f os::util::environment::setup_time_vars
# os::util::environment::setup_all_server_vars sets up all environment variables necessary to configure and start an OpenShift server
#
# Globals:
# - OS_ROOT
# - PATH
# - TMPDIR
# - LOG_DIR
# - ARTIFACT_DIR
# - KUBELET_SCHEME
# - KUBELET_BIND_HOST
# - KUBELET_HOST
# - KUBELET_PORT
# - BASETMPDIR
# - ETCD_PORT
# - ETCD_PEER_PORT
# - API_BIND_HOST
# - API_HOST
# - API_PORT
# - API_SCHEME
# - PUBLIC_MASTER_HOST
# - USE_IMAGES
# Arguments:
# - 1: the path under the root temporary directory for OpenShift where these subdirectories should be made
# Returns:
# - export PATH
# - export BASETMPDIR
# - export LOG_DIR
# - export VOLUME_DIR
# - export ARTIFACT_DIR
# - export FAKE_HOME_DIR
# - export HOME
# - export KUBELET_SCHEME
# - export KUBELET_BIND_HOST
# - export KUBELET_HOST
# - export KUBELET_PORT
# - export ETCD_PORT
# - export ETCD_PEER_PORT
# - export ETCD_DATA_DIR
# - export API_BIND_HOST
# - export API_HOST
# - export API_PORT
# - export API_SCHEME
# - export SERVER_CONFIG_DIR
# - export MASTER_CONFIG_DIR
# - export NODE_CONFIG_DIR
# - export USE_IMAGES
# - export TAG
function os::util::environment::setup_all_server_vars() {
local subtempdir=$1
os::util::environment::setup_tmpdir_vars "${subtempdir}"
os::util::environment::setup_kubelet_vars
os::util::environment::setup_etcd_vars
os::util::environment::setup_server_vars
os::util::environment::setup_images_vars
}
readonly -f os::util::environment::setup_all_server_vars
# os::util::environment::update_path_var updates $PATH so that OpenShift binaries are available
#
# Globals:
# - OS_ROOT
# - PATH
# Arguments:
# None
# Returns:
# - export PATH
function os::util::environment::update_path_var() {
PATH="${OS_OUTPUT_BINPATH}/$(os::util::host_platform):${PATH}"
export PATH
}
readonly -f os::util::environment::update_path_var
# os::util::environment::setup_tmpdir_vars sets up temporary directory path variables
#
# Globals:
# - TMPDIR
# - LOG_DIR
# - ARTIFACT_DIR
# - USE_SUDO
# Arguments:
# - 1: the path under the root temporary directory for OpenShift where these subdirectories should be made
# Returns:
# - export BASETMPDIR
# - export LOG_DIR
# - export VOLUME_DIR
# - export ARTIFACT_DIR
# - export FAKE_HOME_DIR
# - export HOME
function os::util::environment::setup_tmpdir_vars() {
local sub_dir=$1
BASETMPDIR="${TMPDIR:-/tmp}/openshift/${sub_dir}"
export BASETMPDIR
LOG_DIR="${LOG_DIR:-${BASETMPDIR}/logs}"
export LOG_DIR
VOLUME_DIR="${BASETMPDIR}/volumes"
export VOLUME_DIR
ARTIFACT_DIR="${ARTIFACT_DIR:-${BASETMPDIR}/artifacts}"
export ARTIFACT_DIR
# change the location of $HOME so no one does anything naughty
FAKE_HOME_DIR="${BASETMPDIR}/openshift.local.home"
export FAKE_HOME_DIR
HOME="${FAKE_HOME_DIR}"
export HOME
# ensure that the directories are clean
if os::util::find::system_binary "findmnt" &>/dev/null; then
for target in $( ${USE_SUDO:+sudo} findmnt --output TARGET --list ); do
if [[ "${target}" == "${BASETMPDIR}"* ]]; then
${USE_SUDO:+sudo} umount "${target}"
fi
done
fi
for directory in "${BASETMPDIR}" "${LOG_DIR}" "${VOLUME_DIR}" "${ARTIFACT_DIR}" "${HOME}"; do
${USE_SUDO:+sudo} rm -rf "${directory}"
mkdir -p "${directory}"
done
}
readonly -f os::util::environment::setup_tmpdir_vars
# os::util::environment::setup_kubelet_vars sets up environment variables necessary for interacting with the kubelet
#
# Globals:
# - KUBELET_SCHEME
# - KUBELET_BIND_HOST
# - KUBELET_HOST
# - KUBELET_PORT
# Arguments:
# None
# Returns:
# - export KUBELET_SCHEME
# - export KUBELET_BIND_HOST
# - export KUBELET_HOST
# - export KUBELET_PORT
function os::util::environment::setup_kubelet_vars() {
KUBELET_SCHEME="${KUBELET_SCHEME:-https}"
export KUBELET_SCHEME
KUBELET_BIND_HOST="${KUBELET_BIND_HOST:-$(openshift start --print-ip || echo "127.0.0.1")}"
export KUBELET_BIND_HOST
KUBELET_HOST="${KUBELET_HOST:-${KUBELET_BIND_HOST}}"
export KUBELET_HOST
KUBELET_PORT="${KUBELET_PORT:-10250}"
export KUBELET_PORT
}
readonly -f os::util::environment::setup_kubelet_vars
# os::util::environment::setup_etcd_vars sets up environment variables necessary for interacting with etcd
#
# Globals:
# - BASETMPDIR
# - ETCD_HOST
# - ETCD_PORT
# - ETCD_PEER_PORT
# Arguments:
# None
# Returns:
# - export ETCD_HOST
# - export ETCD_PORT
# - export ETCD_PEER_PORT
# - export ETCD_DATA_DIR
function os::util::environment::setup_etcd_vars() {
ETCD_HOST="${ETCD_HOST:-127.0.0.1}"
export ETCD_HOST
ETCD_PORT="${ETCD_PORT:-4001}"
export ETCD_PORT
ETCD_PEER_PORT="${ETCD_PEER_PORT:-7001}"
export ETCD_PEER_PORT
ETCD_DATA_DIR="${BASETMPDIR}/etcd"
export ETCD_DATA_DIR
mkdir -p "${ETCD_DATA_DIR}"
}
readonly -f os::util::environment::setup_etcd_vars
# os::util::environment::setup_server_vars sets up environment variables necessary for interacting with the server
#
# Globals:
# - BASETMPDIR
# - KUBELET_HOST
# - API_BIND_HOST
# - API_HOST
# - API_PORT
# - API_SCHEME
# - PUBLIC_MASTER_HOST
# Arguments:
# None
# Returns:
# - export API_BIND_HOST
# - export API_HOST
# - export API_PORT
# - export API_SCHEME
# - export SERVER_CONFIG_DIR
# - export MASTER_CONFIG_DIR
# - export NODE_CONFIG_DIR
function os::util::environment::setup_server_vars() {
# turn on cache mutation detector every time we start a server
KUBE_CACHE_MUTATION_DETECTOR="${KUBE_CACHE_MUTATION_DETECTOR:-true}"
export KUBE_CACHE_MUTATION_DETECTOR
API_BIND_HOST="${API_BIND_HOST:-$(openshift start --print-ip || echo "127.0.0.1")}"
export API_BIND_HOST
API_HOST="${API_HOST:-${API_BIND_HOST}}"
export API_HOST
API_PORT="${API_PORT:-8443}"
export API_PORT
API_SCHEME="${API_SCHEME:-https}"
export API_SCHEME
MASTER_ADDR="${API_SCHEME}://${API_HOST}:${API_PORT}"
export MASTER_ADDR
PUBLIC_MASTER_HOST="${PUBLIC_MASTER_HOST:-${API_HOST}}"
export PUBLIC_MASTER_HOST
SERVER_CONFIG_DIR="${BASETMPDIR}/openshift.local.config"
export SERVER_CONFIG_DIR
MASTER_CONFIG_DIR="${SERVER_CONFIG_DIR}/master"
export MASTER_CONFIG_DIR
NODE_CONFIG_DIR="${SERVER_CONFIG_DIR}/node-${KUBELET_HOST}"
export NODE_CONFIG_DIR
mkdir -p "${SERVER_CONFIG_DIR}" "${MASTER_CONFIG_DIR}" "${NODE_CONFIG_DIR}"
}
readonly -f os::util::environment::setup_server_vars
# os::util::environment::setup_images_vars sets up environment variables necessary for interacting with release images
#
# Globals:
# - OS_ROOT
# - USE_IMAGES
# Arguments:
# None
# Returns:
# - export USE_IMAGES
# - export TAG
# - export MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY
function os::util::environment::setup_images_vars() {
# Use either the latest release built images, or latest.
if [[ -z "${USE_IMAGES-}" ]]; then
TAG='latest'
export TAG
USE_IMAGES="openshift/origin-\${component}:latest"
export USE_IMAGES
if [[ -e "${OS_ROOT}/_output/local/releases/.commit" ]]; then
TAG="$(cat "${OS_ROOT}/_output/local/releases/.commit")"
export TAG
USE_IMAGES="openshift/origin-\${component}:${TAG}"
export USE_IMAGES
fi
fi
export MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY="${MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY:-3}"
}
readonly -f os::util::environment::setup_images_vars