EX294 Ansible Cheatsheet

EX294 Ansible Cheatsheet: playbooks, vault en modules op één pagina

De belangrijkste Ansible-commando’s, modules en concepten voor het EX294 examen op één pagina.

⚡ CLI-commando’s

ansible all -m ping                               # Verbinding testen
ansible webservers -m shell -a "uptime"           # Ad-hoc commando
ansible-playbook playbook.yml                     # Playbook uitvoeren
ansible-playbook playbook.yml --check             # Dry-run
ansible-playbook playbook.yml --check --diff      # Dry-run met wijzigingen
ansible-playbook playbook.yml -v                  # Verbose
ansible-playbook playbook.yml --limit web1        # Eén host
ansible-playbook playbook.yml --tags installatie  # Specifieke tags
ansible-playbook playbook.yml -e "key=value"      # Extra variabelen
ansible-doc ansible.builtin.dnf                   # Module documentatie

📋 Playbook structuur

---
- name: Webserver configureren
  hosts: webservers
  become: yes
  vars:
    http_poort: 80

  tasks:
    - name: Apache installeren
      ansible.builtin.dnf:
        name: httpd
        state: present

    - name: Apache starten
      ansible.builtin.systemd:
        name: httpd
        state: started
        enabled: yes
      notify: Herstart Apache

  handlers:
    - name: Herstart Apache
      ansible.builtin.systemd:
        name: httpd
        state: restarted

🔄 Condities, loops en variabelen

# Conditie
- name: Alleen op RHEL
  ansible.builtin.dnf:
    name: httpd
    state: present
  when: ansible_os_family == "RedHat"

# Loop
- name: Gebruikers aanmaken
  ansible.builtin.user:
    name: "{{ item }}"
    state: present
  loop: [alice, bob, charlie]

# Output opslaan
- name: Datum ophalen
  ansible.builtin.command: date
  register: datum_output

# Custom fact
- ansible.builtin.set_fact:
    app_versie: "2.5.1"

# Debug
- ansible.builtin.debug:
    var: datum_output.stdout

📁 Foutafhandeling

# Doorgaan bij fout
- ansible.builtin.command: /opt/script.sh
  ignore_errors: yes

# Block/rescue/always
- block:
    - ansible.builtin.command: /opt/update.sh
  rescue:
    - ansible.builtin.command: /opt/rollback.sh
  always:
    - ansible.builtin.debug:
        msg: "Altijd uitvoeren"

# Niet loggen (wachtwoorden)
- ansible.builtin.shell: echo "geheim"
  no_log: true

🔐 Ansible Vault

ansible-vault create geheimen.yml                # Nieuw versleuteld bestand
ansible-vault encrypt vars/wachtwoorden.yml      # Bestaand versleutelen
ansible-vault decrypt vars/wachtwoorden.yml      # Ontsleutelen
ansible-vault view vars/wachtwoorden.yml         # Bekijken
ansible-vault edit vars/wachtwoorden.yml         # Bewerken
ansible-vault rekey vars/wachtwoorden.yml        # Wachtwoord wijzigen

# Enkele string versleutelen
ansible-vault encrypt_string 'MijnGeheim' --name 'db_pass'

# Playbook uitvoeren met vault
ansible-playbook playbook.yml --ask-vault-pass
ansible-playbook playbook.yml --vault-password-file .vault_pass

📦 Veelgebruikte modules

# Pakketten
ansible.builtin.dnf:
  name: [httpd, php]
  state: present

# Bestanden
ansible.builtin.copy:
  src: app.conf
  dest: /etc/app/app.conf
  mode: '0644'

# Regel in bestand
ansible.builtin.lineinfile:
  path: /etc/ssh/sshd_config
  regexp: '^PermitRootLogin'
  line: 'PermitRootLogin no'

# Directory aanmaken
ansible.builtin.file:
  path: /opt/myapp
  state: directory
  mode: '0755'

# Gebruiker aanmaken
ansible.builtin.user:
  name: deploy
  shell: /bin/bash

# Firewall
ansible.posix.firewalld:
  port: 8080/tcp
  permanent: yes
  state: enabled
  immediate: yes

# Bestand downloaden
ansible.builtin.get_url:
  url: https://example.com/bestand
  dest: /tmp/bestand

# Host herstarten
ansible.builtin.reboot:
  reboot_timeout: 300

🎭 Rollen

# Rolstructuur aanmaken
ansible-galaxy role init mijn-rol

# Rol installeren vanuit Galaxy
ansible-galaxy role install geerlingguy.apache

# requirements.yml installeren
ansible-galaxy install -r requirements.yml

# Rol gebruiken in playbook
- hosts: webservers
  roles:
    - mijn-rol
    - { role: geerlingguy.apache, tags: [apache] }

Rolstructuur: tasks/ | handlers/ | templates/ | files/ | vars/ | defaults/ (laagste prioriteit) | meta/

⚡ Examentips

  • YAML-inspringing is kritiek — 2 spaties, nooit tabs
  • Test idempotentie: playbook twee keer draaien, tweede keer changed=0
  • Gebruik ansible-doc <module> tijdens het examen voor opties
  • Vault-wachtwoord onthouden of in een bestand bewaren
  • --check --diff is je beste vriend voor verificatie vóór uitvoering