d8283fde66
We need to handle this better, for now, just don't install etcd in the sub nodes. We need to setup the proper clustering mechanism if we want to have etcd3 running in multiple nodes Change-Id: I8dd385e3c993942473e67d04367cdf74495dbeef
142 lines
4.2 KiB
Bash
142 lines
4.2 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"
|
|
|
|
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:2379"
|
|
cmd+=" --listen-peer-urls http://0.0.0.0:2380 "
|
|
cmd+=" --listen-client-urls http://$SERVICE_HOST:2379"
|
|
|
|
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_etcd {
|
|
# 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"
|
|
elif is_arch "aarch64"; then
|
|
ETCD_ARCH="arm64"
|
|
elif is_arch "ppc64le"; then
|
|
ETCD_ARCH="ppc64le"
|
|
else
|
|
exit_distro_not_supported "invalid hardware type - $ETCD_ARCH"
|
|
fi
|
|
|
|
# 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 "$DEST/etcd/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd" ]; then
|
|
mkdir -p $DEST/etcd
|
|
ETCD_DOWNLOAD_FILE=etcd-$ETCD_VERSION-linux-$ETCD_ARCH.tar.gz
|
|
wget $ETCD_DOWNLOAD_URL/$ETCD_VERSION/$ETCD_DOWNLOAD_FILE -O $DEST/etcd/$ETCD_DOWNLOAD_FILE
|
|
wget $ETCD_DOWNLOAD_URL/$ETCD_VERSION/$ETCD_DOWNLOAD_FILE.asc -O $DEST/etcd/$ETCD_DOWNLOAD_FILE.asc
|
|
|
|
# use gpg to verify the artifact, use a backup key server in case the first one is down for some reason
|
|
gpg --keyserver hkps.pool.sks-keyservers.net --recv-key FC8A365E || gpg --keyserver pgpkeys.mit.edu --recv-key FC8A365E
|
|
gpg --verify $DEST/etcd/$ETCD_DOWNLOAD_FILE.asc $DEST/etcd/$ETCD_DOWNLOAD_FILE
|
|
|
|
tar xzvf $DEST/etcd/$ETCD_DOWNLOAD_FILE -C $DEST/etcd
|
|
sudo cp $DEST/etcd/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd $ETCD_BIN_DIR/etcd
|
|
fi
|
|
if [ ! -f "$ETCD_BIN_DIR/etcd" ]; then
|
|
sudo cp $DEST/etcd/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd $ETCD_BIN_DIR/etcd
|
|
fi
|
|
}
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_ETCD3
|
|
|
|
# Tell emacs to use shell-script-mode
|
|
## Local variables:
|
|
## mode: shell-script
|
|
## End:
|