etcd3 as a base service
ETCD_DOWNLOAD_URL is set to github url, in our CI, we can point ETCD_DOWNLOAD_URL to a url in tarballs.openstack.org possibly in devstack-gate Download the etcd binaries and drop them into /opt/stack/bin and use it from there. Cache the tgz for subsequent use (local workflow) daemon-reload is called twice once from inside the write_user_unit_file and then when we adjust the entries with additional things recommended by the etcd team. We need a better way to do this in the future. Added a TODO to verify the downloaded artifact later. The etcd team posts gpg signature, we could verify that or run sha256sum and hard code that in lib/etcd3 file. We would have to update it whenever we bump the etcd3 version. We use the public key "CoreOS Application Signing Key <security@coreos.com>" with ID FC8A365E to verify the integrity of the downloaded file Any jobs that need to be run on architectures where v3.1.7 is not available should rey the v3.2.0-rcX release candidates. We can switch to v3.2.0 when it gets released. Initial version of this code was borrowed from the dragonflow repo: http://git.openstack.org/cgit/openstack/dragonflow/tree/devstack Change-Id: Ibbb430fb1dbf66942168e0cb52d990ab6a2eb8d7
This commit is contained in:
parent
6a62619cbc
commit
546656fc05
126
lib/etcd3
Normal file
126
lib/etcd3
Normal file
@ -0,0 +1,126 @@
|
||||
#!/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 {
|
||||
_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 {
|
||||
$SYSTEMCTL stop $ETCD_SYSTEMD_SERVICE
|
||||
}
|
||||
|
||||
function cleanup_etcd {
|
||||
$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:
|
6
stack.sh
6
stack.sh
@ -574,6 +574,7 @@ source $TOP_DIR/lib/neutron
|
||||
source $TOP_DIR/lib/ldap
|
||||
source $TOP_DIR/lib/dstat
|
||||
source $TOP_DIR/lib/dlm
|
||||
source $TOP_DIR/lib/etcd3
|
||||
source $TOP_DIR/lib/os_brick
|
||||
|
||||
# Extras Source
|
||||
@ -1043,6 +1044,11 @@ fi
|
||||
# A better kind of sysstat, with the top process per time slice
|
||||
start_dstat
|
||||
|
||||
# Etcd
|
||||
# -----
|
||||
|
||||
# etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines
|
||||
start_etcd3
|
||||
|
||||
# Keystone
|
||||
# --------
|
||||
|
2
stackrc
2
stackrc
@ -65,7 +65,7 @@ if ! isset ENABLED_SERVICES ; then
|
||||
# Dashboard
|
||||
ENABLED_SERVICES+=,horizon
|
||||
# Additional services
|
||||
ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat
|
||||
ENABLED_SERVICES+=,rabbit,tempest,mysql,etcd3,dstat
|
||||
fi
|
||||
|
||||
# Global toggle for enabling services under mod_wsgi. If this is set to
|
||||
|
@ -69,6 +69,7 @@ source $TOP_DIR/lib/swift
|
||||
source $TOP_DIR/lib/neutron
|
||||
source $TOP_DIR/lib/ldap
|
||||
source $TOP_DIR/lib/dstat
|
||||
source $TOP_DIR/lib/etcd3
|
||||
source $TOP_DIR/lib/dlm
|
||||
|
||||
# Extras Source
|
||||
@ -162,6 +163,11 @@ if is_service_enabled neutron; then
|
||||
cleanup_neutron
|
||||
fi
|
||||
|
||||
if is_service_enabled etcd3; then
|
||||
stop_etcd3
|
||||
cleanup_etcd3
|
||||
fi
|
||||
|
||||
if is_service_enabled dstat; then
|
||||
stop_dstat
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user