Absolutely! Ansible Tower (now called Controller in AAP) has a robust, well-documented REST API. You can use it to automate everything you do via the web UIโlaunch jobs, manage inventories, users, credentials, and more.
Below is a practical, step-by-step guide (with examples!) to help you get started.
How to Work with Ansible Tower REST API (with Example)
1. Understanding the Ansible Tower API
- Type: RESTful, JSON-based API.
- Docs: Interactive Swagger/OpenAPI docs usually at:
https://<tower-server>/api/
(log in and try it!) - Authentication:
- Basic Auth (username/password or Personal Access Token)
- OAuth2 (for advanced use cases)
2. API Authentication
- Basic Auth:
Every request uses HTTP basic authentication.
Example:user:passwordor Personal Access Token as username (no password needed). - Getting a Token:
In Tower UI:
User โ Tokens โ Create Token
(Recommended: use tokens for automation!)
3. Making a Simple API Request
Letโs say your Tower UI is at https://13.233.139.133/.
List all Job Templates (curl):
curl -k -u 'admin:yourpassword' https://13.233.139.133/api/v2/job_templates/
Code language: JavaScript (javascript)
-k: Allow insecure (self-signed) SSL-u: Basic auth,'user:password'- The response is JSON
Using a Personal Access Token (PAT):
curl -k -H "Authorization: Bearer <your_token>" https://13.233.139.133/api/v2/job_templates/
Code language: JavaScript (javascript)
4. Example: Launch a Job Template via API
Suppose you have a job template with ID 7.
API URL:POST /api/v2/job_templates/7/launch/
Example (with token):
curl -k -H "Authorization: Bearer <your_token>" \
-X POST https://13.233.139.133/api/v2/job_templates/7/launch/
Code language: JavaScript (javascript)
- The response includes the job ID (e.g.,
"id": 81).
5. Check Job Status
Suppose your launched job returned "id": 81.
curl -k -H "Authorization: Bearer <your_token>" \
https://13.233.139.133/api/v2/jobs/81/
Code language: JavaScript (javascript)
- Look for
"status": "successful"(other states: “pending”, “running”, “failed”).
6. See Job Output (Standard Out)
curl -k -H "Authorization: Bearer <your_token>" \
https://13.233.139.133/api/v2/jobs/81/stdout/?format=txt
Code language: JavaScript (javascript)
- Add
?format=txtor?format=htmlas needed.
7. Example: Create an Inventory via API
curl -k -H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{"name":"TestInventory","organization":1}' \
-X POST https://13.233.139.133/api/v2/inventories/
Code language: JavaScript (javascript)
- Replace
organization: 1with your organizationโs ID (list orgs via/api/v2/organizations/).
8. Useful Endpoints
| API Endpoint | Description |
|---|---|
/api/v2/ | API root & docs |
/api/v2/job_templates/ | List/create job templates |
/api/v2/job_templates/<id>/launch/ | Launch a job template |
/api/v2/jobs/<id>/ | Check job status/details |
/api/v2/jobs/<id>/stdout/ | Get job standard output |
/api/v2/inventories/ | List/create inventories |
/api/v2/hosts/ | List/create hosts |
/api/v2/credentials/ | List/create credentials |
/api/v2/users/ | List/create users |
9. Example Python Script (requests library)
Hereโs a simple Python snippet to list all job templates:
import requests
api_url = "https://13.233.139.133/api/v2/job_templates/"
token = "<your_token>" # Or use user/pass in auth param
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
response = requests.get(api_url, headers=headers, verify=False)
for jt in response.json()['results']:
print(f"ID: {jt['id']}, Name: {jt['name']}")
Code language: PHP (php)
(use verify=False for self-signed SSL)
10. Finding More API Endpoints and Docs
- Visit:
https://<tower-server>/api/in your browser - Try out requests in Swagger UI
Summary Table
| Action | HTTP Method | API URL | Notes |
|---|---|---|---|
| List job templates | GET | /api/v2/job_templates/ | |
| Launch a job template | POST | /api/v2/job_templates/<id>/launch/ | Needs job template ID |
| Check job status | GET | /api/v2/jobs/<id>/ | |
| Get job output | GET | /api/v2/jobs/<id>/stdout/?format=txt | |
| Create inventory | POST | /api/v2/inventories/ | JSON body needed |
Tips and Best Practices
- Use Personal Access Tokens for CI/CD or scripts (not passwords).
- Always use HTTPS for security.
- Use the
/api/browser docs for full details and live โtry it nowโ features. - Automate with Python (
requests), Bash (curl), or your favorite language. - Respect rate limits and error messagesโread the
"detail"field in API responses for helpful info. - For bulk/complex changes, look at tower-cli (deprecated, now awx-cli) or the newer
awxCLI tool.
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services โ all in one place.
Explore Hospitals