# Capitolo 1 – Cos'è Ansible

## 1.1 Definizione

Ansible è uno strumento di automazione IT open source utilizzato per:

- Configuration Management  
- Provisioning di server  
- Application Deployment  
- Orchestrazione di infrastrutture  

È sviluppato da Red Hat ed è oggi uno degli strumenti più utilizzati in ambito sistemistico e DevOps.

A differenza di altre soluzioni (come Puppet o Chef), Ansible è **agentless**: non richiede l'installazione di alcun agente sui nodi gestiti.

---

## 1.2 A cosa serve in ambito Sysadmin

In un contesto sistemistico, Ansible permette di:

- Installare e configurare pacchetti su più server contemporaneamente  
- Standardizzare configurazioni  
- Ridurre errori manuali  
- Automatizzare attività ripetitive  
- Garantire coerenza tra ambienti (dev, staging, produzione)  

Esempio pratico:

Senza Ansible:
- Accesso SSH su 10 server
- Installazione manuale nginx
- Modifica manuale dei file di configurazione
- Riavvio servizio

Con Ansible:
- Un singolo comando
- Configurazione identica su tutti i nodi
- Procedura ripetibile e versionabile

---

## 1.3 Architettura di base

Ansible utilizza un'architettura molto semplice.

### Control Node
Macchina su cui è installato Ansible e da cui partono i comandi.

### Managed Nodes
Server gestiti da Ansible tramite SSH.

### Inventory
File che definisce l'elenco dei server da gestire.

### Playbook
File YAML che descrive lo stato desiderato dei sistemi.

---

## 1.4 Come funziona

Il flusso operativo è il seguente:

1. Ansible legge l'inventory
2. Si connette ai nodi via SSH
3. Esegue i moduli richiesti
4. Riporta l'esito dell'operazione

Ansible lavora in modalità dichiarativa:  
non si descrive "come fare", ma "quale deve essere lo stato finale".

Esempio concettuale:

- Stato desiderato: nginx installato
- Se non è installato → viene installato
- Se è già installato → non fa nulla

Questo comportamento si chiama **idempotenza**.

---

## 1.5 Perché è scelto in ambienti professionali

Ansible è diffuso in ambienti enterprise per diversi motivi:

- Nessun agente da mantenere
- Semplicità di apprendimento
- Utilizzo di YAML leggibile
- Integrazione con Git
- Ampia libreria di moduli
- Forte integrazione con ecosistema Red Hat

È utilizzato sia per piccole infrastrutture che per ambienti complessi multi-tier.

---

## 1.6 Casi d’uso tipici

- Setup iniziale di nuovi server
- Configurazione web server (nginx, apache)
- Gestione utenti e permessi
- Installazione stack LAMP / LEMP
- Hardening di base
- Deploy applicativi
- Aggiornamenti massivi

---

## 1.7 Quando NON usare Ansible

Ansible non è pensato per:

- Esecuzioni in tempo reale con latenza millisecondi
- Configurazioni estremamente dinamiche su singolo nodo
- Sostituire sistemi di monitoring

È uno strumento di automazione e gestione configurazione, non un sistema di controllo runtime continuo.

---

## Conclusione

Ansible è uno strumento centrale nel toolkit di un sistemista moderno.

Permette di trasformare operazioni manuali in procedure automatizzate, ripetibili e versionabili, riducendo errori e aumentando la coerenza dell'infrastruttura.

Nel prossimo capitolo entreremo nella configurazione iniziale operativa dopo l’installazione.