Questo articolo ti mostrerà come usare l'ansible modello Modulo e alcune basi del linguaggio del modello Jinja2. Quindi iniziamo!
Prerequisiti
Se desideri provare gli esempi in questo articolo:
1) Devi avere Ansible installato sul tuo computer.
2) È necessario disporre di almeno un host Ubuntu/Debian o un host CentOS/RHEL 8 configurato per ANSIBLE Automation.
Ci sono molti articoli su Linuxhint dedicati all'installazione di Ansible e alla configurazione di host per Ansible Automation. Puoi anche controllarli, se necessario.
Impostazione di una directory di progetto Ansible
Prima di andare oltre, è una buona idea creare una struttura di directory di 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 attuale), eseguire il seguente comando:
$ mkdir -pv modello -demo/playbooks/modelli
Una volta creata la directory del progetto, vai alla directory del progetto, come segue:
$ cd modello-demo/
Creare un ospiti File di inventario, come segue:
$ nano hosts
Quindi, aggiungi il nome IP o DNS host (VM1.nodekite.com E VM2.nodekite.com) nel file di inventario.
Una volta terminato questo passaggio, salva il file premendo + X, seguito da Y E .
Crea un file di configurazione Ansible nella directory del progetto, come segue:
$ nano ansible.cfg
Quindi, digitare le seguenti righe in Ansible.cfg file.
Una volta terminato questo passaggio, salva il file premendo + X, seguito da Y E .
A questo punto, la directory del progetto dovrebbe apparire come segue:
$ Tree
Come puoi vedere, anche gli host Ansible sono accessibili. Quindi, possiamo passare alla sezione successiva di questo articolo.
$ ansible tutto -u ansible -m ping
Nozioni di base sul modulo del modello Ansible
IL modello Il modulo di Ansible accetta le stesse opzioni del copia Modulo di Ansible.
Ansible comune modello Opzioni del modulo:
src - Il percorso del file del modello Jinja2 sul tuo computer, che sarà analizzato dal linguaggio di modelli di Jinja2 e copiata sugli host remoti.
dest - Il percorso di destinazione sugli host remoti a 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 del file sugli host remoti.
Vediamo un esempio.
Innanzitutto, crea un nuovo playbook Ansible copy_file_template1.Yaml nel playbooks/ Directory, come segue:
$ nano playbooks/copy_file_template1.YamlQuindi, digitare le seguenti righe in copy_file_template1.Yaml playbook.
- Host: tuttoQuesto playbook copierà il indice.Jinja2 file da playbook/modelli/ Directory (relativo alla directory del progetto) agli host remoti usando l'ansible modello modulo.
Una volta terminato questo passaggio, salva il file premendo + X, seguito da Y E .
Creare il indice.Jinja2 file modello nel file playbook/modelli Directory, come segue:
$ nano playbooks/modelli/indice.Jinja2
Digitare le seguenti righe in indice.Jinja2 File modello:
Questo è solo un semplice file HTML. Non ho usato alcuna sintassi di fantasia Jinja2 qui.
Una volta terminato questo passaggio, salva il file premendo + X, seguito da Y E .
Esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlIl playbook dovrebbe funzionare con successo.
Come puoi vedere, il indice.Jinja2 Il modello è stato reso utilizzando il linguaggio del modello Jinja2. Il contenuto reso deve essere copiato a indice.html File degli host remoti.
Variabili di stampa nel modello Jinja2
È possibile utilizzare fatti, variabili e variabili definite dall'utente nei modelli Jinja2.
Sul tuo modello Jinja2, puoi stampare il valore di una variabile usando il VariableName sintassi. Se la variabile è un oggetto, è possibile stampare singoli proprietà dell'oggetto utilizzando il 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 configurazione | EGREP -COLOR 'DATA | TIMA'
Innanzitutto, apri il indice.Jinja2 File modello con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2
Aggiungi la riga seguente al file indice.Jinja2 File modello:
Pagina generata su ansible_date_time.data
Il finale indice.Jinja2 Il file dovrebbe apparire come mostrato nello screenshot seguente.
Una volta terminato questo passaggio, salva il file premendo + X, seguito da Y E .
Esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, il indice.Jinja2 Il modello è stato elaborato dal linguaggio del modello di Jinja2 e ha sostituito il ansible_date_time.data variabile con la data in YYYY-MM-DD formato. L'uscita è stata quindi copiata a indice.html File sull'host remoto.
Dichiarazione IF condizionale nel modello Jinja2
Jinja2 Il linguaggio del modello supporta condizionale Se dichiarazioni. È possibile controllare determinate variabili prima di stampare qualsiasi cosa usando il Se dichiarazione.
Il jinja2 Se La sintassi è la seguente:
% se condizione %
Fare qualcosa se la condizione è vera
% finisci se %
Vediamo un esempio del jinja2 Se dichiarazione.
In questa sezione, dimostrerò il jinja2 Se Dichiarazione usando il Ansible_Distribution Fatti variabili.
$ ansible all -u ansible -m configurazione | egrep -color 'dist'
Innanzitutto, apri il indice.Jinja2 Modello Jinja2 con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2
Quindi, aggiungi le seguenti righe in indice.Jinja2 File modello:
% se Ansible_Distribution == "Debian" %Stai eseguendo Debian Linux
Qui, ho controllato se Ansible_Distribution È Debian. Se lo è, stampare la stringa Stai eseguendo Debian Linux
Finalmente il indice.Jinja2 Il file modello dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Ora, esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, sul mio ospite remoto Debian, il indice.html Il file ha la riga Stai eseguendo Debian Linux
Condizionale: dichiarazione if-else nel modello Jinja2
Jinja2 Il linguaggio del modello supporta condizionale se altro dichiarazioni. Puoi stampare una cosa se la condizione corrisponde e stampano qualcos'altro se non utilizza il se altro dichiarazione.
Il jinja2 se altro La sintassi è la seguente:
% se condizione %Vediamo un esempio del jinja2 se altro dichiarazione.
Innanzitutto, apri il indice.Jinja2 Modello Jinja2 con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2
Quindi, aggiungi le seguenti righe in indice.Jinja2 File modello:
% se Ansible_Distribution == "Debian" %Stai eseguendo Debian Linux
Non stai eseguendo Debian Linux
Qui, ho controllato se Ansible_Distribution È Debian. Se lo è, stampare la stringa Stai eseguendo Debian Linux Non stai eseguendo Debian Linux
Finalmente il indice.Jinja2 Il file modello dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, sul mio ospite remoto Debian, il indice.html Il file ha la riga Stai eseguendo Debian Linux Non stai eseguendo Debian Linux
Condizionale: istruzione if-elif nel modello Jinja2
Jinja2 Il linguaggio del modello supporta condizionale if-elif dichiarazioni.
Il jinja2 if-elif La sintassi è la seguente:
% se condition1 %Qui, il % altro % La sezione è facoltativa, ma è lì se ne hai bisogno.
Vediamo un esempio del jinja2 if-elif dichiarazione.
Innanzitutto, apri il indice.Jinja2 Modello Jinja2 con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2
Quindi, aggiungi le seguenti righe in indice.Jinja2 File modello:
% se Ansible_Distribution == "Debian" %Stai eseguendo Debian Linux
Stai correndo centos linux
Il tuo sistema operativo non è supportato
Qui, ho controllato se Ansible_Distribution È Debian. Se lo è, stampare la stringa Stai eseguendo Debian Linux
Ho anche controllato se Ansible_Distribution È Centos. Se lo è, stampare la stringa Stai correndo centos linux
Altrimenti, stampa Il tuo sistema operativo non è supportato
Finalmente il indice.Jinja2 Il file modello dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, sul mio ospite 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 correndo centos linux
Se avessi un altro host remoto che esegueva un sistema operativo diverso da Debian o CentOS, avrebbe la linea Il tuo sistema operativo non è supportato
Quindi, il jinja2 if-elif la condizione funziona.
Loop nel modello Jinja2
Puoi anche stampare array e oggetti usando loop in jinja2.
Il jinja2 per La sintassi del loop è la seguente:
% per variaLelename in ArrayName %
Fai qualcosa con Variablename
% endfor %
Qui, in ogni iterazione dell'array ArrayName, Uno degli elementi dell'array (a partire dall'inizio dell'array) è assegnato al Variablename variabile. Puoi fare qualcosa con questa variabile all'interno del loop.
Vediamo come puoi stampare elementi di array nel tuo modello Jinja2 nell'esempio seguente.
Innanzitutto, apri il copy_file_template1.Yaml Ansible Playbook con Nano Text Editor, come segue:
$ nano playbooks/copy_file_template1.YamlQuindi, aggiungi le seguenti righe in copy_file_template1.Yaml File di playbook:
VAR:Qui, ho aggiunto un menu Array nel copy_file_template1.Yaml playbook. Successivamente, stamperò gli elementi dell'array usando un ciclo nel mio indice.Jinja2 File modello Jinja2.
Finalmente il copy_file_template1.Yaml Il file Playbook dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Ora, apri il indice.Jinja2 Modello Jinja2 con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2
Aggiungi le seguenti righe in indice.Jinja2 File modello:
Qui, sto generando una semplice barra di navigazione HTML usando un Jinja2 per ciclo continuo. Il loop itera attraverso il menu array (che ho definito in copy_file_template1.Yaml Playbook) elementi e genera un menù Articolo in ogni iterazione.
Finalmente il indice.Jinja2 Il file modello dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, il jinja2 per Loop ha generato una barra di navigazione HTML (in indice.html file).
Puoi anche accedere a una serie di oggetti nel tuo modello Jinja2.
Vediamo un altro esempio.
Innanzitutto, apri il copy_file_template1.Yaml Ansible Playbook con Nano Text Editor, come segue:
$ nano playbooks/copy_file_template1.YamlQuindi, aggiungi le seguenti righe in copy_file_template1.Yaml File di playbook:
VAR:Qui, ho aggiunto un menu Array di oggetti in copy_file_template1.Yaml playbook. Ognuno di questi oggetti ha due proprietà, a nome proprietà e a collegamento proprietà.
Finalmente il copy_file_template1.Yaml Il file Playbook dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Apri il indice.Jinja2 Modello Jinja2 con il nano Editor di testo, come segue:
$ nano playbooks/modelli/indice.Jinja2Quindi, aggiungi le seguenti righe in indice.Jinja2 File modello:
Tutto ciò 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.
Finalmente il indice.Jinja2 Il file modello dovrebbe apparire come mostrato nello screenshot seguente.
Dopo aver modificato il file, salva il file premendo + X, seguito da Y E .
Ora, esegui il playbook copy_file_template1.Yaml come segue:
$ ansible-playbook playbooks/copy_file_template1.YamlCome puoi vedere, il jinja2 per Loop ha generato una barra di navigazione HTML (in indice.html file) da una matrice di oggetti.
Qual è il prossimo?
In questo articolo, ti ho mostrato come usare l'ansible modello modulo e descritto alcune delle basi del linguaggio del modello Jinja2. Visita il sito web ufficiale di Jinja2 per saperne di più sulla lingua di modelli di Jinja2.