| #!/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}' |
| } |