Introduzione

Ansible è un sistema di gestione per semplificare il controllo di un numero elevato di server contemporaneamente. Questo tool ti permette di controllare molti sistemi diversi in modo automatico da una posizione centrale.

In questo tutorial vederemo come installare e configurare Ansible su Ubuntu 18.04 LTS.

Con Ansible è possibile connettersi contemporaneamente tramite SSH a più server in remoto ed effettuare tutte le operazioni normalmente utilizzate per gestire un server.
Qualsiasi server che puoi amministrare tramite SSH, puoi anche amministrarlo tramite Ansible.

Prerequisiti

Prima di iniziare con questa guida, dovresti avere:

  • Un utente non root con i privilegi sudo impostati sul tuo server. Segui questa guida: Configurazione Iniziale su Ubuntu 18.04 LTS.

  • SSH Keys generate per l'utente non root sul tuo server Ansible. Seguire il primo passaggio di questa guida: Come impostare SSH Keys su Ubuntu 18.04.

  • Due o più server di Ubuntu 18.04. Uno di questi verrà utilizzato come server Ansible, mentre il resto verrà utilizzato come host Ansible. Ognuno dovrebbe avere un utente non root con privilegi sudo e un firewall di base configurato.

Installare Ansible

Installare Ansible sul computer che utilizzerete per connettervi ai vostri server.

Aggiornare l'elenco dei pacchetti di Ubuntu, da terminale:
sudo apt update

Installare il seguente pacchetto, per facilitare la configurazione di alcuni software:
sudo apt install software-properties-common

Aggiungere il repository di Ansible:
sudo apt-add-repository ppa:ansible/ansible

Premere INVIO quando richiesto.

Aggiornare nuovamente l'elenco dei pacchetti (su Ubuntu 18.04 dovrebbero essersi già aggiornati):
sudo apt update

Installare Ansible:
sudo apt install ansible

Configurare l'accesso l'SSH

Sul server Ansible (generalmente il computer locale), usare il comando cat per stampare il contenuto del file SSH Public Key (Chiave Pubblica) dell'utente:
cat ~/.ssh/id_rsa.pub

Copiare il contenuto del file e connettersi tramite SSH ad uno dei server che volete gestire utilizzando Ansible:
ssh [email protected]_ip

Una volta connessi al server, creare la directory ~/.ssh, questo comando creerà la directory, se necessario, o non farà nulla se già esiste:
mkdir -p ~/.ssh

Eseguire il seguente comando, sostituendo chiave_pubblica con il messaggio di output ricevuto dal comando precedente cat ~/.ssh/id_rsa.pub:
echo chiave_pubblica >> ~/.ssh/authorized_keys

ESEMPIO (non utilizzare questa chiave pubblica):
echo AAAAB3NzaC1yc2EAAAADAQABAAABAQDdTV41d4YIf0EqISOryVM4zF2Ucv8ekGtOg6t3RjSJqKfW/XS6n7bzI5yZd3QlvI0M8P+xdUnKxIQpDSkBJaySOmVq1QmmE74iRFvWygsqB3jlEyagnH8h3SKjh5FLTxxUZQxwU351BRCUSxoqLdA30KgrXKOWM/C9lm7dx3DsucV/iGdsv8m2ojwdwwRUFTfWo4PsjJOZ8XX+JciqdTVIbKnPklsosu+8+WvVKiuZYqaq4EMmQXX/wHXAo77FqWg+czDFwexYkFSIC6Lt5p3eS0RVNp4HyU36MmXvHsfIXhkaAJp5Myxd6FdFLcM/5zm52SqAZDnMwIXDr71aArId [email protected] >> ~/.ssh/authorized_keys

Aggiornare l'indice dei pacchetti del server:
sudo apt update

Installare Python, necessario per comunicare con Ansible:
sudo apt install python

Chiudere la connessione con il server che volete gestire tramite Ansible:
exit

Ripetere questi passaggi per ogni server che volete gestire con Ansible dal vostro computer.

Configurare Ansible

Apri il file hosts per configurare Ansible, dal vostro computer principale, in modo tale che possa connettersi ai server configurati precedentemente:
sudo nano /etc/ansible/hosts

Impostare il nome del gruppo, l'alias e l'indirizzo IP del server. Il nome del gruppo e l'alias non hanno vincoli, potete inserire quello che preferite.

In questo esempio inseriamo due server, che gestiremo con Ansible.

[primo_gruppo]
Primo ansible_ssh_host=ip_primo
Secondo ansible_ssh_host=ip_secondo

Questi due server sono accessibili da Ansible utilizzando l'SSH. La password non dovrebbe essere richiesta se è stata impostata correttamente la Public Key.

Se siete connessi come utente non root e provate a connettervi adesso ai vostri server con Ansible, riceverete un errore, poiché la chiave SSH è incorporata per l'utente root sui sistemi remoti e Ansible tenterà per impostazione predefinita di connettersi come utente corrente, ovvero con l'utente con il quale siete connessi.

Sul vostro computer, sul quale avete installato Ansible, state utilizzando un utente chiamato per esempio "XXX". Ansible proverà a collegarsi a ciascun server con ssh [email protected]_ip. Questo comando non funzionerà se sul server al quale provate a connettervi, non esiste un utente con lo stesso nome, nel nostro caso "XXX".

Per risolvere questo problema, possiamo creare un file, per ogni gruppo, che indica a tutti i server dello stesso gruppo di connettersi come utente root.

Creare una cartella per i gruppi:
sudo mkdir /etc/ansible/miei_gruppi

Creare un file per il primo gruppo:
sudo nano /etc/ansible/miei_gruppi/primo_gruppo

I file YAML iniziano con ---, quindi assicurarsi di inserire questi caratteri correttamente.

Incollare le seguenti righe:

---
ansible_ssh_user: root

Salvare e chiudere il file.

Utilizzare Ansible

Adesso è possibile utilizzare Ansible, la configurazione di base è terminata.

Alcuni esempi per utilizzare Ansible.

Effettuare il ping di tutti i server configurati digitando:
ansible -m ping all

Dovreste ricevere un messaggio di output simile al seguente:

Primo | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Secondo | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Con il parametro -m si intende il "modulo", quindi in questo caso il comando ha richiesto il modulo "ping".
Con il parametro all è possibile selezionare tutti i server e i gruppi contemporaneamente.

Per specificare solo un gruppo:
ansible -m ping primo_gruppo

Oppure per specificare un singolo server:
ansible -m ping Primo

Per specificare piu server:
ansible -m ping Primo:Secondo

Per un secondo esempio sull'utilizzo di Ansible, possiamo vedere lo spazio su disco suoi nostri server:
ansible -m shell -a 'df -h' Primo:Secondo

L'installazione e la configurazione di Ansible su Ubuntu 18.04 LTS è terminata.