mirror of
https://github.com/ansible/awx.git
synced 2024-10-31 23:51:09 +03:00
e8b026648f
Signed-off-by: Rob Ruma <robruma@users.noreply.github.com>
97 lines
2.4 KiB
Bash
Executable File
97 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
fatal() {
|
|
if [ -n "${2}" ]; then
|
|
echo -e "Error: ${2}"
|
|
fi
|
|
exit ${1}
|
|
}
|
|
|
|
usage() {
|
|
cat << EOF
|
|
Usage: $0 <options>
|
|
|
|
Request server configuration from Ansible Tower.
|
|
|
|
OPTIONS:
|
|
-h Show this message
|
|
-s Tower server (e.g. https://tower.example.com) (required)
|
|
-k Allow insecure SSL connections and transfers
|
|
-c Host config key (required)
|
|
-t Job template ID (required)
|
|
-e Extra variables
|
|
EOF
|
|
}
|
|
|
|
# Initialize variables
|
|
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
|
|
done
|
|
|
|
# Validate required arguments
|
|
test -z ${TOWER_SERVER} && fatal 1 "Missing required -s argument"
|
|
# Make sure TOWER_SERVER starts with http:// or https://
|
|
[[ "${TOWER_SERVER}" =~ ^https?:// ]] || fatal 1 "Tower server must begin with http:// or https://"
|
|
test -z ${HOST_CFG_KEY} && fatal 1 "Missing required -c argument"
|
|
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}\"}"
|
|
else
|
|
CURL_DATA="{\"host_config_key\": \"${HOST_CFG_KEY}\"}"
|
|
fi
|
|
|
|
# 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
|
|
|
|
# Extract http status code
|
|
if [[ ${HTTP_STATUS} =~ ^2[0-9]+$ ]]; then
|
|
echo "Success: ${HTTP_STATUS} received."
|
|
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
|