# Ansible

Ansible è un software open source progettato per automatizzare la gestione e configurazione di macchine di tipo Unix, oltre a piattaforme come Windows e macOS.

Ansible è scritto principalmente in Python, il quale rappresenta l'unico requisito necessario per il suo utilizzo.

## Architettura

Una delle caratteristiche distintive di Ansible è la sua natura `agentless`, il che significa che non non richiede l’installazione di agenti sui nodi da controllare, a differenza di altri strumenti di automazione.

## Componenti principali

Il `node manager` è la macchina su cui è installato Ansible e dalla quale vengono avviate le operazioni di configurazione. I `target nodes`, invece, sono i nodi gestiti da Ansible, ai quali il software si connette tramite il protocollo SSH per eseguire le operazioni richieste.

### Inventory e playbook

Tutti i file di configurazione di Ansible sono scritti nel formato `YAML`, che utilizza l’indentazione per definire la struttura e la gerarchia dei dati. Questo formato è scelto per la sua leggibilità e facilità d'uso, rendendo i file di configurazione più comprensibili.

Il file `inventory` contiene l’elenco dei nodi gestiti, organizzati in gruppi o singolarmente, e può essere personalizzato in base alle esigenze dell’infrastruttura. I `playbook` sono file scritti in formato YAML che descrivono la sequenza di operazioni da eseguire sui nodi.

![ansible-architecture](asset/img/ansible-architecture.png)
