Come utilizzare il modulo di registro Ansible

Come utilizzare il modulo di registro Ansible
In Ansible, puoi eseguire qualsiasi comando shell sui tuoi host ansible, gli host che si confonderai con Ansible. Questi comandi shell possono avere output. Per impostazione predefinita, l'output viene ignorato. Se si desidera archiviare l'output in una variabile e usarlo in seguito, puoi usare l'ansible Registrati modulo. Questo articolo ti mostrerà come usare l'ansible Registrati Modulo per archiviare l'output del comando in una variabile e accedervi più tardi nel tuo playbook Ansible.

Prerequisiti

Se vuoi provare gli esempi in questo articolo, devi:

1) Avere Ansible installato sul tuo computer.

2) Avere un host Ubuntu configurato per l'automazione Ansible.

Ci sono molti articoli su Linuxhint dedicati all'installazione di Ansible e alla configurazione di host per Ansible Automation. È possibile controllare questi articoli se necessario.

Impostazione di una directory di progetto

Prima di andare oltre, impostare una nuova directory di progetti Ansible, solo per mantenere le cose un po 'organizzate.

Per creare la directory del progetto Register-demo/ e tutte le sottodirectory richieste (nella directory di lavoro attuale), eseguire il seguente comando:

$ mkdir -pv register -demo/playbooks

Una volta creata la directory del progetto, vai alla directory del progetto, come segue:

$ CD Register-Demo/

Creare un ospiti File di inventario, come segue:

$ nano hosts

Aggiungi il nome IP o DNS host del tuo host Ubuntu nel file di inventario (un host per riga), come mostrato nello screenshot seguente.

Qui, ho aggiunto il mio Ubuntu 20.04 LTS host VM3.nodekite.com nel Ubuntu20 gruppo.

Una volta terminato, salva il file premendo + X, seguito da Y E .

Crea un file di configurazione Ansible Ansible.cfg Nella directory del progetto, come segue:

$ nano ansible.cfg

Quindi, digitare le seguenti righe in Ansible.cfg file:

[impostazioni predefinite]
Inventario = host
host_key_checking = false

Una volta terminato, salva il Ansible.cfg File premendo + X, seguito da Y E .

Ora, prova a eseguire il ping del tuo host Ubuntu, come segue:

$ ansible ubuntu20 -u ansible -m ping

Come puoi vedere, il mio Ubuntu 20.04 host VM3.nodekite.com è accessibile.

Esempio 1: le basi

In questo esempio, ti mostrerò alcune delle basi dell'Ansible Registrati modulo. Userò Ansible per generare una password casuale nel mio Ubuntu 20.04 host usando il pwgen comando, memorizzare la password in una variabile utilizzando il Registrati modulo e stampare la password sullo schermo.

Innanzitutto, crea il nuovo playbook Generate_Pass.Yaml nel playbooks/ Directory, come segue:

$ nano playbooks/generate_pass.Yaml

Digitare le seguenti righe in Generate_Pass.Yaml file:

- Host: Ubuntu20
Utente: Ansible
diventa vero
compiti:
- Nome: assicurarsi che PWGen sia installato
Apt:
Nome: Pwgen
Stato: presente
update_cache: vero
- Nome: generare password
Shell: pwgen -n 1 -s 30
Registra: mypass
- Nome: stampa la password generata
debug:
MSG: "La password è mypass"

Una volta terminato, premere + X, seguito da Y E , per salvare il Generate_Pass.Yaml file.

La riga seguente dice ad Ansible di eseguire il playbook Generate_Pass.Yaml su ogni ospite del Ubuntu20 gruppo. Nel mio caso, il playbook verrà eseguito sull'host VM3.nodekite.com.

In questo playbook, definirò tre compiti.

Il primo compito entrerà che il pwgen Il pacchetto è installato.

La seconda attività genererà una password casuale di 30 caratteri utilizzando il pwgen comando. Userò il Registrati modulo per archiviare la password generata in mypass variabile.

La terza attività stamperà il file mypass variabile usando l'ansible debug modulo.

Esegui il playbook Generate_Pass.Yaml usando il seguente comando:

$ ansible-playbook playbooks/generate_pass.Yaml

Come puoi vedere, il playbook ha funzionato con successo. È stata anche generata una password.

Ma perché la variabile mypass Stampa così tanti articoli?

Bene, la variabile mypass è un oggetto che contiene alcune proprietà importanti.

Le proprietà più importanti di ciascuno dei Registrati Le variabili sono le seguenti:

cmd - Il comando che ha funzionato per generare l'output.

stdout - L'output del comando.

Stderr - L'output di errore del comando.

inizio - La data e l'ora in cui il comando ha iniziato a eseguire.

FINE - La data e l'ora in cui il comando ha terminato l'esecuzione.

delta - Il tempo impiegato per eseguire il comando. Questa è la differenza tra il FINE e il inizio proprietà.

stdout_lines - Un array contenente ciascuna riga di output del comando. Uguale a stdout, Ma stdout separa le righe usando un nuovo linee (\ n) anziché array.

stderr_lines - Un array contenente ogni riga di output di errore del comando. Uguale a Stderr, Ma Stderr separa le linee usando i caratteri di nuove linee (\ n) anziché array.

Se si desidera semplicemente stampare/accedere alla stringa password (che è molto probabile), è possibile stampare/accedere al stdout proprietà del mypass variabile nel tuo playbook, come contrassegnato nello screenshot qui sotto.

$ nano playbooks/generate_pass.Yaml

Una volta che hai finito, esegui il playbook Generate_Pass.Yaml Ancora. Verrà stampata solo la stringa password, come puoi vedere nello screenshot seguente.

Che copre le basi dell'ansible Registrati modulo.

Esempio 2: contenuti della directory di archiviazione

In questo esempio, ti mostrerò come archiviare il contenuto di una directory in una variabile usando l'ansible Registrati modulo, oltre a come iterare su di loro.

Innanzitutto, crea il nuovo playbook get_dir_contents.Yaml nel playbooks/ directory.

$ nano playbooks/get_dir_contents.Yaml

Quindi, digitare le seguenti righe in get_dir_contents.Yaml Playbook:

- Host: Ubuntu20
Utente: Ansible
diventa vero
compiti:
- Nome: elenca tutti i file e le directory in /home /ansible
Shell: LS /Home /Ansible
Registro: dir_contents
- Nome: Stampa contenuti della directory usando loop
debug:
msg: "item"
Loop: "dir_contents.stdout_lines "

Una volta terminato, premere + X, seguito da Y E , per salvare il Generate_Pass.Yaml file.

In questo playbook, definirò due compiti.

La prima attività elenca tutti i contenuti del /Home/Ansible directory e li memorizza nel dir_contents variabile.

La seconda attività stampica il file dir_contents variabile.

Corri il get_dir_contents.Yaml playbook, come segue.

$ ansible-playbook playbooks/get_dir_contents.Yaml

Come puoi vedere, il stdout_lines Proprietà memorizzata il contenuto della directory come un array. IL stdout La proprietà è inoltre memorizzata nel contenuto della directory. Queste proprietà sono separate da caratteri newline (\ n). In questo esempio, il stdout_lines la proprietà è facile da lavorare con.

Successivamente, iterare il contenuto della directory usando un loop.

Per fare questo, aprire il get_dir_contents.Yaml playbook e modifica il secondo compito, come contrassegnato nello screenshot seguente.

$ nano playbooks/get_dir_contents.Yaml

Qui, sto ripetendo il dir_contents.stdout_lines Array usando un ciclo e stampare gli elementi dell'array usando l'ansible debug modulo. In questo compito, il articolo La variabile è una variabile loop usata per iterare sugli elementi dell'array.

Corri il get_dir_contents.Yaml playbook, come segue:

$ ansible-playbook playbooks/get_dir_contents.Yaml

Come puoi vedere, il contenuto del /Home/Ansible La directory è stampata sullo schermo.

Esempio 3: directory di backup

In questo esempio, ti mostrerò come eseguire il backup di una directory usando l'ansible Registrati, file, E copia moduli.

Innanzitutto, crea il nuovo playbook backup_home_dir.Yaml nel playbooks/ Directory, come segue:

$ nano playbooks/backup_home_dir.Yaml

Quindi, digitare le seguenti righe in backup_home_dir.Yaml file.

- Host: Ubuntu20
Utente: Ansible
diventa vero
compiti:
- Nome: Get Home Directory /Home /Ansible Contende
Shell: LS /Home /Ansible
Registro: dir_contents
- Nome: crea una nuova directory /tmp /ansible
file:
Path: /tmp /ansible
Stato: directory
- Nome: backup home directory /home /ansible to /tmp /ansible
copia:
src:/home/ansible/item
dest:/tmp/ansible/
remote_src: vero
Loop: "dir_contents.stdout_lines

Una volta terminato, premere + X, seguito da Y E , per salvare il backup_home_dir.Yaml file.

In questo playbook, definirò tre compiti.

La prima attività memorizza il contenuto del /Home/Ansible Directory (la directory che eseguirò il backup) nel dir_contents variabile usando l'ansible Registrati modulo.

La seconda attività crea una nuova directory /tmp/ansible usando l'ansible file modulo. Questa è la directory in cui verrà memorizzato il backup.

La terza attività si aggira attraverso il dir_contents.stdout_lines array e usa l'ansible copia modulo per copiare ogni directory su /tmp/ansible/ directory.

Corri il backup_home_dir.Yaml playbook, come segue:

$ ansible-playbook playbooks/backup_home_dir.Yaml

Come puoi vedere, sul mio Ubuntu 20.04 LTS host, il backup ha avuto successo.

Esempio 4: eseguire o saltare le attività

In questo esempio, ti mostrerò come eseguire o saltare le attività, a seconda della variabile che hai registrato, usando il Registrati modulo.

Innanzitutto, crea il nuovo playbook Register_conditions.Yaml nel playbooks/ directory come segue:

$ nano playbooks/register_conditions.Yaml

Quindi, digitare le seguenti righe in Register_conditions.Yaml file.

- Host: Ubuntu20
Utente: Ansible
diventa vero
compiti:
- Nome: Elenco Directory Contenuto
Shell: LS/Home/Ansible/Test3
Registro: dir_contents
- Nome: controlla se la directory è vuota
debug:
MSG: "La directory è vuota."
Quando: dir_contents.stdout == ""

Una volta terminato, premere + X, seguito da Y E , per salvare il Register_conditions.Yaml file.

In questo playbook, ho definito due compiti.

La prima attività memorizza il contenuto del /home/ansible/test3 directory nel dir_contents variabile.

La seconda attività controlla se dir_contents.stdout è una stringa vuota o se la directory /home/ansible/test3 è vuoto. Se la directory è vuota, il messaggio La directory è vuota Stamperò.

Corri il Register_conditions.Yaml playbook, come segue:

$ ansible-playbook playbooks/register_conditions.Yaml

Come puoi vedere, il playbook ha funzionato con successo.

Dalla directory /home/ansible/test3 è vuoto, il playbook ha stampato il messaggio La directory è vuota.

Quindi, crea un nuovo file in /home/ansible/test3 directory.

$ touch test3/myfile

Dal /home/ansible/test3 La directory non è più vuota, l'attività Controlla se la directory è vuota viene saltato, come puoi vedere nello screenshot qui sotto.

$ ansible-playbook playbooks/register_conditions.Yaml

Conclusione

L'ansible Registrati Il modulo è molto utile per l'automazione del server. Questo articolo ti ha mostrato le basi del Registrati modulo, inclusi esempi di utilizzo di Ansible Registrati Modulo per l'archiviazione della directory e il backup e per le attività di directory in esecuzione.