Ansible — Cheat Sheet

Tag: ansible, automation, iac, devops, yaml, playbook, inventory

Livello: intermedio

TL;DR: Strumento agentless per automazione IT, configuration management e deployment basato su Python e SSH. Utilizza YAML per definire lo stato desiderato dell'infrastruttura.

Concetti chiave

Agentless: comunica via SSH (Linux) o WinRM (Windows) senza installare software sui client.

Inventory: file statico o dinamico che elenca raggruppamenti e indirizzi dei nodi da gestire.

Playbook: file YAML che descrivono i task e lo stato desiderato del sistema.

Task: singola azione che richiama un modulo Ansible passando parametri specifici.

Module: lo script reale eseguito sul nodo target (es. yum, apt, copy, service).

Role: struttura standard di directory per organizzare e riutilizzare task, variabili e handler.

Handler: task speciali eseguiti alla fine di un play solo se notificati da un cambiamento.

Idempotenza: l'esecuzione ripetuta produce lo stesso risultato senza alterare sistemi gia allineati.

Domande tipiche e risposte pronte

Q: Come gestisci le password e i dati sensibili in Ansible?

R: Utilizzo Ansible Vault per criptare interi file YAML o singole variabili stringa tramite crittografia AES256.

Q: Qual e' la differenza tra i moduli command e shell?

R: command esegue l'eseguibile direttamente senza passare per la shell, mentre shell supporta pipe, redirect e variabili d'ambiente.

Q: Come ottimizzi un playbook molto lento?

R: Disabilito gather_facts se le variabili di sistema non servono, oppure abilito il pipelining SSH in ansible.cfg.

Insidie e errori comuni

Utilizzare i moduli shell o command per azioni che hanno gia un modulo idempotente dedicato (es. modificare file).

Dimenticare di gestire il fallimento dei task bloccanti tramite ignore_errors o blocchi rescue.

Strutturare variabili di gruppo conflittuali senza considerare la gerarchia di precedenza delle variabili.

Snippet e comandi

# Esecuzione standard di un playbook con inventory specifico
ansible-playbook -i production.ini deploy.yml

# Verifica sintassi senza eseguire
ansible-playbook check.yml --syntax-check

# Dry run (simulazione delle modifiche)
ansible-playbook update.yml --check

YAML

# Esempio di task per assicurare un servizio attivo
- name: Assicurati che Nginx sia in esecuzione
  ansible.builtin.service:
    name: nginx
    state: started
    enabled: true

Da ripassare

[ ] Creazione e gestione di dynamic inventory per AWS o Azure.

[ ] Creazione di custom module in Python.

[x] Differenza pratica tra include_role (dinamico) e import_role (statico).

Jarvis Interviews
Jarvis