blob: e34e1db91273610e848ecbe0cba37fa2b368e02d [file] [log] [blame]
#!/bin/bash
# Function used to return list of node names according
# to given string parameter match criteria
function get_nodes_names {
# Enforce 1st parameter availability
if [ -z "$1" ]; then
match="[0-9]"
else
match="$1"
fi
salt-call pillar.get linux:network:host --out key | sed 's/:.*//' | grep "$match"
}
# Function used to wait for node availability
# (aka answering to salt pings)
# 1st parameter (mandatory) is number of nodes to wait for
# 2nd parameter (optional) is nodes names to wait for
# (* = all nodes is default)
function wait_for {
# Enforce 1st parameter availability
if [ -z "$1" ]; then
echo "wait_for function requires at least 1 parameter"
return 1
fi
if [ "$1" -lt "1" ]; then
echo "wait_for function requires 1st parameter to be number greater than 0 ($1 invalid)"
return 1
fi
wanted=$1
nodes=${2:-"*"}
# Default max waiting time is 5mn
MAX_WAIT=${MAX_WAIT:-300}
while true; do
nb_nodes=$(salt "$nodes" test.ping --out txt | grep -c True)
if [ -n "$nb_nodes" ] && [ "$nb_nodes" -eq "$wanted" ]; then
echo "All nodes are now answering to salt pings"
break
fi
MAX_WAIT=$(( MAX_WAIT - 15 ))
if [ $MAX_WAIT -le 0 ]; then
echo "Only $nb_nodes answering to salt pings out of $wanted after maximum timeout"
return 2
fi
echo -n "Only $nb_nodes answering to salt pings out of $wanted. Waiting a bit longer ..."
sleep 15
echo
done
return 0
}
# Waits for an HTTP service to be ready
function wait_for_http_service {
local url=$1
local timeout=${2:-120}
local expected_code=${3:-200}
start=$(date +'%s')
while [ $(( $(date +'%s') - start )) -lt "$timeout" ]; do
code=$(curl -ksL -w '%{http_code}' -o /dev/null "$url")
if [[ $code == "$expected_code" ]]; then
echo "$url responded with $code"
break
fi
sleep 1
done
}
# Returns the value of _param:$1 from the pillar
function get_param_value {
salt-call pillar.data "_param:$1" --out key | grep "_param:" | awk '{print $2}'
}