Skip to content

Instantly share code, notes, and snippets.

@shokoe
Created January 18, 2018 14:02
Show Gist options
  • Save shokoe/cf20113cc5dd93c5bf7f77ae0990b5de to your computer and use it in GitHub Desktop.
Save shokoe/cf20113cc5dd93c5bf7f77ae0990b5de to your computer and use it in GitHub Desktop.
Wait4 something scriptlet with some examples - useful for AWS api automation
wait4(){
local data_func=$1; local data_func_var=$2; local data_expect=$3;
local timeout=$4; local sleep_time=$5; local exit_on_timeout=${6:-0};
local wait4_s=`date +%s`
local data_out data_prog
while true; do
# error on getting info
read data_out data_state <<< "`$data_func $data_func_var`"
[ ! -z "$data_state" ] && data_state=":$data_state"
if [ -z "$data_out" ]; then
log_out "CRITICAL: failed to get status for '$data_func $data_func_var'"
#exit 1
return 1
fi
# successful
if [ "$data_out" = "$data_expect" ]; then
log_out " wait4 '$data_func $data_func_var' successful - [${data_out}${data_prog}] ($((`date +%s`-$wait4_s))s)"
return 0
fi
log_out " wait4 '$data_func $data_func_var' = '$data_expect' - [${data_out}${data_prog}] ($((`date +%s`-$wait4_s))s < ${timeout}s)"
# global timeout
if [ $((`date +%s`-$wait4_s)) -gt $timeout ]; then
log_out " wait4 '$data_func $data_func_var' timed out ($((`date +%s`-$wait4_s))s > ${timeout}s)"
(($exit_on_timeout)) && exit 2 || return 2
fi
sleep $sleep_time
done
return 66
}
wait4_ins_state(){ aws ec2 describe-instances --instance-ids $1 --output json | jq -r '.Reservations[0].Instances[0].State.Name'; }
wait4_ins_ssh(){ Econn $1 "echo SshIsUp" 2>/dev/null || echo Down; }
wait4_app_ping(){ Econn $ins_name "curl -m 4 -s -w '%{http_code}' -o /dev/null -k $1"; }
wait4_naemon_green(){
local all=$(Econn $naemon_serv "echo -e 'GET services\nColumns: host_name description last_check last_state\nFilter: host_name = $1' | $naemon_unixcat $naemon_sock | awk -v N=\`date +%s\` -F\; '{printf \"service:%s:%s:%d:%d\n\", \$1, \$2, N-\$3, \$4}'" | sed '1d')
#echo "$all" >&2
[ -z "$all" ] && echo ERROR:NoData && return
local err=$(echo "$all" | awk -F: '$5!=0 || $4>120 {print $3}' | sed 's# #_#g' | xargs | sed 's# #,#g')
[ -z "$err" ] && echo AllGreen || echo Errors:$err
}
wait4_elb_state(){
set ${1/:/ }
local O=`aws elb describe-instance-health --load-balancer-name $2 --instances $1 --output json | jq -r ".InstanceStates[].State"`
#echo "--- $?" >&2
[ -z "$O" ] && echo "NotFound" || echo $O
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment