Skip to main content

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.

✓ Visual workflow builder ✓ Encrypted credential vault ✓ Full REST API ✓ RBAC for team access

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

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.

Share this tool: X / Twitter LinkedIn
✓ 60,000+ developers use DevPlaybook ★★★★★ 4.8 / 5 on Gumroad ✓ MIT licensed · Instant download ✓ No login required

Related Products

on Gumroad

You Might Also Need

More Free Tools

Related Articles

Mar 27, 2026 · 10 min read

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.

Apr 2, 2026 · 15 min read

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.

Apr 2, 2026 · 11 min read

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.

Apr 2, 2026 · 12 min read

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.

Apr 1, 2026 · 16 min read

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.

DevPlaybook Pro 7 days free

Unlock AI-Powered Dev Tools

  • ⚡ AI Code Review, Doc Generator & SQL Builder
  • ⚡ All premium templates & early access
  • ⚡ Member discounts on Gumroad products
Start Free Trial →

$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.

$79
$241 separately Save $162 (67% off)
Get DevPlaybook Pro — $79 →

MIT licensed · Instant download · No subscription

See what's included → Browse all deals →