Overview
Writing and organizing Ansible playbooks for configuration management.
Basic Playbook
yaml
---
- name: Configure web servers
hosts: webservers
become: yes
vars:
http_port: 80
app_version: "1.0.0"
tasks:
- name: Install nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Start nginx
service:
name: nginx
state: started
enabled: yes
- name: Deploy application
copy:
src: ./app
dest: /var/www/html
owner: www-data
mode: '0755'
Inventory
ini
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
[production:children]
webservers
databases
Common Modules
Package Management
yaml
- name: Install packages
apt:
name:
- nginx
- git
- python3
state: present
File Operations
yaml
- name: Copy configuration
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
backup: yes
notify: Restart nginx
Handlers
yaml
handlers:
- name: Restart nginx
service:
name: nginx
state: restarted
Best Practices
Use Roles
roles/
āāā webserver/
ā āāā tasks/
ā ā āāā main.yml
ā āāā handlers/
ā ā āāā main.yml
ā āāā templates/
ā āāā nginx.conf.j2
Idempotency
yaml
- name: Ensure directory exists
file:
path: /opt/app
state: directory
mode: '0755'