Ricerca nel sito web

Come utilizzare gli inventari statici e dinamici in Ansible - Parte 4


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

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

Gli host gestiti possono essere elencati come voci individuali o classificati sotto il nome di un gruppo, come vedremo in seguito. In Ansible esistono due tipi di file di inventario: Statico e Dinamico.

Diamo un’occhiata a ciascuno di questi e vediamo come possiamo gestirli. A questo punto, presupponiamo 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 host statico

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

Il nome di un gruppo host è racchiuso tra parentesi quadre, ad esempio [nome gruppo]. Le voci dell'host gestito vengono successivamente elencate sotto il nome del gruppo, ciascuna sulla propria riga. Come discusso in precedenza, gli host vengono elencati utilizzando nomi host o indirizzi IP.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

A scopo illustrativo, creeremo un file di inventario statico.

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

Salvare il file ed uscire.

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

Ansible consente inoltre di inserire gruppi di host sotto un nome di gruppo. Nel file di inventario sopra, i gruppi webservers e database_servers sono stati posizionati sotto il datacenter.

NOTA: non è obbligatorio inserire gli host gestiti in un gruppo host. Puoi semplicemente elencarli utilizzando, ad esempio, i loro nomi host o indirizzi IP.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

Usiamo ora alcuni comandi Ansible per fare riferimento al file di inventario dell'host. La sintassi di base per la gestione dell'inventario è quella mostrata.

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

Per esempio,

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

In alternativa, puoi utilizzare il carattere jolly * per sostituire l'argomento 'all'.

ansible * -i /root/test_labs/hosts --list-hosts

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

ansible webservers -i /root/test_labs/hosts --list-hosts

File di inventario host dinamico

In una configurazione, in particolare in un'impostazione cloud come AWS in cui il file di inventario continua a cambiare costantemente man mano che aggiungi o rimuovi 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 relativi indirizzi IP.

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

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

Quali sono i vantaggi di un inventario dinamico rispetto a un inventario statico?
  • Gli inventari dinamici svolgono un lavoro perfetto nel ridurre l'errore umano poiché le informazioni vengono raccolte utilizzando script.
  • È richiesto uno sforzo minimo nella gestione degli inventari.

Puoi scrivere il tuo inventario dinamico personalizzato in un linguaggio di programmazione di tua scelta. L'inventario dovrebbe restituire un formato JSON quando vengono passate le opzioni appropriate.

Utilizza uno script di inventario dinamico esistente

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

Per recuperare informazioni sugli host all'interno di uno script di inventario dinamico è sufficiente eseguire.

./script --list 

Come sottolineato in precedenza, l'output dovrebbe essere in JSON nel formato seguente.

Un dizionario composto da gruppi (ad esempio webserver, database_Server)
  • Un elenco di host gestiti per gruppo
  • Un dizionario di variabili
Meta dizionario
  • Host e variabili host
Uscita del campione
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
Conclusione

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

D'altra parte, un file host dinamico continua a cambiare man mano che aggiungi nuovi host o rimuovi quelli vecchi. Anche gli indirizzi IP degli host sono dinamici quando si arrestano e si avviano nuovi sistemi host. Ci auguriamo che tu abbia trovato questo tutorial informativo.