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 --diffis je beste vriend voor verificatie vóór uitvoering