Ansible Tower (AWX)
The enterprise web UI and automation platform for Ansible. Schedule playbooks, manage inventories and credentials, control team access, and integrate with any CI/CD system via REST API.
Ansible Tower vs AWX vs Ansible CLI
| Feature | Ansible CLI | AWX | Ansible Tower |
|---|---|---|---|
| Web UI | No | Yes | Yes |
| RBAC | No | Yes | Yes |
| REST API | No | Yes | Yes |
| Credential vault | ansible-vault (file) | Built-in encrypted | Built-in encrypted |
| Audit logging | No | Yes | Yes |
| Cost | Free | Free (self-hosted) | Red Hat subscription |
| Support | Community | Community | Red Hat SLA |
AWX Quickstart with AWX Operator (Kubernetes)
# Prerequisites: kubectl configured, minikube or kind running
# Step 1: Install AWX Operator via kustomize
cat <<EOF > kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/ansible/awx-operator/config/default?ref=2.19.1
images:
- name: quay.io/ansible/awx-operator
newTag: 2.19.1
namespace: awx
EOF
kubectl apply -k .
# Step 2: Wait for operator pod
kubectl get pods -n awx -w
# Step 3: Create AWX instance
cat <<EOF | kubectl apply -f -
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
namespace: awx
spec:
service_type: nodeport
nodeport_port: 30080
EOF
# Step 4: Wait for deployment (~5 minutes)
kubectl logs -f deployments/awx-operator-controller-manager -n awx
# Step 5: Get admin password
kubectl get secret awx-demo-admin-password -n awx \
-o jsonpath='{.data.password}' | base64 -d Creating an Inventory and Running a Job Template
# Example inventory (static, in AWX UI or via API)
# Inventory → Source → Manual:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
# Example playbook stored in GitHub (linked via Project)
# playbooks/deploy-app.yml
---
- name: Deploy application
hosts: webservers
become: yes
vars:
app_version: "{{ deploy_version | default('latest') }}"
tasks:
- name: Pull latest Docker image
docker_image:
name: "myapp:{{ app_version }}"
source: pull
- name: Restart app container
docker_container:
name: myapp
image: "myapp:{{ app_version }}"
state: started
restart: yes REST API: Trigger a Job from CI/CD
# Get an API token (one-time)
curl -s -X POST https://awx.example.com/api/v2/tokens/ \
-H 'Content-Type: application/json' \
-u admin:your-password | jq '.token'
# Launch a Job Template (template ID 42)
curl -s -X POST https://awx.example.com/api/v2/job_templates/42/launch/ \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"extra_vars": {"deploy_version": "1.2.3"}}' | jq '{job_id: .id, status: .status}'
# Poll until complete
JOB_ID=123
until [ "$(curl -s https://awx.example.com/api/v2/jobs/$JOB_ID/ \
-H 'Authorization: Bearer YOUR_TOKEN' | jq -r '.status')" != "running" ]; do
echo "Job still running..."; sleep 10
done
echo "Job finished" Building a Workflow Job Template
Workflow Job Templates chain multiple Job Templates together with success/failure branches. A common deployment workflow:
# Workflow DAG (configured in AWX UI's visual editor): # # [Run Tests] --SUCCESS--> [Deploy to Staging] --SUCCESS--> [Run Smoke Tests] # | | | # | FAILURE FAILURE # | v v # FAILURE [Rollback Staging] [Notify Slack: Failed] # v # [Notify Slack: Test Fail] # # Each node in the workflow is a Job Template with its own: # - Playbook # - Inventory (can differ per node) # - Credentials # - Extra variables (can pass outputs between nodes via set_stats)
AWX vs Semaphore
| Feature | AWX | Semaphore |
|---|---|---|
| Install complexity | High (Kubernetes + PostgreSQL) | Low (single binary or Docker) |
| Workflow engine | Yes (DAG visual builder) | No |
| REST API | Full API | Limited API |
| RBAC granularity | Fine-grained (org/team/user) | Basic (project-level) |
| Resource usage | Heavy (4GB+ RAM) | Light (256MB RAM) |
| Best for | Enterprise teams, complex workflows | Small teams, simple scheduling |
RBAC Best Practices
- Create Organizations to isolate teams — each org has its own inventories, credentials, and projects
- Grant developers "Execute" permission on Job Templates but not "Admin" — they can run but not modify
- Use Teams to apply permissions in bulk rather than per-user grants
- Restrict who can edit credentials — most users should only see that a credential exists, not its value
- Use the "Ask at launch" option for extra_vars sparingly — prefer defined variables in Job Templates for auditability
Frequently Asked Questions
What is the difference between Ansible Tower, AWX, and Ansible CLI?▼
Ansible CLI is the open-source command-line tool you run from a terminal — great for individual use but lacks a web UI, role-based access, audit logging, or scheduling. AWX is the open-source upstream project that became Ansible Tower — it provides a web UI, REST API, job scheduling, credential vault, and RBAC, but receives less stable releases and is community-supported. Ansible Tower is the enterprise, supported product sold by Red Hat with a stable release cadence, commercial support, and certifications. For production team use, AWX (self-hosted, free) or Tower (paid, supported) are the right choices; CLI for local development and scripting.
How do I install AWX quickly for evaluation?▼
The fastest path is the AWX Operator on a local Kubernetes cluster (minikube or kind). Install the AWX Operator via kubectl, then create an AWX custom resource. Alternatively, the legacy Docker Compose method works for quick demos: clone the awx repo, run make docker-compose, wait ~5 minutes for containers to start, and access the UI at localhost:8013. For production, use the AWX Operator on a proper Kubernetes cluster with persistent storage and an external PostgreSQL database.
How does AWX/Tower handle secrets and credentials?▼
AWX has a built-in credential vault that encrypts secrets at rest using AES-256. You create Credential objects of various types (SSH key, sudo password, AWS access key, Vault password, etc.) and attach them to Job Templates. Operators never see the raw credential values after creation — they are injected into playbook runs as environment variables or files at execution time. For teams already using HashiCorp Vault, AWX supports Vault lookup plugins to dynamically fetch credentials at runtime, giving you a single source of truth for secrets.
What is the difference between a Job Template and a Workflow in AWX?▼
A Job Template is a single playbook run — it defines the playbook, inventory, credentials, and extra variables to use. A Workflow Job Template chains multiple Job Templates together into a directed acyclic graph (DAG). Workflow nodes can branch on success or failure — for example, run 'provision servers' → on success run 'deploy app', on failure run 'notify slack'. Workflows can also span multiple inventories and credentials, making them ideal for multi-stage deployment pipelines.
How do I trigger an AWX job from a CI/CD pipeline?▼
Use the AWX REST API. POST to /api/v2/job_templates/{id}/launch/ with basic auth or token auth and an optional JSON body for extra_vars. With curl: curl -X POST https://awx.example.com/api/v2/job_templates/42/launch/ -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -d '{"extra_vars": {"deploy_version": "1.2.3"}}'. The response includes a job ID you can poll at /api/v2/jobs/{id}/ to wait for completion and check status. Many CI systems have AWX plugins (Jenkins AWX Plugin, GitLab CI templates) that wrap this pattern.
How does AWX compare to Semaphore for Ansible automation?▼
AWX is the full-featured upstream of Ansible Tower with a comprehensive web UI, workflow engine, RBAC, credential vault, REST API, and inventory management — but it is heavier (requires Kubernetes or Docker and a PostgreSQL database). Semaphore is a lightweight open-source Ansible web UI written in Go that is much simpler to install (single binary or Docker) with a smaller resource footprint. Semaphore is better for small teams or individuals who just want a web interface to run playbooks without the complexity of AWX. AWX is the right choice when you need workflows, audit trails, complex RBAC, or REST API integration.
Related Products
on GumroadGitHub Actions CI/CD Templates Pack
12 production-ready GitHub Actions workflow templates covering Node.js, Python, Docker, multi-environment deployments, security scanning, and auto-changelog. Copy, paste, ship.
Buy on Gumroad →Premium Workflow Pack
Production-grade workflows, architecture guides, and deployment scripts for teams that ship. 10 advanced CI/CD workflows (blue-green, canary, E2E, security), 5 architecture deep-dives, code review checklist, PR process guide, and 5 battle-tested Bash deployment scripts.
Buy on Gumroad →Developer Productivity Bundle
Stop rebuilding the same setup every project. 51 VSCode snippets, 40 Git aliases, 5 Docker Compose stacks, 5 GitHub Actions workflows, 5 README templates, and a dotfiles kit. Set up a professional dev environment in under an hour.
Buy on Gumroad →You Might Also Need
Ansible Playbook Builder
Build Ansible playbooks visually with a task composer. Add apt, yum, copy, service, command, git, and other module tasks. Generate valid YAML playbooks.
Open free tool →
Ansible Configuration Management Guide
Complete Ansible automation guide. Learn playbooks, roles, inventory, handlers, Jinja2 templates, Ansible Galaxy, and AWX/Tower for agentless IT configuration management.
Open free tool →
Ansible Playbook Linter
Paste Ansible YAML playbooks and check for common issues, best practices, and syntax errors. Validates task structure, module usage, and playbook organization.
Open free tool →
More Free Tools
Related Articles
Ansible vs Chef vs Puppet: Configuration Management Tools Compared 2026
Ansible vs Chef vs Puppet — compare agentless vs agent-based architecture, YAML vs Ruby DSL, scalability, Windows support, and cloud integration. Find the right config management tool for 2026.
DevOps Automation Tools in 2026: Orchestrating the Software Delivery Pipeline
Master DevOps automation with this guide to the tools that orchestrate modern software delivery. Covers CI/CD pipelines, infrastructure provisioning, configuration management, testing automation, and the emerging AI-assisted automation patterns that define 2026.
GitHub Actions vs GitLab CI 2026: Complete CI/CD Platform Comparison
Detailed GitHub Actions vs GitLab CI/CD comparison for 2026 — pricing, runners, YAML syntax, secrets, artifacts, caching, and migration guide.
Terraform vs Pulumi 2026: Infrastructure as Code Comparison with Code Examples
Complete Terraform vs Pulumi comparison for 2026 — syntax, state management, multi-cloud support, testing, pricing, and when to choose each IaC tool.
GitHub Actions Advanced Guide 2026: Matrix Builds, Caching, OIDC & Cost Optimization
Master GitHub Actions in 2026. Deep-dive into matrix strategies, artifact caching, OIDC authentication with AWS/GCP/Azure, self-hosted runners, reusable workflows, and cost optimization techniques for fast, cheap CI/CD pipelines.
Enjoying this tool? Get more like it.
Weekly developer tool guides, productivity playbooks & AI tricks. Free. No spam.
Unlock AI-Powered Dev Tools
- ⚡ AI Code Review, Doc Generator & SQL Builder
- ⚡ All premium templates & early access
- ⚡ Member discounts on Gumroad products
$9/mo after trial · Cancel anytime
Want the full toolkit?
Get DevPlaybook Pro
Every template, guide, boilerplate, and automation script in one bundle. 13 premium products — grab them all at once and save big.
MIT licensed · Instant download · No subscription
See what's included → Browse all deals →