GNU/Linux >> Linux Esercitazione >  >> Linux

Inventario Ansible e file di configurazione

Alcuni giorni fa abbiamo discusso di come configurare un lab Ansible a tre nodi utilizzando Vagrant in Linux. In questo articolo, impareremo in dettaglio i concetti fondamentali di Ansible come l'inventario Ansible e i file di configurazione.

Struttura di base di Ansible

Quando inizi a lavorare con ansible, ci sono due file importanti che dovresti conoscere. Uno è Inventario Ansible e il secondo è la Configurazione Ansible file.

La configurazione contiene tutte le configurazioni che ansible utilizzerà durante il runtime. Quando installi ansible utilizzando il gestore pacchetti del sistema operativo, puoi vedere che esiste un file di configurazione predefinito chiamato "ansible.cfg " creato in /etc/ansible directory.

Il file di inventario contiene l'indirizzo IP o le informazioni DNS sull'elenco di host gestiti con cui vogliamo lavorare. Ansible leggerà i nomi host dal file di inventario e le attività/le riproduzioni verranno eseguite su quei nodi. I file di inventario possono essere creati in ini , yaml e json formati.

Di seguito la struttura del mio progetto. Ho un ansible.cfg file di configurazione, un file hosts e un playbook scritto in yaml formato.

Quando attivo il playbook, ansible leggerà la configurazione da ansible.cfg file e i dettagli dell'host dal file hosts per eseguire le riproduzioni.

[email protected]:~/ansible_project$ tree .
.
├── ansible.cfg
├── hosts
└── playbook.yml

0 directories, 3 files

Parliamo in dettaglio di questi due file e finalmente eseguiremo alcuni comandi ad hoc.

File di configurazione Ansible

Ansible utilizza il file di configurazione per caricare i parametri necessari per eseguire l'attività ansible. Se hai installato ansible utilizzando il gestore di pacchetti , avrai un ansible.cfg file in /etc/ansible directory.

Di seguito è riportato l'esempio di ansible.cfg file.

Ansible cercherà il file di configurazione nel seguente ordine.

  • ANSIBLE_CONFIG - variabile d'ambiente
  • ansible.cfg - Directory corrente da cui stai eseguendo il comando
  • .ansible.cfg - Directory principale degli utenti
  • /etc/ansible/ansible.cfg - In /etc/ansible directory

Esegui ansible --version comando per vedere quale file di configurazione sta selezionando ansible.

$ ansible --version
ansible [core 2.12.3]
  config file = /home/vagrant/ansible_project/ansible.cfg
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True

Ho creato una directory di progetto personalizzata e creato un ansible.cfg file. Il mio file di configurazione contiene solo due proprietà, la posizione dell'inventario e il controllo della chiave host disabilitato.

[defaults]
inventory = /home/karthick/ansible_project/hosts
host_key_checking = False

Ci sono un sacco di altre proprietà, ma al momento puoi iniziare a usarle aggiungendo solo la proprietà "inventario".

File di inventario Ansible

Nel file di inventario, forniremo l'indirizzo IP o il DNS di nomi di server, dispositivi di rete, servizi cloud o qualsiasi cosa con cui ansible può lavorare.

Gli inventari possono essere scritti in ini , json e yaml formato e hai anche script per convertire un formato di inventario in altri formati.

Per impostazione predefinita, puoi trovare un file di inventario (host) in /etc/ansible directory se hai installato ansible utilizzando il gestore di pacchetti del sistema operativo. Si consiglia sempre di creare una directory di progetto separata e creare un inventario e un file di configurazione.

La tabella seguente rappresenta come è impostato il mio laboratorio ansible. Creerò il file di inventario per questa configurazione del lab ed eseguirò il modulo ping per dimostrare come funzionano le cose nel file di inventario.

TIPO DI NODO NOME DEL NODO INDIRIZZO IP OS FLAVOUR
Nodo di controllo controller.anslab.com 192.168.10.3 ubuntu/focal64
Nodo gestito managed1.anslab.com 192.168.10.4 ubuntu/focal64
Nodo gestito managed2.anslab.com 192.168.10.5 ubuntu/focal64

File di inventario senza raggruppamento esplicito

Il file di inventario ha un concetto chiamato raggruppamento in cui raggrupperai le tue risorse ed eseguirai attività su quel gruppo. Sarà nella seguente struttura.

[group-name]
Resource1
Resource2
....
Resource N

È possibile creare il file di inventario senza utilizzare i gruppi. In questo caso, Ansible utilizzerà due gruppi predefiniti "tutti" e "separato" .

  • TUTTO IL GRUPPO - Tutte le risorse disponibili nel file di inventario per impostazione predefinita verranno assegnate a tutti i gruppi .
  • NON GRUPPI - Le risorse che non fanno parte di alcun gruppo definito dall'utente verranno automaticamente assegnate al gruppo non raggruppato .

Ho creato un file di inventario senza alcun gruppo. Ora, questi due nodi rientreranno in tutti i gruppi e nel gruppo non raggruppato.

$ cat hosts
managed1.anslab.com
managed2.anslab.com

Puoi eseguire il seguente comando ansible per controllare l'elenco degli host in tutti e gruppi non raggruppati.

$ ansible all --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com
$ ansible ungrouped --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com

File di inventario con raggruppamento

Come predetto, il raggruppamento è un ottimo modo per organizzare le tue risorse, quindi sarà facile per te eseguire l'attività rispetto al gruppo specifico. Ho due nodi gestiti e eseguono Ubuntu 20.04LTS.

Diciamo che voglio raggruppare il mio file di inventario in base al tipo di sistema operativo, quindi il file di inventario apparirà come di seguito. Qui ubuntu è il nome del gruppo.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

Le attività possono essere eseguite su questo gruppo.

$ ansible ubuntu -m ping -o
managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

Se controllo ora il gruppo "non raggruppato", non ci sarà nessun host.

$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):

Puoi creare tutti i gruppi che desideri nel file di inventario e utilizzare gli stessi nomi di risorse.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[dev]
managed1.anslab.com

[test]
managed2.anslab.com
$ ansible ubuntu -m ping -o
$ ansible dev -m ping -o
$ ansible test -m ping -o

File di inventario con intervalli

Quando hai un modello di denominazione comune per le tue risorse, puoi usare gli intervalli. Dai un'occhiata all'esempio seguente in cui invece di ripetere il DNS ho usato l'intervallo per accorciarlo.

[ubuntu]
managed[1:2].anslab.com

File di inventario con gruppi figlio

Puoi creare un gruppo e utilizzare altri nomi di gruppo sotto di esso. Dai un'occhiata all'esempio seguente, ho il gruppo Ubuntu che ha i nomi dei miei server. Ho creato un altro gruppo denominato server che contiene il gruppo Ubuntu.

È importante aggiungere :bambini al nome del gruppo, altrimenti il ​​gruppo di server tratterà "ubuntu " come nome del server invece del nome del gruppo.

[ubuntu]
managed[1:2].anslab.com

[server:children]
ubuntu

File di inventario con variabili host e variabili di gruppo

Il file di inventario supporta le variabili host e di gruppo. Le variabili host non sono altro che variabili e i loro valori passati all'host nel file di inventario. Nella configurazione seguente sto dicendo ansible di usare otechnix come mio utente e invece di usare la porta ssh standard, usa la porta 2222 .

[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222

Group vars è uguale a host vars ma le variabili verranno applicate all'intero gruppo anziché a un singolo host. Puoi vedere dalla configurazione sopra, ansible_user e ansible_port è lo stesso per entrambi i nodi. Quindi puoi creare un gruppo var in cui le variabili verranno ereditate da tutti i nodi del gruppo. Devi aggiungere :vars per rendere il gruppo come gruppo vars.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[ubuntu:vars]
ansible_user=ostechnix
ansible_port=2222

Avviso: Quando hai sia group var che host var per lo stesso nodo, host var ha la precedenza elevata.

Esistono molti parametri di inventario che puoi utilizzare e puoi ottenere l'elenco dal documento ufficiale .

File di inventario con alias

Puoi creare un alias per la risorsa come di seguito. Qui m1 e m2 sono alias.

[ubuntu]
m1 ansible_host=managed1.anslab.com
m2 ansible_host=managed2.anslab.com

Ora questo alias può essere utilizzato per eseguire alcune attività.

$ ansible m1 -m ping -o
m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
$ ansible m2 -m ping -o
m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

File di inventario in formato YAML

I file di inventario possono anche essere scritti in formato YAML. Tutto ciò di cui abbiamo discusso nelle sezioni precedenti è scritto in formato YAML.

L'immagine seguente rappresenta due nodi con un paio di variabili host.

L'immagine sotto rappresenta due nodi con variabili di gruppo.

Comando Ansible Inventory

Ansible ha un comando di inventario che sarà molto utile per visualizzare le informazioni sui file di inventario.

Per ottenere l'elenco delle opzioni supportate, esegui il comando help.

$ ansible-inventory --help

Per ottenere i dettagli dell'inventario in formato grafico, utilizza --graph bandiera. Se disponi di file di inventario diversi, puoi utilizzare -i flag per puntare esplicitamente al file di inventario.

$ ansible-inventory --graph

Puoi stampare le informazioni sulla var dell'host e del gruppo passando --vars flag insieme a --graph bandiera.

$ ansible-inventory --graph --vars

Quando usi --list flag, l'output sarà in formato JSON.

$ ansible-inventory -list

Puoi ottenere informazioni su un particolare nodo usando --host bandiera.

$ ansible-inventory --host managed1.anslab.com

Conclusione

In questo articolo, abbiamo visto un concetto importante che costituisce il nucleo dell'architettura ansible. Se sei un principiante, concentrati sulla creazione dell'inventario con il formato ini e in futuro imparerai di più sulle migliori pratiche quando inizierai a lavorare su progetti di produzione.

Leggi il prossimo:

  • Autenticazione SSH Ansible ed escalation dei privilegi
  • Iniziare con i comandi ad hoc Ansible

Linux
  1. Come trovare file di configurazione MySQL, PHP e Apache

  2. Come gestire l'inventario host statico e dinamico di Ansible

  3. Come estrarre i file .gz e .tar.gz in Linux

  4. Crea e rimuovi i file di scambio in Ubuntu

  5. wget vs curl:come scaricare file usando wget e curl

Come creare ed eseguire file Ansible Playbook

Come rinominare file e directory in Linux

Come copiare file e directory nel terminale Linux

Comando Stat:Visualizza gli attributi di file e directory

Comando tar di Linux per comprimere ed estrarre file

Rinominare file e cartelle in cPanel