blob: 0d22de8c73be9f376b925fb2a9e747dfb0204989 [file] [log] [blame]
Davanum Srinivas546656f2017-03-14 07:05:19 -04001#!/bin/bash
2#
3# lib/etcd3
4#
5# Functions to control the installation and configuration of etcd 3.x
6# that provides a key-value store (and possibly other functions).
7
8# Dependencies:
9#
10# - ``functions`` file
11
12# ``stack.sh`` calls the entry points in this order:
13#
14# - start_etcd3
15# - stop_etcd3
16# - cleanup_etcd3
17
18# Save trace setting
19_XTRACE_ETCD3=$(set +o | grep xtrace)
20set +o xtrace
21
22
23# Defaults
24# --------
25
26# Set up default values for etcd
Sławek Kapłoński08367ba2017-08-27 08:44:27 +000027ETCD_DATA_DIR="$DATA_DIR/etcd"
Davanum Srinivas546656f2017-03-14 07:05:19 -040028ETCD_SYSTEMD_SERVICE="devstack@etcd.service"
29ETCD_BIN_DIR="$DEST/bin"
Michał Dulko6757a9c2018-12-21 13:17:05 +010030# Option below will mount ETCD_DATA_DIR as ramdisk, which is useful to run
31# etcd-heavy services in the gate VM's, e.g. Kubernetes.
Matt Riedemann1516e722019-02-05 11:21:39 -050032ETCD_USE_RAMDISK=$(trueorfalse True ETCD_USE_RAMDISK)
Michał Dulko6757a9c2018-12-21 13:17:05 +010033ETCD_RAMDISK_MB=${ETCD_RAMDISK_MB:-512}
Davanum Srinivas546656f2017-03-14 07:05:19 -040034
35if is_ubuntu ; then
36 UBUNTU_RELEASE_BASE_NUM=`lsb_release -r | awk '{print $2}' | cut -d '.' -f 1`
37fi
38
39# start_etcd3() - Starts to run the etcd process
40function start_etcd3 {
Davanum Srinivas546656f2017-03-14 07:05:19 -040041 local cmd="$ETCD_BIN_DIR/etcd"
42 cmd+=" --name $HOSTNAME --data-dir $ETCD_DATA_DIR"
43 cmd+=" --initial-cluster-state new --initial-cluster-token etcd-cluster-01"
Davanum Srinivas27367be2017-11-28 08:20:48 -050044 cmd+=" --initial-cluster $HOSTNAME=http://$SERVICE_HOST:$ETCD_PEER_PORT"
45 cmd+=" --initial-advertise-peer-urls http://$SERVICE_HOST:$ETCD_PEER_PORT"
Jens Harbott146332e2017-09-20 06:18:08 +000046 cmd+=" --advertise-client-urls http://$SERVICE_HOST:$ETCD_PORT"
47 if [ "$SERVICE_LISTEN_ADDRESS" == "::" ]; then
Davanum Srinivas27367be2017-11-28 08:20:48 -050048 cmd+=" --listen-peer-urls http://[::]:$ETCD_PEER_PORT "
Jens Harbott146332e2017-09-20 06:18:08 +000049 else
Davanum Srinivas27367be2017-11-28 08:20:48 -050050 cmd+=" --listen-peer-urls http://0.0.0.0:$ETCD_PEER_PORT "
Jens Harbott146332e2017-09-20 06:18:08 +000051 fi
52 cmd+=" --listen-client-urls http://$SERVICE_HOST:$ETCD_PORT"
Michał Dulko119ee662018-12-20 18:55:29 +010053 if [ "$ENABLE_DEBUG_LOG_LEVEL" == "True" ]; then
Takashi Kajinami9e1348f2024-08-20 17:23:02 +090054 cmd+=" --log-level=debug"
Michał Dulko119ee662018-12-20 18:55:29 +010055 fi
Davanum Srinivas546656f2017-03-14 07:05:19 -040056
57 local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
58 write_user_unit_file $ETCD_SYSTEMD_SERVICE "$cmd" "" "root"
59
60 iniset -sudo $unitfile "Unit" "After" "network.target"
61 iniset -sudo $unitfile "Service" "Type" "notify"
62 iniset -sudo $unitfile "Service" "Restart" "on-failure"
63 iniset -sudo $unitfile "Service" "LimitNOFILE" "65536"
Kevin Zhaoeca7ce72017-08-04 11:50:36 +080064 if is_arch "aarch64"; then
65 iniset -sudo $unitfile "Service" "Environment" "ETCD_UNSUPPORTED_ARCH=arm64"
66 fi
Davanum Srinivas546656f2017-03-14 07:05:19 -040067
68 $SYSTEMCTL daemon-reload
69 $SYSTEMCTL enable $ETCD_SYSTEMD_SERVICE
70 $SYSTEMCTL start $ETCD_SYSTEMD_SERVICE
71}
72
73# stop_etcd3() stops the etcd3 process
74function stop_etcd3 {
Davanum Srinivasd8283fd2017-05-23 22:12:39 -040075 # Don't install in sub nodes (multinode scenario)
76 if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
77 return
78 fi
79
Davanum Srinivas546656f2017-03-14 07:05:19 -040080 $SYSTEMCTL stop $ETCD_SYSTEMD_SERVICE
81}
82
Davanum Srinivas853b4752017-05-25 13:03:10 -040083function cleanup_etcd3 {
Davanum Srinivasd8283fd2017-05-23 22:12:39 -040084 # Don't install in sub nodes (multinode scenario)
85 if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
86 return
87 fi
88
Davanum Srinivas546656f2017-03-14 07:05:19 -040089 $SYSTEMCTL disable $ETCD_SYSTEMD_SERVICE
90
91 local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
92 sudo rm -f $unitfile
93
94 $SYSTEMCTL daemon-reload
95
Michał Dulko6757a9c2018-12-21 13:17:05 +010096 if [[ "$ETCD_USE_RAMDISK" == "True" ]]; then
97 sudo umount $ETCD_DATA_DIR
98 fi
Davanum Srinivas546656f2017-03-14 07:05:19 -040099 sudo rm -rf $ETCD_DATA_DIR
100}
101
Sean Dague62b56602017-06-19 08:27:16 -0400102function install_etcd3 {
Davanum Srinivas546656f2017-03-14 07:05:19 -0400103 echo "Installing etcd"
104
Davanum Srinivas546656f2017-03-14 07:05:19 -0400105 # Create the necessary directories
106 sudo mkdir -p $ETCD_BIN_DIR
107 sudo mkdir -p $ETCD_DATA_DIR
Michał Dulko6757a9c2018-12-21 13:17:05 +0100108 if [[ "$ETCD_USE_RAMDISK" == "True" ]]; then
109 sudo mount -t tmpfs -o nodev,nosuid,size=${ETCD_RAMDISK_MB}M tmpfs $ETCD_DATA_DIR
110 fi
Davanum Srinivas546656f2017-03-14 07:05:19 -0400111
112 # Download and cache the etcd tgz for subsequent use
Monty Taylord8bb2202017-09-03 12:13:59 -0500113 local etcd_file
114 etcd_file="$(get_extra_file $ETCD_DOWNLOAD_LOCATION)"
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +0100115 if [ ! -f "$FILES/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd" ]; then
Monty Taylord8bb2202017-09-03 12:13:59 -0500116 echo "${ETCD_SHA256} $etcd_file" > $FILES/etcd.sha256sum
yuanke weic652a492017-09-17 22:18:07 +0800117 # NOTE(yuanke wei): rm the damaged file when checksum fails
118 sha256sum -c $FILES/etcd.sha256sum || (sudo rm -f $etcd_file; exit 1)
Davanum Srinivas546656f2017-03-14 07:05:19 -0400119
Monty Taylord8bb2202017-09-03 12:13:59 -0500120 tar xzvf $etcd_file -C $FILES
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +0100121 sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
Hongbin Luad180e02017-11-29 13:21:30 -0500122 sudo cp $FILES/$ETCD_NAME/etcdctl $ETCD_BIN_DIR/etcdctl
Davanum Srinivas546656f2017-03-14 07:05:19 -0400123 fi
124 if [ ! -f "$ETCD_BIN_DIR/etcd" ]; then
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +0100125 sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
Hongbin Luad180e02017-11-29 13:21:30 -0500126 sudo cp $FILES/$ETCD_NAME/etcdctl $ETCD_BIN_DIR/etcdctl
Davanum Srinivas546656f2017-03-14 07:05:19 -0400127 fi
128}
129
130# Restore xtrace
131$_XTRACE_ETCD3
132
133# Tell emacs to use shell-script-mode
134## Local variables:
135## mode: shell-script
136## End: