Ansible

Loops, Conditions, Branching

  • loop: Loops let you repeat a task over multiple items.
    • - name: Install multiple packages
       package:
         name: "{{ item }}"
         state: present
       loop:
         - git
         - nginx
         - vim
  • when: Use when to run tasks only if a condition is true.
    • - name: Install nginx only on Ubuntu
       package:
         name: nginx
         state: present
       when: ansible_os_family == "Debian"
  • variables: Variables store reusable values
    • vars:
      package_name: nginx

      tasks:
      - name: Install package
      package:
      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: yes
tasks:
- 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'