Add custom AWX Execution Environment with NetBox support and related scripts

This commit is contained in:
alex-local
2025-09-12 09:44:55 +02:00
parent 585fa54336
commit e423305242
10 changed files with 500 additions and 84 deletions

View File

@@ -0,0 +1,79 @@
#!/usr/bin/env bash
set -euo pipefail
# awx_trigger_inventory_update.sh
# Trigger an AWX inventory source update and print its stdout.
# Usage:
# AWX_HOST=http://... AWX_USER=admin AWX_PASS=secret SRC_ID=9 ./awx_trigger_inventory_update.sh
# Defaults are set to the local minikube/awx values used in this workspace.
AWX_HOST="${AWX_HOST:-http://192.168.49.2:30081}"
AWX_USER="${AWX_USER:-admin}"
AWX_PASS="${AWX_PASS:-Aase#1234!}"
SRC_ID="${SRC_ID:-9}"
TIMEOUT_SECONDS="${TIMEOUT_SECONDS:-60}"
AUTH=("-u" "${AWX_USER}:${AWX_PASS}")
tmpfile=$(mktemp /tmp/awx_inv_resp.XXXX.json)
cleanup() { rm -f "$tmpfile"; }
trap cleanup EXIT
echo "Triggering inventory source update for source id=$SRC_ID on $AWX_HOST"
if ! curl -sS "${AUTH[@]}" -H "Content-Type: application/json" -X POST "$AWX_HOST/api/v2/inventory_sources/$SRC_ID/update/" -o "$tmpfile"; then
echo "Warning: request failed (curl exit non-zero). See contents of $tmpfile:" >&2
cat "$tmpfile" >&2 || true
fi
# Try to read inventory_update id from the POST response
INV_UP_ID=$(jq -r '.inventory_update.id // .id // empty' "$tmpfile" 2>/dev/null || true)
# If not present, poll the inventory_source object to find the active update id
if [ -z "$INV_UP_ID" ]; then
echo "No inventory_update id in initial response, polling inventory_source for current/last update id..."
poll_end=$((SECONDS + 15))
while [ $SECONDS -lt $poll_end ]; do
src_json=$(curl -sS "${AUTH[@]}" "$AWX_HOST/api/v2/inventory_sources/$SRC_ID/" || true)
# prefer current_update -> summary_fields.current_update -> last_job -> summary_fields.last_job -> last_update
INV_UP_ID=$(echo "$src_json" | jq -r '.current_update.id // .summary_fields.current_update.id // .last_job.id // .summary_fields.last_job.id // .last_update.id // .summary_fields.last_update.id // empty' 2>/dev/null || true)
if [ -n "$INV_UP_ID" ]; then
break
fi
sleep 1
done
fi
# Final fallback: use newest inventory_updates list
if [ -z "$INV_UP_ID" ]; then
echo "Falling back to newest inventory_update from list..."
INV_UP_ID=$(curl -sS "${AUTH[@]}" "$AWX_HOST/api/v2/inventory_sources/$SRC_ID/inventory_updates/?page_size=1" | jq -r '.results[0].id // empty' || true)
fi
if [ -z "$INV_UP_ID" ]; then
echo "ERROR: could not determine inventory_update id. Response was:" >&2
jq -C '.' "$tmpfile" || cat "$tmpfile" || true
exit 1
fi
echo "Inventory update id: $INV_UP_ID"
end=$((SECONDS + TIMEOUT_SECONDS))
status=""
while [ $SECONDS -lt $end ]; do
status=$(curl -sS "${AUTH[@]}" "$AWX_HOST/api/v2/inventory_updates/$INV_UP_ID/" | jq -r '.status // empty' || true)
echo "Status: ${status:-unknown}"
case "$status" in
pending|running)
sleep 2
;;
*)
break
;;
esac
done
echo "Final status: ${status:-unknown}"
echo "\n--- STDOUT (raw text) for inventory_update $INV_UP_ID ---"
curl -sS "${AUTH[@]}" "$AWX_HOST/api/v2/inventory_updates/$INV_UP_ID/stdout/?format=txt" || true