149 lines
4.3 KiB
Bash
149 lines
4.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
# lib/etcd3
|
|
#
|
|
# Functions to control the installation and configuration of etcd 3.x
|
|
# that provides a key-value store (and possibly other functions).
|
|
|
|
# Dependencies:
|
|
#
|
|
# - ``functions`` file
|
|
|
|
# ``stack.sh`` calls the entry points in this order:
|
|
#
|
|
# - start_etcd3
|
|
# - stop_etcd3
|
|
# - cleanup_etcd3
|
|
|
|
# Save trace setting
|
|
_XTRACE_ETCD3=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
|
|
# Defaults
|
|
# --------
|
|
|
|
# Set up default values for etcd
|
|
ETCD_DOWNLOAD_URL=${ETCD_DOWNLOAD_URL:-https://github.com/coreos/etcd/releases/download}
|
|
ETCD_VERSION=${ETCD_VERSION:-v3.1.7}
|
|
ETCD_DATA_DIR="$DEST/data/etcd"
|
|
ETCD_SYSTEMD_SERVICE="devstack@etcd.service"
|
|
ETCD_BIN_DIR="$DEST/bin"
|
|
ETCD_SHA256_AMD64="4fde194bbcd259401e2b5c462dfa579ee7f6af539f13f130b8f5b4f52e3b3c52"
|
|
# NOTE(sdague): etcd v3.1.7 doesn't have anything for these architectures, though 3.2.0 does.
|
|
ETCD_SHA256_ARM64=""
|
|
ETCD_SHA256_PPC64=""
|
|
ETCD_PORT=2379
|
|
|
|
if is_ubuntu ; then
|
|
UBUNTU_RELEASE_BASE_NUM=`lsb_release -r | awk '{print $2}' | cut -d '.' -f 1`
|
|
fi
|
|
|
|
# start_etcd3() - Starts to run the etcd process
|
|
function start_etcd3 {
|
|
# Don't install in sub nodes (multinode scenario)
|
|
if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
|
|
return
|
|
fi
|
|
|
|
_install_etcd
|
|
|
|
local cmd="$ETCD_BIN_DIR/etcd"
|
|
cmd+=" --name $HOSTNAME --data-dir $ETCD_DATA_DIR"
|
|
cmd+=" --initial-cluster-state new --initial-cluster-token etcd-cluster-01"
|
|
cmd+=" --initial-cluster $HOSTNAME=http://$SERVICE_HOST:2380"
|
|
cmd+=" --initial-advertise-peer-urls http://$SERVICE_HOST:2380"
|
|
cmd+=" --advertise-client-urls http://$SERVICE_HOST:$ETCD_PORT"
|
|
cmd+=" --listen-peer-urls http://0.0.0.0:2380 "
|
|
cmd+=" --listen-client-urls http://$SERVICE_HOST:$ETCD_PORT"
|
|
|
|
local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
|
|
write_user_unit_file $ETCD_SYSTEMD_SERVICE "$cmd" "" "root"
|
|
|
|
iniset -sudo $unitfile "Unit" "After" "network.target"
|
|
iniset -sudo $unitfile "Service" "Type" "notify"
|
|
iniset -sudo $unitfile "Service" "Restart" "on-failure"
|
|
iniset -sudo $unitfile "Service" "LimitNOFILE" "65536"
|
|
|
|
$SYSTEMCTL daemon-reload
|
|
$SYSTEMCTL enable $ETCD_SYSTEMD_SERVICE
|
|
$SYSTEMCTL start $ETCD_SYSTEMD_SERVICE
|
|
}
|
|
|
|
# stop_etcd3() stops the etcd3 process
|
|
function stop_etcd3 {
|
|
# Don't install in sub nodes (multinode scenario)
|
|
if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
|
|
return
|
|
fi
|
|
|
|
$SYSTEMCTL stop $ETCD_SYSTEMD_SERVICE
|
|
}
|
|
|
|
function cleanup_etcd3 {
|
|
# Don't install in sub nodes (multinode scenario)
|
|
if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
|
|
return
|
|
fi
|
|
|
|
$SYSTEMCTL disable $ETCD_SYSTEMD_SERVICE
|
|
|
|
local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
|
|
sudo rm -f $unitfile
|
|
|
|
$SYSTEMCTL daemon-reload
|
|
|
|
sudo rm -rf $ETCD_DATA_DIR
|
|
}
|
|
|
|
function _install_etcd {
|
|
echo "Installing etcd"
|
|
|
|
# Make sure etcd3 downloads the correct architecture
|
|
if is_arch "x86_64"; then
|
|
ETCD_ARCH="amd64"
|
|
ETCD_SHA256=${ETCD_SHA256:-$ETCD_SHA256_AMD64}
|
|
elif is_arch "aarch64"; then
|
|
ETCD_ARCH="arm64"
|
|
ETCD_SHA256=${ETCD_SHA256:-$ETCD_SHA256_ARM64}
|
|
elif is_arch "ppc64le"; then
|
|
ETCD_ARCH="ppc64le"
|
|
ETCD_SHA256=${ETCD_SHA256:-$ETCD_SHA256_PPC64}
|
|
else
|
|
exit_distro_not_supported "invalid hardware type - $ETCD_ARCH"
|
|
fi
|
|
|
|
ETCD_NAME=etcd-$ETCD_VERSION-linux-$ETCD_ARCH
|
|
|
|
# Install the libraries needed. Note: tooz for example does not have a hard dependency on these libraries
|
|
pip_install etcd3
|
|
pip_install etcd3gw
|
|
|
|
# Create the necessary directories
|
|
sudo mkdir -p $ETCD_BIN_DIR
|
|
sudo mkdir -p $ETCD_DATA_DIR
|
|
|
|
# Download and cache the etcd tgz for subsequent use
|
|
if [ ! -f "$FILES/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd" ]; then
|
|
ETCD_DOWNLOAD_FILE=$ETCD_NAME.tar.gz
|
|
wget $ETCD_DOWNLOAD_URL/$ETCD_VERSION/$ETCD_DOWNLOAD_FILE -O $FILES/$ETCD_DOWNLOAD_FILE
|
|
echo "${ETCD_SHA256} $FILES/${ETCD_DOWNLOAD_FILE}" > $FILES/etcd.sha256sum
|
|
# NOTE(sdague): this should go fatal if this fails
|
|
sha256sum -c $FILES/etcd.sha256sum
|
|
|
|
tar xzvf $FILES/$ETCD_DOWNLOAD_FILE -C $FILES
|
|
sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
|
|
fi
|
|
if [ ! -f "$ETCD_BIN_DIR/etcd" ]; then
|
|
sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
|
|
fi
|
|
}
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_ETCD3
|
|
|
|
# Tell emacs to use shell-script-mode
|
|
## Local variables:
|
|
## mode: shell-script
|
|
## End:
|