blob: 934bbb004fdd123ef43c3d82232d4818f3026fc4 [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"
Hongbin Lude858062017-05-24 18:42:33 +000030ETCD_PORT=2379
Davanum Srinivas546656f2017-03-14 07:05:19 -040031
32if is_ubuntu ; then
33 UBUNTU_RELEASE_BASE_NUM=`lsb_release -r | awk '{print $2}' | cut -d '.' -f 1`
34fi
35
36# start_etcd3() - Starts to run the etcd process
37function start_etcd3 {
Davanum Srinivas546656f2017-03-14 07:05:19 -040038 local cmd="$ETCD_BIN_DIR/etcd"
39 cmd+=" --name $HOSTNAME --data-dir $ETCD_DATA_DIR"
40 cmd+=" --initial-cluster-state new --initial-cluster-token etcd-cluster-01"
41 cmd+=" --initial-cluster $HOSTNAME=http://$SERVICE_HOST:2380"
42 cmd+=" --initial-advertise-peer-urls http://$SERVICE_HOST:2380"
Antoni Segura Puimedon19279b02017-06-16 16:03:32 +020043 cmd+=" --advertise-client-urls http://${HOST_IP}:$ETCD_PORT"
Davanum Srinivas546656f2017-03-14 07:05:19 -040044 cmd+=" --listen-peer-urls http://0.0.0.0:2380 "
Antoni Segura Puimedon19279b02017-06-16 16:03:32 +020045 cmd+=" --listen-client-urls http://${HOST_IP}:$ETCD_PORT"
Davanum Srinivas546656f2017-03-14 07:05:19 -040046
47 local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
48 write_user_unit_file $ETCD_SYSTEMD_SERVICE "$cmd" "" "root"
49
50 iniset -sudo $unitfile "Unit" "After" "network.target"
51 iniset -sudo $unitfile "Service" "Type" "notify"
52 iniset -sudo $unitfile "Service" "Restart" "on-failure"
53 iniset -sudo $unitfile "Service" "LimitNOFILE" "65536"
Kevin Zhaoeca7ce72017-08-04 11:50:36 +080054 if is_arch "aarch64"; then
55 iniset -sudo $unitfile "Service" "Environment" "ETCD_UNSUPPORTED_ARCH=arm64"
56 fi
Davanum Srinivas546656f2017-03-14 07:05:19 -040057
58 $SYSTEMCTL daemon-reload
59 $SYSTEMCTL enable $ETCD_SYSTEMD_SERVICE
60 $SYSTEMCTL start $ETCD_SYSTEMD_SERVICE
61}
62
63# stop_etcd3() stops the etcd3 process
64function stop_etcd3 {
Davanum Srinivasd8283fd2017-05-23 22:12:39 -040065 # Don't install in sub nodes (multinode scenario)
66 if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
67 return
68 fi
69
Davanum Srinivas546656f2017-03-14 07:05:19 -040070 $SYSTEMCTL stop $ETCD_SYSTEMD_SERVICE
71}
72
Davanum Srinivas853b4752017-05-25 13:03:10 -040073function cleanup_etcd3 {
Davanum Srinivasd8283fd2017-05-23 22:12:39 -040074 # Don't install in sub nodes (multinode scenario)
75 if [ "$SERVICE_HOST" != "$HOST_IP" ]; then
76 return
77 fi
78
Davanum Srinivas546656f2017-03-14 07:05:19 -040079 $SYSTEMCTL disable $ETCD_SYSTEMD_SERVICE
80
81 local unitfile="$SYSTEMD_DIR/$ETCD_SYSTEMD_SERVICE"
82 sudo rm -f $unitfile
83
84 $SYSTEMCTL daemon-reload
85
86 sudo rm -rf $ETCD_DATA_DIR
87}
88
Sean Dague62b56602017-06-19 08:27:16 -040089function install_etcd3 {
Davanum Srinivas546656f2017-03-14 07:05:19 -040090 echo "Installing etcd"
91
Davanum Srinivas546656f2017-03-14 07:05:19 -040092 # Create the necessary directories
93 sudo mkdir -p $ETCD_BIN_DIR
94 sudo mkdir -p $ETCD_DATA_DIR
95
96 # Download and cache the etcd tgz for subsequent use
Monty Taylord8bb2202017-09-03 12:13:59 -050097 local etcd_file
98 etcd_file="$(get_extra_file $ETCD_DOWNLOAD_LOCATION)"
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +010099 if [ ! -f "$FILES/etcd-$ETCD_VERSION-linux-$ETCD_ARCH/etcd" ]; then
Monty Taylord8bb2202017-09-03 12:13:59 -0500100 echo "${ETCD_SHA256} $etcd_file" > $FILES/etcd.sha256sum
yuanke weic652a492017-09-17 22:18:07 +0800101 # NOTE(yuanke wei): rm the damaged file when checksum fails
102 sha256sum -c $FILES/etcd.sha256sum || (sudo rm -f $etcd_file; exit 1)
Davanum Srinivas546656f2017-03-14 07:05:19 -0400103
Monty Taylord8bb2202017-09-03 12:13:59 -0500104 tar xzvf $etcd_file -C $FILES
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +0100105 sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
Davanum Srinivas546656f2017-03-14 07:05:19 -0400106 fi
107 if [ ! -f "$ETCD_BIN_DIR/etcd" ]; then
Rodolfo Alonso Hernandez6f962a22017-05-31 11:00:08 +0100108 sudo cp $FILES/$ETCD_NAME/etcd $ETCD_BIN_DIR/etcd
Davanum Srinivas546656f2017-03-14 07:05:19 -0400109 fi
110}
111
112# Restore xtrace
113$_XTRACE_ETCD3
114
115# Tell emacs to use shell-script-mode
116## Local variables:
117## mode: shell-script
118## End: