Skip to content

Instantly share code, notes, and snippets.

@AlanCoding
Created January 23, 2026 20:31
Show Gist options
  • Select an option

  • Save AlanCoding/9abef613cb093fc7d55c4f1f3deb17bb to your computer and use it in GitHub Desktop.

Select an option

Save AlanCoding/9abef613cb093fc7d55c4f1f3deb17bb to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
AWX_OPERATOR_DIR="${AWX_OPERATOR_DIR:-}"
DEBUG_OUTPUT_DIR="${DEBUG_OUTPUT_DIR:-/tmp/awx_operator_molecule_test}"
PYTHON_BIN="${PYTHON_BIN:-python}"
REMOVE_SYSTEM_KUSTOMIZE="${REMOVE_SYSTEM_KUSTOMIZE:-}"
if [[ -z "$AWX_OPERATOR_DIR" ]]; then
if [[ -d "$ROOT_DIR/../awx-operator" ]]; then
AWX_OPERATOR_DIR="$ROOT_DIR/../awx-operator"
elif [[ -d "$ROOT_DIR/awx-operator" ]]; then
AWX_OPERATOR_DIR="$ROOT_DIR/awx-operator"
else
echo "awx-operator repo not found."
echo "Set AWX_OPERATOR_DIR or clone: git clone https://github.com/ansible/awx-operator ../awx-operator"
exit 1
fi
fi
require_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Missing required command: $1"
exit 1
fi
}
require_cmd "$PYTHON_BIN"
require_cmd make
require_cmd docker
require_cmd timeout
AWX_REAL="$(realpath "$ROOT_DIR")"
AWX_OPERATOR_REAL="$(realpath "$AWX_OPERATOR_DIR")"
echo "Using awx: $AWX_REAL"
echo "Using awx-operator: $AWX_OPERATOR_REAL"
echo "Installing playbook dependencies"
"$PYTHON_BIN" -m pip install docker
echo "Check Python version"
make -C "$AWX_REAL" print-PYTHON
AWX_TEST_IMAGE_FULL="${AWX_TEST_IMAGE_FULL:-}"
if [[ -z "$AWX_TEST_IMAGE_FULL" ]]; then
echo "AWX_TEST_IMAGE_FULL is required (example: ghcr.io/ansible/awx_devel:devel)"
exit 1
fi
if [[ "$AWX_TEST_IMAGE_FULL" != *:* ]]; then
echo "AWX_TEST_IMAGE_FULL must include a tag (example: ghcr.io/ansible/awx_devel:devel)"
exit 1
fi
export AWX_TEST_IMAGE="${AWX_TEST_IMAGE_FULL%:*}"
export AWX_TEST_VERSION="${AWX_TEST_IMAGE_FULL##*:}"
export AWX_EE_TEST_IMAGE="${AWX_EE_TEST_IMAGE:-quay.io/ansible/awx-ee:latest}"
export STORE_DEBUG_OUTPUT="${STORE_DEBUG_OUTPUT:-true}"
timed_out=false
set +e
timeout 15m bash -lc "
set -e
cd \"$AWX_OPERATOR_REAL\"
\"$PYTHON_BIN\" -m pip install -r molecule/requirements.txt
\"$PYTHON_BIN\" -m pip install PyYAML
if rg -q \"https://github.com/ansible/awx.git#/awx_collection/\" molecule/requirements.yml; then
\"$AWX_REAL/tools/scripts/rewrite-awx-operator-requirements.py\" molecule/requirements.yml \"$AWX_REAL\"
else
echo \"Skipping rewrite: molecule/requirements.yml already points to local awx collection\"
fi
ansible-galaxy collection install -r molecule/requirements.yml
if command -v kustomize >/dev/null 2>&1 && [[ -n \"$REMOVE_SYSTEM_KUSTOMIZE\" ]]; then
if command -v sudo >/dev/null 2>&1 && [[ \"$EUID\" -ne 0 ]]; then
sudo rm -f \"\$(command -v kustomize)\"
else
rm -f \"\$(command -v kustomize)\"
fi
fi
make kustomize
KUSTOMIZE_PATH=\"\$(readlink -f bin/kustomize)\" molecule -v test -s kind -- --skip-tags=replicas
"
rc=$?
if [[ $rc -eq 124 ]]; then
timed_out=true
fi
set -e
if [[ "$timed_out" == "true" ]]; then
echo "Molecule test timed out; collecting debug output in $DEBUG_OUTPUT_DIR"
mkdir -p "$DEBUG_OUTPUT_DIR"
if command -v kind >/dev/null 2>&1; then
for cluster in $(kind get clusters 2>/dev/null); do
kind export logs "$DEBUG_OUTPUT_DIR/$cluster" --name "$cluster" || true
done
fi
if command -v kubectl >/dev/null 2>&1; then
kubectl get all -A -o wide > "$DEBUG_OUTPUT_DIR/kubectl-get-all.txt" || true
kubectl get pods -A -o wide > "$DEBUG_OUTPUT_DIR/kubectl-get-pods.txt" || true
kubectl describe pods -A > "$DEBUG_OUTPUT_DIR/kubectl-describe-pods.txt" || true
fi
docker ps -a > "$DEBUG_OUTPUT_DIR/docker-ps.txt" || true
fi
exit $rc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment