Intermediate
Quick reference for Ansible — inventory formats, ad-hoc commands, playbook and task syntax, common modules, roles, handlers, variables, facts, Jinja2 templates, and ansible-vault.
PlaybooksInventoryRolesAutomation
Inventory
INI Format
[web]
web1.example.com
web2.example.com
[db]
db1 ansible_host=10.0.1.5
[prod:children]
web
db
[prod:vars]
ansible_user=deploy
YAML Format
all:
children:
web:
hosts:
web1.example.com:
vars:
ansible_user: deploy
Ad-Hoc & CLI
ansible all -m ping
ansible web -m command -a "uptime"
ansible web -m ansible.builtin.apt \
-a "name=nginx state=present" --become
ansible db1 -m setup # gather facts
ansible-playbook -i inv.yml site.yml
ansible-playbook site.yml --check --diff # dry run
ansible-playbook site.yml --limit web --tags deploy
ansible-playbook site.yml --ask-become-pass
Playbook Skeleton
---
- name: Configure web
hosts: web
become: true
vars:
app_port: 8080
tasks:
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
notify: Restart nginx
handlers:
- name: Restart nginx
ansible.builtin.service:
name: nginx
state: restarted
Common Modules
| Module | Use |
| apt / dnf / package | Manage packages |
| service / systemd | Manage services |
| copy / template | Push files / render Jinja2 |
| file | Manage paths, perms, symlinks |
| user / group | Manage accounts |
| git | Clone/checkout repos |
| command / shell | Run commands (not idempotent) |
Variables, Facts, Loops
# conditional on a fact
when: ansible_facts['os_family'] == "Debian"
# loop
loop: "{{ dev_users }}"
# register + use output
- command: whoami
register: who
- debug: msg="{{ who.stdout }}"
Jinja2 Template
listen {{ app_port }};
{% for b in backends %}
server {{ b }};
{% endfor %}
Roles & Galaxy
roles/webserver/
tasks/main.yml
handlers/main.yml
templates/
defaults/main.yml
vars/main.yml
ansible-galaxy init roles/webserver
ansible-galaxy collection install community.general
ansible-galaxy install -r requirements.yml
ansible-vault
ansible-vault encrypt vault.yml
ansible-vault edit vault.yml
ansible-vault view vault.yml
ansible-vault rekey vault.yml
ansible-playbook site.yml --ask-vault-pass
ansible-playbook site.yml --vault-password-file ~/.vp