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