Introduzione
Ansible è uno strumento open source di automazione IT e gestione della configurazione che permette di automatizzare attività complesse e ripetitive in un'infrastruttura IT, rendendo i processi prevedibili, replicabili e meno inclini all'errore umano.
È un'alternativa moderna a strumenti come Puppet o Chef, ma si distingue per la sua semplicità e architettura agentless.
Caratteristiche Principali
Ansible si basa su una filosofia di semplicità ed efficienza, grazie a queste caratteristiche:
Agentless (Senza Agenti): Non richiede l'installazione di alcun software (agente) sui sistemi remoti (host gestiti). Questo riduce l'overhead e semplifica la gestione. Sfrutta invece protocolli esistenti come SSH (per Linux/Unix) e WinRM (per Windows) per comunicare e distribuire i suoi moduli.
Requisiti Minimali: Sui nodi gestiti, richiede solo una connessione SSH e l'installazione di Python (spesso già presente di default sui sistemi Unix-like).
Idempotenza: Una volta che un task è stato eseguito correttamente, se viene lanciato di nuovo, Ansible si assicura che lo stato del sistema corrisponda alla configurazione desiderata, ma non eseguirà nuovamente l'operazione se non strettamente necessario (ad esempio, se un file di configurazione è già presente e corretto, non verrà riscritto).
Linguaggio Dichiarativo (YAML): L'automazione è descritta tramite file chiamati Playbook scritti in YAML (Yet Another Markup Language), un linguaggio di serializzazione di dati leggibile dall'uomo, che non richiede la conoscenza di linguaggi di programmazione specifici.
Architettura Semplificata: Ansible non richiede un server di gestione centrale dedicato, ma può essere eseguito da una singola macchina (la macchina di controllo).
Concetti Chiave
L'automazione in Ansible si basa su un vocabolario specifico:
Macchina di Controllo
Il sistema su cui è installato Ansible e da cui vengono eseguiti i comandi di automazione.
Nodi Gestiti (Host)
I server, dispositivi di rete o altri computer remoti che Ansible deve configurare o gestire.
Inventory
Un file (solitamente in formato INI o YAML) che contiene la lista dei nodi gestiti, opzionalmente raggruppati per funzione (es. [web]
, [db]
).
Moduli
Sono i "blocchi" di codice che Ansible trasferisce ed esegue sui nodi gestiti per eseguire un compito specifico (es. installare un pacchetto, gestire un servizio, copiare un file). Ansible ne ha una vasta libreria.
Task
La chiamata a un modulo specifico con i relativi parametri. Un task definisce una singola procedura da eseguire (es. "Installa il pacchetto Nginx").
Playbook
Un file in formato YAML che definisce lo stato desiderato dei sistemi remoti. Contiene una sequenza di uno o più Play, ciascuno dei quali definisce gli Host di destinazione e una lista ordinata di Task da eseguire su di essi.
Handler
Sono task speciali che vengono eseguiti solo se sono stati notificati (notificati) da un altro task che ha causato una modifica (es. "Riavvia il servizio web" dopo che il file di configurazione è stato modificato).
Aree di Utilizzo
La flessibilità di Ansible lo rende adatto per diversi scenari IT:
Configuration Management: Standardizzare e mantenere la configurazione dei server (es. assicurare che un certo utente o un pacchetto software sia installato su tutti i server web).
Provisioning: Automatizzare l'installazione e la configurazione iniziale di nuove macchine virtuali o cloud.
Application Deployment: Gestire la distribuzione e l'aggiornamento delle applicazioni su più server contemporaneamente.
Orchestrazione Multi-Tier: Gestire e coordinare intere infrastrutture, eseguendo azioni in sequenza su diversi livelli (es. prima configurare il database, poi il server web, poi il bilanciatore di carico).
Automazione di Rete e Sicurezza: Configurare switch, router o firewall e applicare policy di sicurezza.
Last updated