Come usare gli inventari statici e dinamici in Ansible – Parte 4

In questa Parte 4 della serie Ansible, spiegheremo come usare l’inventario statico e dinamico per definire gruppi di host in Ansible.

In un Ansible, gli host gestiti o i server che sono controllati dal nodo di controllo Ansible sono definiti in un file di inventario host come spiegato in. Un file di inventario degli host è un file di testo che consiste in nomi di host o indirizzi IP di host gestiti o server remoti.

Gli host gestiti possono essere elencati come voci individuali o categorizzati sotto un nome di gruppo, come vedremo più avanti. In Ansible, ci sono due tipi di file di inventario: Static e Dynamic.

Diamo un’occhiata a ciascuno di questi e vediamo come possiamo gestirli. A questo punto, assumiamo che tu abbia già installato Ansible sul tuo nodo di controllo, e configurato la connessione SSH senza password ai tuoi host gestiti.

File di inventario statico degli host

In Ansible, un file di inventario statico è un file di testo semplice che contiene un elenco di host gestiti dichiarati sotto un gruppo di host utilizzando o nomi di host o indirizzi IP.

Il nome di un gruppo di host è racchiuso tra parentesi quadre, cioè . Le voci degli host gestiti sono poi elencate sotto il nome del gruppo, ognuna sulla propria riga. Come discusso in precedenza, gli host sono elencati usando nomi di host o indirizzi IP.

Host A ip_address Host B ip_addressHost c ip_address

A scopo di illustrazione, creeremo un file di inventario statico.

# mkdir test_lab && cd test_lab# vim hosts
File di inventario statico
173.82.115.165173.82.220.239webserversdatabase_servers

Salva il file ed esci.

Come puoi vedere nel file di inventario sopra, abbiamo creato 2 gruppi di host: webservers e database_servers. Inoltre, abbiamo creato un ulteriore gruppo chiamato datacenter che include un gruppo di gruppi di host denotato dal suffisso ': children' come visto sopra.

Ansible permette anche di mettere gruppi di host sotto un nome di gruppo. Nel file di inventario qui sopra, i gruppi webservers e database_servers sono stati messi sotto il datacenter.

NOTA: Non è obbligatorio mettere gli host gestiti in un gruppo di host. Puoi semplicemente elencarli usando i loro nomi di host o indirizzi IP per esempio.

173.82.202.239172.82.115.165load_balancer.pnl.com

Utilizziamo ora alcuni comandi Ansible per fare riferimento al file di inventario degli host. La sintassi di base per la gestione dell’inventario è come mostrato.

$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Per esempio,

$ ansible all -i /root/test_labs/hosts --list-hosts

List Ansible Hosts

In alternativa, è possibile utilizzare il carattere jolly * per sostituire l’argomento 'all'.

$ ansible * -i /root/test_labs/hosts --list-hosts
List Ansible Hosts Using Wildcards

Per elencare gli host in un gruppo, specifica il gruppo di host al posto di host-pattern.

$ ansible webservers -i /root/test_labs/hosts --list-hosts
Elenca gli host di Ansible in un gruppo

File di inventario dinamico degli host

In una configurazione, specialmente una configurazione cloud come AWS dove il file di inventario cambia costantemente quando si aggiungono o si eliminano server, tenere sotto controllo gli host definiti nel file di inventario diventa una vera sfida. Diventa scomodo tornare al file host e aggiornare l’elenco degli host con i loro indirizzi IP.

E qui è dove entra in gioco un inventario dinamico. Cos’è un inventario dinamico? Un inventario dinamico è uno script scritto in Python, PHP o qualsiasi altro linguaggio di programmazione. È utile in ambienti cloud come AWS dove gli indirizzi IP cambiano una volta che un server virtuale viene fermato e riavviato.

Ansible ha già sviluppato script di inventario per piattaforme cloud pubbliche come Google Compute Engine, Amazon EC2 instance, OpenStack, RackSpace, cobbler, tra gli altri.

Quali sono i vantaggi di un inventario dinamico rispetto a un inventario statico?
  • Gli inventari dinamici fanno un lavoro perfetto per ridurre l’errore umano in quanto le informazioni vengono raccolte utilizzando gli script.
  • Sono richiesti sforzi minimi nella gestione degli inventari.

È possibile scrivere il proprio inventario dinamico personalizzato in un linguaggio di programmazione di vostra scelta. L’inventario dovrebbe restituire un formato in JSON quando vengono passate le opzioni appropriate.

Utilizzare uno script di inventario dinamico esistente

Uno script che viene utilizzato per creare un inventario dinamico deve essere reso eseguibile in modo che Ansible possa utilizzarlo.

Per recuperare le informazioni sugli host all’interno di uno script di inventario dinamico basta eseguire.

# ./script --list 

Come indicato in precedenza, l’output dovrebbe essere in JSON nel formato seguente.

Un dizionario che comprende gruppi (es.e webservers, database_Servers)
  • Un elenco di host gestiti per gruppo
  • Un dizionario di variabili
Dizionario Meta
  • Hosts e hostvars
Esito di esempio
Conclusione

In questo articolo, abbiamo dimostrato come creare inventari sia statici che dinamici. In sintesi, un file di inventario statico è un file di testo semplice che contiene una lista di host gestiti o di nodi remoti i cui numeri e indirizzi IP rimangono abbastanza costanti.

D’altra parte, un file di host dinamico cambia continuamente quando si aggiungono nuovi host o si eliminano quelli vecchi. Anche gli indirizzi IP degli host sono dinamici man mano che si fermano e si avviano nuovi sistemi host. Speriamo che abbiate trovato questo tutorial informativo.