cheat-sheets

Ansible-Playbook Cheat-Sheet

Playbooks describe the desired state of your hosts in YAML. Setup and ad-hoc commands: Ansible Cheat-Sheet.

Run #

COMMANDDESCRIPTION
ansible-playbook -i inventory.ini site.ymlRun a playbook
ansible-playbook site.yml --check --diffDry run and show file diffs
ansible-playbook site.yml --syntax-checkSyntax check only
ansible-playbook site.yml --list-tasksList tasks
ansible-playbook site.yml --list-hostsList targeted hosts
ansible-playbook site.yml -l web1Limit to a host or group
ansible-playbook site.yml --tags nginxOnly tagged tasks
ansible-playbook site.yml --skip-tags slowSkip tagged tasks
ansible-playbook site.yml --start-at-task "Install nginx"Resume from a task
ansible-playbook site.yml --stepConfirm each task
ansible-playbook site.yml -e "version=1.2.3"Extra variable
ansible-playbook site.yml -e @vars.ymlVariables from a file
ansible-playbook site.yml -KAsk for the sudo password

Example Playbook #

yaml
---
- name: Configure web servers
  hosts: web
  become: true
  vars:
    packages: [nginx, curl]

  tasks:
    - name: Install packages
      ansible.builtin.apt:
        name: "{{ packages }}"
        state: present
        update_cache: true
        cache_valid_time: 3600

    - name: Deploy nginx config
      ansible.builtin.template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: "0644"
        validate: nginx -t -c %s
      notify: Reload nginx

    - name: Ensure nginx is running
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

  handlers:
    - name: Reload nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

Common Modules #

MODULEPURPOSE
ansible.builtin.apt / dnf / packagePackages
ansible.builtin.copy / templateFiles and Jinja2 templates
ansible.builtin.fileDirectories, links, permissions
ansible.builtin.lineinfile / blockinfileEdit lines in files
ansible.builtin.service / systemdServices
ansible.builtin.user / groupAccounts
ansible.builtin.command / shellCommands (prefer real modules)
ansible.builtin.get_url / unarchiveDownload and extract
ansible.builtin.gitClone repositories
ansible.builtin.cronCron jobs
ansible.builtin.rebootReboot and wait
community.docker.docker_containerContainers
ansible.posix.authorized_keySSH keys
ansible.builtin.debugPrint variables

Control Flow #

yaml
- name: Only on Debian family
  ansible.builtin.apt:
    name: htop
  when: ansible_os_family == "Debian"

- name: Create users
  ansible.builtin.user:
    name: "{{ item }}"
  loop: [alice, bob]

- name: Run a command and keep the result
  ansible.builtin.command: cat /etc/hostname
  register: hostname_out
  changed_when: false

- name: Show it
  ansible.builtin.debug:
    msg: "{{ hostname_out.stdout }}"

- name: Retry until ready
  ansible.builtin.uri:
    url: http://localhost:8080/health
  register: r
  until: r.status == 200
  retries: 10
  delay: 3

Roles #

roles/
  nginx/
    tasks/main.yml
    handlers/main.yml
    templates/
    defaults/main.yml   # lowest-precedence variables
    vars/main.yml
yaml
- hosts: web
  roles:
    - nginx
    - role: app
      vars:
        port: 8080

Tips #

  • Use fully qualified module names (ansible.builtin.copy).
  • Make tasks idempotent. Use changed_when and creates: on command.
  • Test with --check --diff first, and lint with ansible-lint.
  • Keep secrets in ansible-vault, never in plain vars.
  • serial: 1 in a play does rolling updates, max_fail_percentage limits blast radius.

See Also #

Search all sheets

Tip: / or Ctrl/Cmd+K to open, Esc to close.