2023-01-20 15:25:14 +00:00
|
|
|
#!/usr/bin/env bash
|
2023-03-15 16:00:52 +00:00
|
|
|
# Copyright (c) HashiCorp, Inc.
|
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2023-01-20 15:25:14 +00:00
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
binpath=${vault_install_dir}/vault
|
|
|
|
|
|
|
|
node_addr=${remove_vault_cluster_addr}
|
|
|
|
|
|
|
|
fail() {
|
|
|
|
echo "$1" 2>&1
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
retry() {
|
|
|
|
local retries=$1
|
|
|
|
shift
|
|
|
|
local count=0
|
|
|
|
|
|
|
|
until "$@"; do
|
|
|
|
exit=$?
|
|
|
|
wait=$((2 ** count))
|
|
|
|
count=$((count + 1))
|
|
|
|
if [ "$count" -lt "$retries" ]; then
|
|
|
|
sleep "$wait"
|
|
|
|
echo "retry $count"
|
|
|
|
else
|
|
|
|
return "$exit"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
remove_peer() {
|
|
|
|
node_id=$($binpath operator raft list-peers -format json | jq -Mr --argjson expected "false" '.data.config.servers[] | select(.address=='\""$node_addr"\"') | select(.voter==$expected) | .node_id')
|
|
|
|
if [ "$?" != "0" ];then
|
|
|
|
fail "failed to get node id of a non-voter node"
|
|
|
|
fi
|
|
|
|
|
|
|
|
$binpath operator raft remove-peer "$node_id"
|
|
|
|
}
|
|
|
|
|
|
|
|
test -x "$binpath" || fail "unable to locate vault binary at $binpath"
|
|
|
|
|
|
|
|
# Retry a few times because it can take some time for things to settle after autopilot upgrade
|
|
|
|
retry 5 remove_peer
|