GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare il modello Jinja2 in Ansible Playbook

Jinja2 è un motore di modelli basato su Python potente e facile da usare, utile in un ambiente IT con più server in cui le configurazioni variano ogni volta. La creazione di file di configurazione statici per ciascuno di questi nodi è noiosa e potrebbe non essere un'opzione praticabile poiché consumerà più tempo ed energia. Ed è qui che entra in gioco il template.

I modelli Jinja2 sono semplici file modello che memorizzano variabili che possono cambiare di volta in volta. Quando i Playbook vengono eseguiti, queste variabili vengono sostituite dai valori effettivi definiti in Ansible Playbook. In questo modo, la creazione di modelli offre una soluzione efficiente e flessibile per creare o modificare facilmente il file di configurazione.

In questa guida, ci concentreremo su come configurare e utilizzare il modello Jinja2 nel playbook di Ansible.

Architettura del modello

Un file modello Jinja2 è un file di testo che contiene variabili che vengono valutate e sostituite da valori effettivi durante il runtime o l'esecuzione del codice. In un file modello Jinja2, troverai i seguenti tag:

  • {{ }} :queste doppie parentesi graffe sono i tag ampiamente utilizzati in un file modello e vengono utilizzati per incorporare variabili e infine stamparne il valore durante l'esecuzione del codice. Ad esempio, una semplice sintassi che utilizza le parentesi graffe doppie è la seguente:{{ webserver }} è in esecuzione su  {{ nginx-version }}
  • {%  %} :Questi sono usati principalmente per le istruzioni di controllo come i loop e le istruzioni if-else.
  • {#  #} :Questi denotano commenti che descrivono un'attività.

Nella maggior parte dei casi, i file modello Jinja2 vengono utilizzati per creare file o sostituire file di configurazione sui server. A parte questo, puoi eseguire istruzioni condizionali come loop e se-altro istruzioni e trasformare i dati utilizzando filtri e molto altro ancora.

I file modello portano il .j2 estensione, il che implica che il modello Jinja2 è in uso.

Creazione di file modello

Ecco un esempio di un file modello Jinja2 example_template.j2 che useremo per creare un nuovo file con le variabili mostrate

Hey guys!
Apache webserver {{ version_number }} is running on {{ server }}
Enjoy!

Qui, le variabili sono {{ version_number }} &{{ server }

Queste variabili sono definite in un playbook e saranno sostituite dai valori effettivi nel file YAML del playbook esempio1.yml di seguito.

Quando il playbook viene eseguito, le variabili nel file modello vengono sostituite dai valori effettivi e viene creato un nuovo file o sostituisce un file.txt già esistente nel percorso di destinazione.

Dall'esecuzione del playbook, visualizza la destinazione e nota che le variabili sono state sostituite dai valori definiti nel file del playbook di Ansible.

Per avere un'idea migliore di come inviare i file di configurazione, creeremo un modello Jinja2 che crea un index.html file nella radice Web o nella directory dei documenti /var/www/html su un server CentOS 7. Apache è già in esecuzione e mostra la pagina di benvenuto predefinita come mostrato,

Il file modello, index.html.j2 appare come mostrato. Nota la presenza di ansible_hostname variabile che è una variabile incorporata. Quando viene eseguito un playbook, questo verrà sostituito dal nome host del server web.

<html>
    <center><h1> The Apache webserver is running on {{ ansible_hostname }} </h1>
    </center>
</html>

Il file del playbook è mostrato di seguito.

Quando il playbook viene eseguito, viene creato un nuovo file index.html e, come puoi vedere, la variabile ansible_hostname è stata sostituita dal nome host effettivo del server, in questo caso Centos-7.

Modello Jinja2 con condizionali

Il template Jinja2 può essere utilizzato anche con istruzioni condizionali come cicli for per scorrere un elenco di elementi. Considera l'esempio di Playbook 2.yml come mostrato nell'illustrazione qui sotto:Creeremo un modello che eseguirà un'iterazione sull'elenco di modelli di auto chiamati "auto" e stamperà il risultato nel file di destinazione file2.txt.

Il ciclo for nel file modello Jinja2:example2_template.j2 – è come mostrato

Quando il playbook viene eseguito, il ciclo scorre sull'elenco delle auto e stampa i modelli di auto nel file di destinazione. Puoi usare il comando cat per esaminare l'output e verificare dove esistono i modelli nel file.

Modello Jinja2 con filtri

I filtri vengono utilizzati per modificare l'aspetto dei dati di output o di formattazione. Questo funziona collegando il nome della variabile come mostrato:

{{ variabile | argomento }}

Diamo un'occhiata ad alcuni casi d'uso:

a) Trasforma le stringhe in formato maiuscolo o minuscolo

Ad esempio, per stampare i valori dell'elenco precedente in caratteri maiuscoli utilizzando il modello, reindirizzare l'elemento variabile nell'argomento "MAIUSC" come mostrato:{{ elemento | superiore }}

Quando il playbook viene eseguito, i valori vengono trasformati in maiuscolo

Se i valori sono in minuscolo dall'inizio, usa l'argomento "inferiore".

{{ articolo | inferiore }}

b) Utilizza i filtri dell'elenco per visualizzare i valori massimo e minimo

Se stai lavorando con matrici o elenchi all'interno del modello come mostrato, puoi scegliere di stampare i tuoi valori preferiti in base a determinati criteri.

Ad esempio, per stampare il valore minimo in un elenco, passa l'intero elenco a "min ' come mostrato.

{{ [ 100, 37, 45, 65, 60, 78 ] | min }}     =>   37

Per ottenere il valore massimo, utilizza il filtro "max".

{{ [ 100, 37, 45, 65, 60, 78 ] | max }}     =>   100

Puoi ottenere valori univoci da un elenco di valori duplicati in una matrice utilizzando il filtro univoco come mostrato:

{{ [ 3, 4, 3, 3, 4, 2, 2 ] | unico }}     =>   3,4,2

c) Sostituzione di un valore stringa con un altro

Inoltre, puoi sostituire una stringa con una nuova usando l'argomento sostituisci come mostrato

{{ "Ciao ragazzi" | sostituisci ("ragazzi", "mondo") }} => Ciao mondo

Nell'esempio sopra, la stringa guy verrà sostituita con world e ora l'istruzione leggerà:

Ciao mondo

Questi sono solo alcuni filtri. Ci sono tonnellate di filtri integrati che puoi usare per manipolare l'output dell'esecuzione di Ansible Playbook.

Il template Jinja2 è una soluzione ideale quando si gestiscono variabili dinamiche nei file di configurazione. È un'opzione molto efficiente rispetto alla modifica manuale dei valori che spesso richiede molto tempo e può essere piuttosto noiosa. Il tuo feedback su questo articolo è molto gradito.

Leggi anche :Come sostituire stringhe e linee con Ansible

Leggi anche :  Come creare ruoli Ansible e utilizzarli in Playbook


Linux
  1. Come creare un file in Ansible

  2. Come creare un Playbook Ansible

  3. Come passare variabili extra a un playbook Ansible

  4. Come utilizzare il tipo di file in Vim?

  5. Come usare chmod per modificare i permessi dei file?

Come definire e utilizzare i gestori in Ansible Playbook

Come creare ed eseguire file Ansible Playbook

Come utilizzare il modello Jinja2 in Ansible

Come usare Ansible per configurare Vim

Come usare il comando lsof in Linux

Come usare gzip in Linux?