mirror of
https://github.com/ansible/awx.git
synced 2026-02-18 11:40:05 -03:30
Updates to callback scripts that include retry functionality for bash and extra_vars handling for PowerShell
Signed-off-by: Rob Ruma <robruma@users.noreply.github.com>
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
fatal() {
|
||||
if [ -n "${2}" ]; then
|
||||
echo -e "Error: ${2}"
|
||||
fi
|
||||
exit ${1}
|
||||
if [ -n "${2}" ]; then
|
||||
echo -e "Error: ${2}"
|
||||
fi
|
||||
exit ${1}
|
||||
}
|
||||
|
||||
usage() {
|
||||
@@ -29,31 +29,31 @@ INSECURE=""
|
||||
# Parse arguments
|
||||
while getopts “hks:c:t:s:e:” OPTION
|
||||
do
|
||||
case ${OPTION} in
|
||||
h)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
s)
|
||||
TOWER_SERVER=${OPTARG}
|
||||
;;
|
||||
k)
|
||||
INSECURE="-k"
|
||||
;;
|
||||
c)
|
||||
HOST_CFG_KEY=${OPTARG}
|
||||
;;
|
||||
t)
|
||||
TEMPLATE_ID=${OPTARG}
|
||||
;;
|
||||
e)
|
||||
EXTRA_VARS=${OPTARG}
|
||||
;;
|
||||
?)
|
||||
usage
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
case ${OPTION} in
|
||||
h)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
s)
|
||||
TOWER_SERVER=${OPTARG}
|
||||
;;
|
||||
k)
|
||||
INSECURE="-k"
|
||||
;;
|
||||
c)
|
||||
HOST_CFG_KEY=${OPTARG}
|
||||
;;
|
||||
t)
|
||||
TEMPLATE_ID=${OPTARG}
|
||||
;;
|
||||
e)
|
||||
EXTRA_VARS=${OPTARG}
|
||||
;;
|
||||
?)
|
||||
usage
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Validate required arguments
|
||||
@@ -65,21 +65,32 @@ test -z ${TEMPLATE_ID} && fatal 1 "Missing required -t argument"
|
||||
|
||||
# Generate curl --data parameter
|
||||
if [ -n "${EXTRA_VARS}" ]; then
|
||||
CURL_DATA="{\"host_config_key\": \"${HOST_CFG_KEY}\", \"extra_vars\": \"${EXTRA_VARS}\"}"
|
||||
CURL_DATA="{\"host_config_key\": \"${HOST_CFG_KEY}\", \"extra_vars\": \"${EXTRA_VARS}\"}"
|
||||
else
|
||||
CURL_DATA="{\"host_config_key\": \"${HOST_CFG_KEY}\"}"
|
||||
CURL_DATA="{\"host_config_key\": \"${HOST_CFG_KEY}\"}"
|
||||
fi
|
||||
|
||||
set -o pipefail
|
||||
HTTP_STATUS=$(curl ${INSECURE} -s -i -X POST -H 'Content-Type:application/json' --data "$CURL_DATA" ${TOWER_SERVER}/api/v1/job_templates/${TEMPLATE_ID}/callback/ 2>&1 | head -n1 | awk '{print $2}')
|
||||
CURL_RC=$?
|
||||
if [ ${CURL_RC} -ne 0 ]; then
|
||||
# Success on any 2xx status received, failure on only 404 status received, retry any other status every min for up to 10 min
|
||||
RETRY_ATTEMPTS=10
|
||||
ATTEMPT=0
|
||||
while [[ $ATTEMPT -lt $RETRY_ATTEMPTS ]]
|
||||
do
|
||||
set -o pipefail
|
||||
HTTP_STATUS=$(curl ${INSECURE} -s -i -X POST -H 'Content-Type:application/json' --data "$CURL_DATA" ${TOWER_SERVER}/api/v2/job_templates/${TEMPLATE_ID}/callback/ 2>&1 | head -n1 | awk '{print $2}')
|
||||
CURL_RC=$?
|
||||
if [ ${CURL_RC} -ne 0 ]; then
|
||||
fatal ${CURL_RC} "curl exited with ${CURL_RC}, halting."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Extract http status code
|
||||
if [[ ${HTTP_STATUS} -ge 300 ]]; then
|
||||
fatal 1 "${HTTP_STATUS} received, encountered problem, halting."
|
||||
else
|
||||
# Extract http status code
|
||||
if [[ ${HTTP_STATUS} =~ ^2[0-9]+$ ]]; then
|
||||
echo "Success: ${HTTP_STATUS} received."
|
||||
fi
|
||||
break
|
||||
elif [[ ${HTTP_STATUS} =~ ^404$ ]]; then
|
||||
fatal 1 "Failed: ${HTTP_STATUS} received, encountered problem, halting."
|
||||
else
|
||||
ATTEMPT=$((ATTEMPT + 1))
|
||||
echo "Failed: ${HTTP_STATUS} received, executing retry #${ATTEMPT} in 1 minute."
|
||||
sleep 60
|
||||
fi
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user