Loops, Conditions, Branching
- loop: Loops let you repeat a task over multiple items.
- name: Install multiple packagespackage:name: "{{ item }}"state: presentloop:- git- nginx- vim
- when: Use when to run tasks only if a condition is true.
- name: Install nginx only on Ubuntupackage:name: nginxstate: presentwhen: ansible_os_family == "Debian"
- variables: Variables store reusable values
vars:package_name: nginxtasks:- name: Install packagepackage:name: "{{ package_name }}"state: present
Playbooks & Roles
A playbook is a YAML file that defines what systems to target and what tasks to run.
Example:
- name: Install nginx on web servers hosts: web become: yestasks:- name: Install nginx apt: name: nginx state: present
- How to write
Writing in Ansible is basically a 4-step pattern:
Define Who and What kind of access - name, hosts, become
Add Tasks: Write tasks as a list of actions using Ansible modules - Has a name, uses a module, defines a state
Add Handlers: Handlers run only when triggered
Use Roles for structure:
Example:
roles/nginx/ tasks/main.yml handlers/main.yml templates/ files/
***INDENTATION MATTERS
- Tasks
Tasks are the individual actions Ansible performs (install packages, copy files, run commands)
- Hosts
Hosts define which machines Ansible runs against (from your inventory).
- Handlers
Handlers are special tasks that only run when notified
Example:
tasks:- name: Update config copy: src: nginx.conf dest: /etc/nginx/nginx.conf notify: Restart nginx
handlers:- name: Restart nginx service: name: nginx state: restarted
- Dependent files
These are supporting files used by tasks (like templates, static files, or variables).
Common types:
- files/ → static files to copy
- templates/ → dynamic files (Jinja2 templates)
- vars/ → variable definitions
Common Modules
- Package
This is a generic module to install/remove packages (works across different OS like apt, yum, dnf).
Example:
- name: Install nginx package: name: nginx state: present
- Copy
Copies a file from your control machine to the target host.
Example:
- name: Copy config file copy: src: nginx.conf dest: /etc/nginx/nginx.conf
- Service
Manages services (start, stop, restart, enable).
Example:
- name: Start nginx service: name: nginx state: started enabled: yes
- Group
Manages system groups.
Example:
- name: Create a group group: name: developers state: present
- User
Manage user accounts.
Example:
- name: Create a user user: name: john group: developers shell: /bin/bash
- File
Manages file properties (permissions, directories, links, deletion).
Example:
- name: Create a directory file: path: /var/www/app state: directory mode: '0755'