Files
PFVCluster/awx/verify-awx.sh
T
mrcharles 050e235f8b feat(awx): deploy AWX 24.6.1 on tsys-awx via k3s + AWX Operator
AWX (Ansible automation controller) deployed on tsys-awx.knel.net (VMID 600
on pfv-tsys6). Accessible at http://tsys-awx.knel.net:80 (admin/REDACTED_PASSWORD).

Deployment details:
- k3s v1.36.2 single-node (no Traefik) on Debian 13 trixie
- AWX Operator 2.19.1 + AWX CR (LoadBalancer service via k3s ServiceLB)
- PostgreSQL 15 bundled (8 GiB PVC on local-path provisioner)
- VM disk resized 32->60 GB; swap partition converted to swapfile
- Fixed kube-rbac-proxy image (gcr.io removed -> quay.io/brancz replacement)
- Fixed AWX CR field names (postgres_data_volume_size ->
  postgres_storage_requirements)

Scripts: awx/install-k3s.sh, awx/deploy-awx.sh, awx/verify-awx.sh
Manifests: awx/awx-instance.yaml, awx/namespace.yaml
Docs: awx/README.md

All pods running: operator 2/2, postgres 1/1, web 3/3, task 4/4.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-29 19:12:03 -05:00

81 lines
2.7 KiB
Bash

#!/usr/bin/env bash
###############################################################################
# verify-awx.sh — Verify AWX deployment status and access.
#
# Intended to run ON the target VM (tsys-awx.knel.net).
# Usage: bash verify-awx.sh
###############################################################################
set -euo pipefail
export KUBECONFIG="${KUBECONFIG:-/etc/rancher/k3s/k3s.yaml}"
echo "=========================================================="
echo " AWX Deployment Verification — $(date)"
echo "=========================================================="
echo ""
echo "=== 1. k3s node ==="
kubectl get nodes
echo ""
echo "=== 2. AWX pods ==="
kubectl -n awx get pods
echo ""
echo "=== 3. AWX CR status ==="
kubectl -n awx get awx tsys-awx -o jsonpath='{range .status.conditions[*]}{.type}: {.message}{"\n"}{end}' 2>/dev/null || echo "AWX CR not found"
echo ""
echo "=== 4. Services ==="
kubectl -n awx get svc
echo ""
echo "=== 5. LoadBalancer / NodePort access ==="
LB_IP=$(kubectl -n awx get svc tsys-awx-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "")
LB_HOST=$(kubectl -n awx get svc tsys-awx-service -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' 2>/dev/null || echo "")
NODE_PORT=$(kubectl -n awx get svc tsys-awx-service -o jsonpath='{.spec.ports[0].nodePort}' 2>/dev/null || echo "")
if [ -n "${LB_IP}" ]; then
echo "LoadBalancer IP: ${LB_IP}"
ACCESS_URL="http://${LB_IP}"
elif [ -n "${LB_HOST}" ]; then
echo "LoadBalancer hostname: ${LB_HOST}"
ACCESS_URL="http://${LB_HOST}"
elif [ -n "${NODE_PORT}" ]; then
echo "NodePort: ${NODE_PORT}"
ACCESS_URL="http://$(hostname -I | awk '{print $1}'):${NODE_PORT}"
else
echo "Service not ready yet"
ACCESS_URL=""
fi
echo ""
echo "=== 6. Admin password ==="
ADMIN_PASS=$(kubectl -n awx get secret awx-admin-password -o jsonpath='{.data.password}' 2>/dev/null | base64 -d 2>/dev/null || echo "")
if [ -n "${ADMIN_PASS}" ]; then
echo "User: admin"
echo "Password: ${ADMIN_PASS}"
else
echo "Admin password secret not found"
fi
echo ""
echo "=== 7. HTTP check ==="
if [ -n "${ACCESS_URL}" ]; then
echo "Testing ${ACCESS_URL}..."
HTTP_CODE=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "${ACCESS_URL}" 2>/dev/null || echo "failed")
echo "HTTP response: ${HTTP_CODE}"
if [ "${HTTP_CODE}" = "200" ] || [ "${HTTP_CODE}" = "302" ] || [ "${HTTP_CODE}" = "301" ]; then
echo "✓ AWX is accessible at ${ACCESS_URL}"
else
echo "✗ AWX not yet responding (HTTP ${HTTP_CODE})"
fi
fi
echo ""
echo "=========================================================="
if [ -n "${ACCESS_URL}" ]; then
echo " AWX Access URL: ${ACCESS_URL}"
fi
echo "=========================================================="