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.
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.
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.
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.
# 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
[ ] 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).