Ansible è uno strumento di gestione della configurazione ampiamente utilizzato scritto in linguaggio Python che aiuta a configurare macchine singole o multiple allo stesso tempo. Ansible può essere usato per eseguire i seguenti compiti
- Configurazione da zero di nodi singoli o multipli
- Deployment
- Modifiche alla configurazione
- Patching
- Gestione dei servizi
- e molti altri
Ansible è ampiamente utilizzato per la sua semplicità. Il codice di Ansible è scritto anche in linguaggio YAML, non ha bisogno di un agente da installare su una macchina remota. Ansible utilizza la porta 22 (SSH) per connettersi a una macchina remota e apportare le modifiche necessarie.
Ogni macchina che può connettersi alla macchina remota sulla porta 22 può diventare un nodo di controllo. Un nodo di controllo è dove si può installare Ansible e un nodo gestito viene gestito dai nodi di controllo.
Diamo un’occhiata all’installazione di Ansible sul nodo di controllo.
- Installare Ansible su CentOS 7:
- Installare Ansible su CentOS 8:
- Installare Ansible su Ubuntu:
- Installare Ansible con Python PIP su CentOS, Debian e Ubuntu:
- Configurazione di Ansible Controller Hosts:
- Verifica la connessione del nodo gestito:
- host3 | SUCCESS => { “changed”: false, “ping”: “pong”}
- Conclusione:
Installare Ansible su CentOS 7:
Come Python è l’unico pre-requisito per installare Ansible, installiamo Python eseguendo il seguente comando.
$sudo yum install python3 -y
Per installare Ansible su CentOS 7, prima assicurati che il repository EPEL di CentOS 7 sia installato. Esegui il seguente comando per installare il repository epel.
$sudo yum install epel-release
Aggiorna l’indice dei pacchetti di sistema eseguendo il seguente comando di aggiornamento.
$sudo yum update -y
Una volta che il repository è installato, installa Ansible con yum package manager. Esegui il seguente comando per installare Ansible.
$sudo yum install ansible -y
Verifica se Ansible è installato correttamente e la sua versione.
$ansible -v
Installare Ansible su CentOS 8:
Guardiamo i passi di installazione per CentOS 8. Installiamo python su CentOS 8.
$sudo dnf install python3
Una volta installato python, installiamo EPEL repo eseguendo il seguente comando.
$sudo dnf install epel-release -y
Aggiorniamo l’indice dei pacchetti di sistema eseguendo il seguente comando update.
$sudo dnf update -y
Siamo ora pronti per installare Ansible. Eseguire il seguente comando per installare Ansible.
$sudo dnf install ansible -y
Verificare se Ansible è installato correttamente e la sua versione.
$ansible -v
Installare Ansible su Ubuntu:
Python è un pacchetto predefinito oggi nella maggior parte delle distribuzioni Linux. Se non hai python installato, esegui il seguente comando per installare il pacchetto python.
$sudo apt-get install python3
Per installare Ansible in Ubuntu, installiamo prima il repository eseguendo il seguente comando.
$sudo apt-add-repository ppa:ansible/ansible
Aggiornate l’indice dei pacchetti di sistema eseguendo il seguente comando update.
$sudo apt-get update -y
Ora, installate Ansible.
$sudo apt-get install -y ansible
Verificate se Ansible è installato correttamente e la sua versione.
$ansible -v
Installare Ansible con Python PIP su CentOS, Debian e Ubuntu:
A prescindere dal sistema operativo che si sta utilizzando, è possibile installare Ansible con l’installatore di pacchetti python. Eseguiamo il seguente comando per installare python3-pip.
Per CentOS 7 e inferiori:
$sudo yum install python3 python3-pip -y
Per CentOS 8:
$sudo dnf install python3 python3-pip -y
Per Ubuntu e Debian:
$sudo apt-get install python3 python3-pip
Come abbiamo installato python e pip, eseguiamo il seguente comando su qualsiasi sistema operativo per installare Ansible.
$sudo pip3 install ansible
Verificare se Ansible è installato correttamente e la sua versione.
$ansible -v
Configurazione di Ansible Controller Hosts:
Abbiamo bisogno di impostare il file “hosts” prima di poter iniziare a comunicare con i nostri altri nodi. Questo file avrà tutti gli IP o gli hostname dei nodi gestiti.
Nota: Non è sempre necessario usare un file hosts per connettersi ai nodi gestiti. Ma poi ogni volta, abbiamo bisogno di usare l’IP o l’hostname del server del nodo gestito durante l’esecuzione di ogni comando.
Creare il file (se non è già presente) con i privilegi di root eseguendo il seguente comando:
$sudo touch /etc/ansible/hosts
Prima di scrivere nel file, diamo un’occhiata e capiamo il file hosts di esempio:
alias ansible_ssh_host=your_node_server_ip
Un file hosts dovrebbe seguire la sintassi di cui sopra. Diamo un’occhiata ad ogni parametro.
: Questo parametro creerà un gruppo. Tutti gli indirizzi IP o gli hostname dei nodi gestiti sotto il parametro group_name rientreranno nello stesso gruppo. Per esempio, se abbiamo più server web nella nostra infrastruttura, possiamo aggiungere tutti gli indirizzi IP o gli hostname del nodo gestito qui.
alias: Questo parametro è usato per dare al server del nodo gestito un alias per identificarlo. Per esempio, se abbiamo più server web nella nostra infrastruttura, possiamo dare host1, host2, host3 come alias. Il vantaggio principale di dare un alias è quando eseguiremo il comando Ansible per cambiare la configurazione di un singolo server, possiamo usare un alias per identificare ed eseguire il compito richiesto sul server.
ansible_ssh_host=your_node_server_ip: Questo parametro punterà l’alias a un indirizzo IP o a un nome host del nodo gestito.
Useremo CentOS 8 come nodo controllato con Ansible. Come detto sopra, Ansible utilizza la porta 22 dell’host remoto per connettersi.
Assumeremo che gli indirizzi IP del nostro server dei nodi gestiti CentOS siano 192.168.0.2, 192.168.0.3 e 192.168.0.4.
Per permettere al nodo controllore Ansible di comunicare con i nodi gestiti, dobbiamo confermare che i nodi gestiti sono accessibili sulla porta 22 che è una porta SSH. Eseguire il seguente comando per confermare la connettività uno per uno su tutti e tre i nodi gestiti dal controller.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
Vi verrà richiesta la password dell’utente root di tutti i nodi. Ansible funziona molto bene se hai configurato l’autenticazione senza password tra il controller Ansible e i nodi gestiti. Con diversi parametri nel comando Ansible, anche l’autenticazione con password può funzionare.
Come abbiamo configurato la connettività ssh tra il controller Ansible e i nodi gestiti, configuriamo il file hosts per connetterci a tutti i nodi gestiti. Come detto prima, possiamo aggiungere più alias di server di nodi in un singolo gruppo. In questo caso, aggiungiamo tutti e tre i nodi e assegniamo un alias come host1, host2 e host3 rispettivamente. Il nostro file hosts dovrebbe apparire come sotto dopo aver aggiunto tutti i dettagli del nodo gestito. Eseguite il seguente comando per modificare il file hosts che abbiamo creato prima.
Aprire il file con i privilegi di root eseguendo il seguente comando:
$sudo vi /etc/ansible/hosts
Aggiungiamo la seguente configurazione nel file hosts.
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Qui, abbiamo aggiunto tutti gli IP dei nodi gestiti e gli alias in un gruppo chiamato node_servers.
Proviamo ora a connetterci ai nodi gestiti dal controller Ansible.
$ansible -m ping node_servers
Il comando di cui sopra sta usando un modulo ping per connettersi al gruppo “node_servers” che abbiamo definito nel file hosts sopra.
Potresti incontrare errori per diversi motivi.
- Ansible, per default, proverà a connettersi al nodo gestito usando il tuo attuale nome utente se non ne hai fornito uno. Se quell’utente non esiste sul server del nodo, riceverai il seguente errore.
- Se la porta ssh 22 non è aperta per la connessione sui nodi gestiti. (Come detto prima, Ansible si connette sulla porta ssh)
- Se l’IP nel file hosts non è corretto.
Se una qualsiasi delle condizioni di cui sopra fallisce, incontrerai l’errore seguente.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Diciamo specificamente ad Ansible che dovrebbe connettersi ai nodi gestiti nel gruppo “node_servers” con l’utente james. Creare la directory group_vars come indicato di seguito.
$sudo mkdir /etc/ansible/group_vars
I file in questa directory sono specificamente utilizzati per configurare le variabili che possiamo utilizzare nei nostri playbook Ansible.
Creiamo un file di variabili per il nostro set up eseguendo il seguente comando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Aggiungi il seguente codice al file:
---
ansible_ssh_user: james
Il file YML inizia sempre con “—” nella prima riga. Salviamo e chiudiamo questo file quando abbiamo finito. Ora Ansible userà sempre l’utente james per il gruppo node_servers, indipendentemente dall’utente corrente che si sta utilizzando per eseguire un comando.
Verifica la connessione del nodo gestito:
Ora che abbiamo i nostri host impostati e abbastanza dettagli di configurazione per permetterci di connetterci con successo ai nostri nodi gestiti, possiamo provare lo stesso comando che abbiamo eseguito prima.
$ansible -m ping servers
Ansible restituirà un output come questo:
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => { “changed”: false, “ping”: “pong”}
Questo è un test di base per assicurarsi che Ansible abbia una connessione ai suoi nodi gestiti.
Conclusione:
Non è necessario usare il sistema operativo CentOS per i nodi gestiti. È possibile utilizzare la stessa configurazione di prova che abbiamo usato sopra per CentOS, RedHat, Ubuntu, e qualsiasi altra distribuzione Linux.