Ansible Playbooks
Writing and organizing Ansible playbooks for configuration management.
Basic Playbook
-
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
[webservers] web1.example.com web2.example.com
[databases] db1.example.com
[production:children] webservers databases
Common Modules
Package Management
- name: Install packages apt: name: - nginx - git - python3 state: present
File Operations
- name: Copy configuration template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf backup: yes notify: Restart nginx
Handlers
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
- name: Ensure directory exists file: path: /opt/app state: directory mode: '0755'