Ansible

Come utilizzare il modulo modello Ansible

Come utilizzare il modulo modello Ansible
L'Ansible modello viene utilizzato principalmente per copiare file dal client Ansible (dove è installato Ansible) agli host Ansible (gestiti da Ansible). Il vantaggio di utilizzare il modello modulo, piuttosto che il copia modulo, è che l'Ansible modello il modulo può utilizzare il linguaggio di template Jinja2. Jinja2 è un potente linguaggio di template Python attraverso il quale puoi generare file di configurazione, pagine web, ecc. Puoi anche utilizzare le variabili, i loop e le condizioni dei fatti di Ansible nei tuoi modelli Jinja2.

Questo articolo ti mostrerà come usare Ansible modello modulo e alcune nozioni di base sul linguaggio dei modelli Jinja2. Quindi iniziamo!

Prerequisiti


Se vuoi provare gli esempi in questo articolo:

1) Devi avere Ansible installato sul tuo computer.

2) Devi avere almeno un host Ubuntu/Debian o un host CentOS/RHEL 8 configurato per l'automazione Ansible.

Ci sono molti articoli su LinuxHint dedicati all'installazione di Ansible e alla configurazione degli host per l'automazione di Ansible. Puoi dare un'occhiata anche a questi, se necessario.

Configurazione di una directory di progetto Ansible

Prima di procedere oltre, è una buona idea creare una struttura di directory del progetto, solo per mantenere le cose un po' organizzate.

Per creare una directory di progetto modello-demo/ e tutte le sottodirectory richieste (nella directory di lavoro corrente), esegui il seguente comando:

$ mkdir -pv template-demo/playbook/templates

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

$ cd modello-demo/

Creare un padroni di casa file di inventario, come segue:

$ nano host

Quindi, aggiungi l'IP dell'host o il nome DNS (vm1.nodokite.come e vm2.nodokite.come) nel file di inventario.

Una volta terminato questo passaggio, salvare il file premendo + X, seguito da e .

Crea un file di configurazione Ansible nella directory del progetto, come segue:

$ nano ansible.cfg

Quindi, digita le seguenti righe nel ansible.cfg file.

Una volta terminato questo passaggio, salvare il file premendo + X, seguito da e .

A questo punto, la directory del progetto dovrebbe apparire come segue:

$ albero

Come puoi vedere, anche gli host Ansible sono accessibili. Quindi, possiamo passare alla prossima sezione di questo articolo.

$ ansible all -u ansible -m ping

Nozioni di base sul modulo modello Ansible

Il modello modulo di Ansible accetta le stesse opzioni del copia modulo di Ansible.

Ansible comune modello opzioni del modulo:

src - Il percorso del file modello Jinja2 sul tuo computer, che verrà analizzato dal linguaggio del modello Jinja2 e copiato negli host remoti.
destinazione - Il percorso di destinazione sugli host remoti in cui verrà copiato il file.
proprietario - Il proprietario del file sugli host remoti.
gruppo - Il gruppo del file sugli host remoti.
modalità - La modalità di autorizzazione dei file sugli host remoti.

Facciamo un esempio.

Innanzitutto, crea un nuovo playbook Ansible A copy_file_template1.igname nel libri di gioco/ rubrica, come segue:

$ nano playbook/copy_file_template1.igname

Quindi, digita le seguenti righe nel copy_file_template1.igname playbook.

- host: tutti
utente: ansible
compiti:
- nome: Copia indice.html al server
modello:
src: indice.jinja2
dest: /home/ansible/index.html
proprietario: ansible
gruppo: ansible
modalità: 0644

Questo playbook copierà il indice.jinja2 file dal playbook/modelli/ directory (relativa alla directory del progetto) agli host remoti utilizzando Ansible modello modulo.

Una volta terminato questo passaggio, salvare il file premendo + X, seguito da e .

Crea il indice.jinja2 file modello nel playbook/modelli rubrica, come segue:

$ nano playbook/modelli/indice.jinja2

Digita le seguenti righe nel indice.jinja2 file modello:




Demo del modello Jinja2


Benvenuto in Linuxhint!



Questo è solo un semplice file HTML. Non ho usato nessuna sintassi Jinja2 fantasiosa qui.

Una volta terminato questo passaggio, salvare il file premendo + X, seguito da e .

Esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Il playbook dovrebbe funzionare correttamente.

Come puoi vedere, il indice.jinja2 il template è stato reso usando il linguaggio di template Jinja2. Il contenuto renderizzato dovrebbe essere copiato nel indice.html file degli host remoti.

Variabili di stampa nel modello Jinja2

Puoi utilizzare fatti, variabili e variabili definite dall'utente di Ansible nei tuoi modelli Jinja2.

Sul tuo modello Jinja2, puoi stampare il valore di una variabile usando il tasto nomevariabile sintassi. Se la variabile è un oggetto, puoi stampare le proprietà dei singoli oggetti utilizzando il pulsante objectVariable.nome della proprietà sintassi.

Nell'esempio che segue, stamperemo il Data proprietà del ansible_date_time oggetto nel nostro indice.jinja2 modello.

$ ansible all -u ansible -m setup | egrep --color 'data|ora'

Per prima cosa, apri il indice.jinja2 file modello con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Aggiungi la seguente riga al indice.jinja2 file modello:

Pagina generata il ansible_date_time.Data

Il finale indice.jinja2 il file dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta terminato questo passaggio, salvare il file premendo + X, seguito da e .

Esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, il indice.jinja2 template è stato elaborato dal linguaggio di template Jinja2 e ha sostituito il ansible_date_time.Data variabile con la data in AAAA-MM-GG formato. L'output è stato quindi copiato su indice.html file sull'host remoto.

Istruzione if condizionale nel modello Jinja2

Il linguaggio di template Jinja2 supporta il condizionale Se dichiarazioni. Puoi controllare alcune variabili prima di stampare qualsiasi cosa usando il Se dichiarazione.

Il Jinja2 Se la sintassi è la seguente:

% se condizione %
Fai qualcosa se la condizione è vera
% finisci se %

Vediamo un esempio del Jinja2 Se dichiarazione.

In questa sezione, dimostrerò il Jinja2 Se dichiarazione usando il distribuzione_ansible fatti variabile.

$ ansible all -u ansible -m setup | egrep --color 'dist'

Per prima cosa, apri il indice.jinja2 Modello Jinja2 con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Quindi, aggiungi le seguenti righe nel indice.jinja2 file modello:

% if ansible_distribution == "Debian" %

Stai eseguendo Debian Linux


% finisci se %

Ecco, ho verificato se distribuzione_ansible è Debian. Se lo è, stampa la stringa

Stai eseguendo Debian Linux

. Altrimenti, non stamparlo.

Infine, il indice.jinja2 il file modello dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Ora esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, sul mio host remoto Debian, il indice.html il file ha la riga

Stai eseguendo Debian Linux

. Tuttavia, sul mio host remoto CentOS, la linea non è presente. Quindi, Jinja2 Se la condizione funziona.

Condizionale: istruzione if-else nel modello Jinja2

Il linguaggio di template Jinja2 supporta il condizionale se altro dichiarazioni. Puoi stampare una cosa se la condizione corrisponde e stampare qualcos'altro se non lo fa usando il se altro dichiarazione.

Il Jinja2 se altro la sintassi è la seguente:

% se condizione %
Fai qualcosa se la condizione è vera
% altro %
Fai qualcosa se la condizione è falsa
% finisci se %

Vediamo un esempio del Jinja2 se altro dichiarazione.

Per prima cosa, apri il indice.jinja2 Modello Jinja2 con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Quindi, aggiungi le seguenti righe nel indice.jinja2 file modello:

% if ansible_distribution == "Debian" %

Stai eseguendo Debian Linux


% altro %

Non stai eseguendo Debian Linux


% finisci se %

Ecco, ho verificato se distribuzione_ansible è Debian. Se lo è, stampa la stringa

Stai eseguendo Debian Linux

. Altrimenti, stampa

Non stai eseguendo Debian Linux

.

Infine, il indice.jinja2 il file modello dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, sul mio host remoto Debian, il indice.html il file ha la riga

Stai eseguendo Debian Linux

. Ma sul mio host remoto CentOS, il indice.html il file ha la riga

Non stai eseguendo Debian Linux

. Quindi, Jinja2 se altro la condizione funziona.

Condizionale: istruzione if-elif nel modello Jinja2

Il linguaggio di template Jinja2 supporta il condizionale se-elif dichiarazioni.

Il Jinja2 se-elif la sintassi è la seguente:

% se condizione1 %
Fai qualcosa se la condizione1 è vera
% elif condition2 %
Fai qualcosa se la condizione2 è vera
% condizione elif3 %
Fai qualcosa se la condizione3 è vera

% elif conditionN %
Fai qualcosa se la condizioneN è vera
% altro %
Fai qualcosa se nessuna delle condizioni è vera
% finisci se %

qui, il % altro % la sezione è facoltativa, ma è lì se ne hai bisogno.

Vediamo un esempio del Jinja2 se-elif dichiarazione.

Per prima cosa, apri il indice.jinja2 Modello Jinja2 con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Quindi, aggiungi le seguenti righe in indice.jinja2 file modello:

% if ansible_distribution == "Debian" %

Stai eseguendo Debian Linux


% elif ansible_distribution == "CentOS" %

Stai utilizzando CentOS Linux


% altro %

Il tuo sistema operativo non è supportato


% finisci se %

Ecco, ho verificato se distribuzione_ansible è Debian. Se lo è, stampa la stringa

Stai eseguendo Debian Linux

.

Ho anche verificato se distribuzione_ansible è CentOS. Se lo è, stampa la stringa

Stai utilizzando CentOS Linux

.

Altrimenti, stampa

Il tuo sistema operativo non è supportato

.

Infine, il indice.jinja2 il file modello dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, sul mio host remoto Debian, il indice.html il file ha la riga

Stai eseguendo Debian Linux

.

Sul mio host remoto CentOS, il indice.html il file ha la riga

Stai utilizzando CentOS Linux

.

Se avessi un altro host remoto che esegue un sistema operativo diverso da Debian o CentOS, avrebbe la linea

Il tuo sistema operativo non è supportato

nel indice.html file.

Quindi, Jinja2 se-elif la condizione funziona.

Loop nel modello Jinja22

Puoi anche stampare array e oggetti usando i loop in Jinja2.
Il Jinja2 per la sintassi del ciclo è la seguente:

% per nomevariabile in nomearray %
Fai qualcosa con nomevariabile
% endfor %

Qui, in ogni iterazione dell'array nomearray, uno degli elementi dell'array (a partire dall'inizio dell'array) è assegnato a nomevariabile variabile. Puoi fare qualcosa con questa variabile all'interno del ciclo.

Vediamo come puoi stampare gli elementi dell'array nel tuo modello Jinja2 nel seguente esempio.

Per prima cosa, apri il copy_file_template1.igname Playbook Ansible con l'editor di testo nano, come segue:

$ nano playbook/copy_file_template1.igname

Quindi, aggiungi le seguenti righe in copy_file_template1.igname file del registro:

variabili:
menù:
- Casa
- Prodotti
- Chi siamo
- Contattaci

Qui ho aggiunto un menu array in copy_file_template1.igname playbook. Successivamente, stamperò gli elementi dell'array usando un ciclo in my indice.jinja2 File modello Jinja2.

Infine, il copy_file_template1.igname il file playbook dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Ora apri il indice.jinja2 Modello Jinja2 con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Aggiungi le seguenti righe nel indice.jinja2 file modello:

Qui, sto generando una semplice barra di navigazione HTML usando un Jinja2 per ciclo continuo. Il ciclo scorre attraverso il menu array (che ho definito nel copy_file_template1.yaml playbook) elementi e genera a menù elemento in ogni iterazione.

Infine, il indice.jinja2 il file modello dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, Jinja2 per loop ha generato una barra di navigazione HTML (nel indice.html file).

Puoi anche accedere a una serie di oggetti nel tuo modello Jinja2.

Vediamo un altro esempio.

Per prima cosa, apri il copy_file_template1.igname Playbook Ansible con l'editor di testo nano, come segue:

$ nano playbook/copy_file_template1.igname

Quindi, aggiungi le seguenti righe in copy_file_template1.igname file del registro:

variabili:
menù:
- nome: Casa
link: /home
- nome: Prodotti
link: /prodotti
- nome: Chi siamo
link: /chi-siamo
- nome: Contattaci
link: /contattaci

Qui ho aggiunto un menu array di oggetti in copy_file_template1.igname playbook. Ciascuno di questi oggetti ha due proprietà, a nome proprietà e a collegamento proprietà.

Infine, il copy_file_template1.igname il file playbook dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Apri il indice.jinja2 Modello Jinja2 con l'editor di testo nano, come segue:

$ nano playbook/modelli/indice.jinja2

Quindi, aggiungi le seguenti righe in indice.jinja2 file modello:

Tutto quello che vedi qui è lo stesso dell'esempio precedente. L'unica differenza è che sto stampando le proprietà dell'oggetto nome (usando menù.nome) e collegamento (usando menù.collegamento) nel mio indice.jinja2 Modello Jinja2.

Infine, il indice.jinja2 il file modello dovrebbe apparire come mostrato nello screenshot qui sotto.

Una volta modificato il file, salvalo premendo + X, seguito da e .

Ora esegui il playbook copy_file_template1.igname come segue:

$ playbook ansible-playbook/copy_file_template1.igname

Come puoi vedere, Jinja2 per loop ha generato una barra di navigazione HTML (nel indice.html file) da un array di oggetti.

Qual è il prossimo?

In questo articolo, ti ho mostrato come usare Ansible modello modulo e ha descritto alcune delle basi del linguaggio di template Jinja2. Visita il sito web ufficiale di Jinja2 per saperne di più sul linguaggio dei modelli Jinja2.

Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...
Controlla e gestisci il movimento del mouse tra più monitor in Windows 10
Gestore mouse con doppio display ti consente di controllare e configurare il movimento del mouse tra più monitor, rallentando i suoi movimenti vicino ...
WinMouse ti consente di personalizzare e migliorare il movimento del puntatore del mouse su PC Windows
Se vuoi migliorare le funzioni predefinite del puntatore del mouse, usa freeware WinMouse. Aggiunge più funzionalità per aiutarti a ottenere il massim...