Hassan Agmir Hassan Agmir

Learn Ansible, Ansible Vault, Ansible Playbooks, Ansible AWX, and Ansible Tower

Hassan Agmir
Learn Ansible, Ansible Vault, Ansible Playbooks, Ansible AWX, and Ansible Tower

Infrastructure as Code (IaC) has revolutionized how we manage, provision, and maintain complex systems. Among the many tools available, Ansible stands out for its agentless architecture, human-readable YAML syntax, and strong emphasis on simplicity and idempotency. In this article, we’ll dive deep into the world of Ansible—covering core commands like ansible-playbook, secrets management with Ansible Vault, and exploring web-based automation platforms AWX and Ansible Tower. Whether you’re a developer, systems engineer, or DevOps practitioner, this guide will equip you with practical insights and examples to accelerate your automation journey.

Table of Contents

  1. Why Choose Ansible?
  2. Installing Ansible
  3. Your First Playbook
  4. Core Concepts: Inventory, Modules, and Ad-Hoc Commands
  5. Automation at Scale: ansible-playbook
  6. Securing Secrets with ansible-vault
  7. AWX: The Open Source Automation Platform
  8. Ansible Tower: Enterprise-Grade Automation
  9. Best Practices and Patterns
  10. Advanced Topics and Integrations
  11. Conclusion

1. Why Choose Ansible?

  • Agentless Architecture
    Ansible communicates over SSH (Linux/Unix) or WinRM (Windows), eliminating the need to install and maintain agents on target hosts.
  • Human-Readable YAML
    Playbooks are written in YAML, making them easy for teams to read, review, and version-control.
  • Idempotency
    Playbook runs can be repeated safely; Ansible only makes the changes required to reach the desired state.
  • Extensible Module Ecosystem
    Hundreds of built-in modules (e.g., yum, apt, user, docker_container) cover most automation use-cases, and you can write your own.
  • Strong Community and Red Hat Backing
    Open source project with an active community; enterprise support and advanced features via Red Hat Ansible Automation Platform.

2. Installing Ansible

On most Linux distributions:

# Using package manager
sudo apt update && sudo apt install -y ansible       # Debian/Ubuntu
sudo yum install -y ansible                          # RHEL/CentOS
sudo dnf install -y ansible                          # Fedora

# Or via pip for latest version
pip install --user ansible

Verify installation:

ansible --version
# Sample output:
# ansible [core 2.15.3]
#   config file = /etc/ansible/ansible.cfg
#   configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']

3. Core Concepts: Inventory, Modules, and Ad‑Hoc Commands

Inventory

An inventory defines the hosts and groups that Ansible will manage. For example, an inventory.ini file:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[all:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/id_rsa

Ad‑Hoc Commands

Quick one‑off tasks without writing a playbook:

# Ping all servers
ansible all -m ping

# Install nginx on webservers
ansible webservers -m apt -a "name=nginx state=present" --become

4. Automation at Scale: ansible-playbook

Playbooks orchestrate multi‑step, multi‑host workflows. Here’s a basic example: deploying a simple Nginx site.

# playbooks/deploy-nginx.yml
- name: Deploy Nginx Web Server
  hosts: webservers
  become: true

  vars:
    site_root: /var/www/html
    index_content: "<h1>Welcome to Ansible-Managed Site!</h1>"

  tasks:
    - name: Ensure Nginx is installed
      apt:
        name: nginx
        state: latest
      when: ansible_os_family == "Debian"

    - name: Start and enable Nginx service
      service:
        name: nginx
        state: started
        enabled: true

    - name: Deploy custom index.html
      copy:
        dest: "{{ site_root }}/index.html"
        content: "{{ index_content }}"
        owner: www-data
        group: www-data
        mode: '0644'

Run it with:

ansible-playbook -i inventory.ini playbooks/deploy-nginx.yml

5. Securing Secrets with ansible-vault

Hard‑coding passwords or API keys in playbooks is a recipe for disaster. Ansible Vault lets you encrypt sensitive data.

Creating a Vault

ansible-vault create group_vars/all/vault.yml
# Vault editor opens; add variables:
# db_password: SuperSecretP@ssw0rd

Using Vault Variables

Refer to vault.yml in your playbook:

- hosts: dbservers
  vars_files:
    - group_vars/all/vault.yml

  tasks:
    - name: Create database user
      mysql_user:
        name: app_user
        password: "{{ db_password }}"
        priv: "app_db.*:ALL"

Editing an Existing Vault

ansible-vault edit group_vars/all/vault.yml

Running Playbooks with Vault

ansible-playbook playbooks/deploy-db.yml --ask-vault-pass
# or if using a vault password file:
ansible-playbook playbooks/deploy-db.yml --vault-password-file ~/.vault_pass.txt

6. AWX: The Open Source Automation Platform

AWX is the upstream, community‑supported project for Ansible Tower. It provides:

  • Web UI for inventories, credentials, projects, and job templates
  • REST API for full automation integration
  • Role-Based Access Control (RBAC) to manage team permissions
  • Real-time job output and scheduling
  • Integrated notifications via email, Slack, etc.

Installing AWX (Quick Overview)

  1. Prerequisites: Docker, Docker Compose, or Kubernetes
  2. Clone AWX repo and configure inventory:
  3. git clone https://github.com/ansible/awx.git
    cd awx/installer
    cp inventory inventory.local
    # Edit inventory.local to set admin password, ports, etc.
    ansible-playbook -i inventory.local install.yml
    
  4. Access the UI at http://<your-server>:80 with default admin credentials.

Key AWX Concepts

  • Projects: Git/SVN repos containing playbooks.
  • Inventories: Hosts and groups from static files or dynamic scripts.
  • Credentials: SSH keys, tokens, passwords stored securely.
  • Job Templates: Parameters binding playbooks to inventories and credentials.

7. Ansible Tower: Enterprise-Grade Automation

Ansible Tower is the commercial offering from Red Hat built on AWX, adding:

  • High Availability with clustering
  • Workflow Automation: chain multiple job templates with conditional logic
  • Surveys: prompt end-users for inputs at runtime
  • Analytics & Reporting: job metrics, dashboards
  • Smart Inventories: dynamic Host Lists from cloud providers
  • Compliance Controls: SSO, LDAP/AD integration, auditing
Example: Create a workflow that provisions cloud VMs, configures them, then deploys an application—each step as a job template, with failure-handling and notifications.

8. Best Practices and Patterns

  1. Use Roles
    • Encapsulate playbooks into roles (roles/ directory) with tasks/, handlers/, defaults/, vars/, templates/, and files/.
    • Simplifies reuse and sharing (Galaxy, internal repos).
  2. Structure Inventories
    • Separate by environment: inventories/dev/hosts.ini, inventories/prod/hosts.ini.
    • Leverage group vars (group_vars/) and host vars (host_vars/).
  3. Version Control Everything
    • Store playbooks, roles, inventories, and even ansible.cfg in Git.
    • Tag releases for reproducibility.
  4. Secure Secrets
    • Keep only encrypted Vault files in the repo.
    • Rotate vault passwords and limit access.
  5. Adopt CI/CD
    • Lint playbooks with ansible-lint.
    • Test with Molecule for role/unit testing.
    • Automate deployment via AWX/Tower or GitOps pipelines.
  6. Monitor and Alert
    • Publish job outputs to centralized logging (ELK, Splunk).
    • Use Tower’s notifications or custom callback plugins.

9. Advanced Topics and Integrations

  • Dynamic Inventories
    Retrieve hosts from AWS EC2, Azure, GCP, VMware via provided inventory plugins.
  • Callback Plugins
    Integrate with PagerDuty, chat ops, or custom dashboards.
  • Ansible Collections
    Distribute modules, plugins, and roles in a package—easily installable via ansible-galaxy collection install.
  • Automation Analytics (Tower)
    Gain insights on playbook runtimes, failure rates, and compliance.
  • Hybrid Cloud
    Orchestrate across on‑premises, public cloud, network devices, and Kubernetes—all from one control plane.

10. Conclusion

Ansible’s blend of simplicity, power, and extensibility makes it a cornerstone of modern DevOps toolchains. From writing your first ansible-playbook to encrypting secrets with ansible-vault, and scaling up with AWX or Ansible Tower, you have a comprehensive automation platform at your fingertips. By following best practices—modular roles, version control, CI/CD integration, and robust secrets management—you can build reliable, auditable, and secure workflows that accelerate delivery and reduce manual toil.

Ready to take the next step? Explore the Ansible documentation and experiment with roles on Ansible Galaxy. Whether you’re managing ten servers or ten thousand, Ansible helps you do it efficiently—and with joy.

Subscribe to my Newsletters

Stay updated with the latest programming tips, tricks, and IT insights! Join my community to receive exclusive content on coding best practices.

© Copyright 2025 by Hassan Agmir . Built with ❤ by Me