Denne artikkelen vil vise deg hvordan du bruker Ansible mal Modul og noen grunnleggende om Jinja2 Templating Language. Så la oss komme i gang!
Forutsetninger
Hvis du vil prøve eksemplene i denne artikkelen:
1) Du må ha Ansible installert på datamaskinen din.
2) Du må ha minst en Ubuntu/Debian -vert eller en Centos/RHEL 8 -vert konfigurert for Ansible Automation.
Det er mange artikler om Linuxhint dedikert til å installere Ansible og konfigurere verter for Ansible Automation. Du kan også sjekke disse ut, om nødvendig.
Sette opp en Ansible Project Directory
Før vi går videre, er det en god idé å lage en prosjektkatalogstruktur, bare for å holde ting litt organisert.
For å lage en prosjektkatalog mal-demo/ Og alle nødvendige underkataloger (i din nåværende arbeidskatalog), kjør følgende kommando:
$ mkdir -pv mal -demo/playbooks/maler
Når prosjektkatalogen er opprettet, navigerer du til prosjektkatalogen, som følger:
$ cd mal-demo/
Lage en verter Lagerfil, som følger:
$ Nano -verter
Legg deretter til verts -IP -en eller DNS -navnet (VM1.Nodekite.com og VM2.Nodekite.com) I inventarfilen.
Når du er ferdig med dette trinnet, må du lagre filen ved å trykke på + X, etterfulgt av Y og .
Opprett en Ansible konfigurasjonsfil i prosjektkatalogen, som følger:
$ Nano Ansible.CFG
Skriv deretter følgende linjer i Ansible.CFG fil.
En gang er ferdig med dette trinnet, lagre filen ved å trykke på + X, etterfulgt av Y og .
På dette tidspunktet skal prosjektkatalogen se ut som følger:
$ tre
Som du kan se, er de som er tilgjengelige også tilgjengelige. Så vi kan gå videre til neste del av denne artikkelen.
$ ansible all -u ansible -m ping
Grunnleggende om Ansible Mal Module
De mal Modul av Ansible godtar de samme alternativene som kopiere Ansible modul.
Vanlig ansettelig mal Modulalternativer:
src - Stien til Jinja2 -malfilen på datamaskinen din, som vil bli analysert av Jinja2 -templeringsspråket og kopiert til fjernvertene.
DEST - Destinasjonsbanen på de eksterne vertene som filen skal kopieres.
Eieren - Eieren av filen på de eksterne vertene.
gruppe - Gruppen av filen på de eksterne vertene.
modus - Filtillatelsesmodus på de eksterne vertene.
La oss se på et eksempel.
Først må du lage en ny Ansible Playbook copy_file_template1.Yaml i Playbooks/ Katalog, som følger:
$ nano playbooks/copy_file_template1.YamlSkriv deretter følgende linjer i copy_file_template1.Yaml Playbook.
- Verter: AlleDenne spillboken vil kopiere indeks.Jinja2 fil fra spillbøker/maler/ Katalog (relativt til prosjektkatalogen) til de eksterne vertene ved hjelp av Ansible mal modul.
Når du er ferdig med dette trinnet, må du lagre filen ved å trykke på + X, etterfulgt av Y og .
Opprett indeks.Jinja2 malfil i Playbooks/maler Katalog, som følger:
$ nano playbooks/maler/indeks.Jinja2
Skriv inn følgende linjer i indeks.Jinja2 Malfil:
Dette er bare en vanlig HTML -fil. Jeg brukte ikke noe fancy jinja2 -syntaks her.
Når du er ferdig med dette trinnet, må du lagre filen ved å trykke på + X, etterfulgt av Y og .
Kjør lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlPlaybooken skal kjøre vellykket.
Som du kan se, indeks.Jinja2 Malen ble gjengitt ved hjelp av Jinja2 Templating Language. Det gjengitte innholdet skal kopieres til indeks.html Fil av de eksterne vertene.
Utskriftsvariabler i Jinja2 -mal
Du kan bruke Ansible fakta, variabler og brukerdefinerte variabler i Jinja2-malene dine.
På din Jinja2 -mal kan du skrive ut verdien til en variabel ved hjelp av variablename Syntaks. Hvis variabelen er et objekt, kan du skrive ut individuelle objektegenskaper ved å bruke ObjectVariable.eiendomsnavn Syntaks.
I eksemplet som følger, vil vi skrive ut Dato eiendom til Ansible_date_time objekt i vårt indeks.Jinja2 mal.
$ Ansible All -u Ansible -M Setup | Egrep -farger 'Dato | Tid'
Først, åpne indeks.Jinja2 Malfil med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2
Legg til følgende linje i indeks.Jinja2 Malfil:
Side generert på Ansible_Date_Time.Dato
Finalen indeks.Jinja2 Filen skal se ut som vist på skjermdumpen nedenfor.
Når du er ferdig med dette trinnet, må du lagre filen ved å trykke på + X, etterfulgt av Y og .
Kjør lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du kan se, indeks.Jinja2 Malen ble behandlet av Jinja2 -templeringsspråket og erstattet Ansible_Date_Time.Dato variabel med datoen i Yyyy-mm-dd format. Utgangen ble deretter kopiert til indeks.html fil på den eksterne verten.
Betinget hvis uttalelse i Jinja2 -mal
Jinja2 Templating Language støtter betinget hvis uttalelser. Du kan sjekke visse variabler før du skriver ut noe ved hjelp av hvis uttalelse.
Jinja2 hvis Syntaks er som følger:
% hvis tilstand %
Gjør noe hvis tilstanden er sann
% slutt om %
La oss se et eksempel på jinja2 hvis uttalelse.
I denne delen vil jeg demonstrere jinja2 hvis uttalelse ved hjelp av Ansible_distribution Fakta Variable.
$ Ansible All -u Ansible -M Setup | Egrep -farger 'Dist'
Først, åpne indeks.Jinja2 Jinja2 -mal med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2
Deretter legger du til følgende linjer i indeks.Jinja2 Malfil:
% Hvis Ansible_Distribution == "Debian" %Du kjører Debian Linux
Her har jeg sjekket om Ansible_distribution er Debian. Hvis det er det, kan du skrive ut strengen Du kjører Debian Linux
Til slutt indeks.Jinja2 Malfilen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Kjør nå lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du kan se, på min Debian eksterne vert, indeks.html filen har linjen Du kjører Debian Linux
Betinget: If-Else-uttalelse i Jinja2-mal
Jinja2 Templating Language støtter betinget If-Else uttalelser. Du kan skrive ut en ting hvis tilstanden samsvarer og skrive ut noe annet hvis den ikke bruker If-Else uttalelse.
Jinja2 If-Else Syntaks er som følger:
% hvis tilstand %La oss se et eksempel på jinja2 If-Else uttalelse.
Først, åpne indeks.Jinja2 Jinja2 -mal med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2
Deretter legger du til følgende linjer i indeks.Jinja2 Malfil:
% Hvis Ansible_Distribution == "Debian" %Du kjører Debian Linux
Du kjører ikke Debian Linux
Her har jeg sjekket om Ansible_distribution er Debian. Hvis det er det, kan du skrive ut strengen Du kjører Debian Linux Du kjører ikke Debian Linux
Til slutt indeks.Jinja2 Malfilen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Kjør lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du kan se, på min Debian eksterne vert, indeks.html filen har linjen Du kjører Debian Linux Du kjører ikke Debian Linux
Betinget: IF-Elif-uttalelse i Jinja2-mal
Jinja2 Templating Language støtter betinget if-elif uttalelser.
Jinja2 if-elif Syntaks er som følger:
% hvis tilstand1 %Her, The % annet % Seksjonen er valgfri, men den er der hvis du trenger det.
La oss se et eksempel på jinja2 if-elif uttalelse.
Først, åpne indeks.Jinja2 Jinja2 -mal med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2
Deretter legger du til følgende linjer i indeks.Jinja2 Malfil:
% Hvis Ansible_Distribution == "Debian" %Du kjører Debian Linux
Du kjører Centos Linux
Operativsystemet ditt støttes ikke
Her har jeg sjekket om Ansible_distribution er Debian. Hvis det er det, kan du skrive ut strengen Du kjører Debian Linux
Jeg har også sjekket om Ansible_distribution er Centos. Hvis det er det, kan du skrive ut strengen Du kjører Centos Linux
Ellers, skriv ut Operativsystemet ditt støttes ikke
Til slutt indeks.Jinja2 Malfilen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Kjør lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du kan se, på min Debian eksterne vert, indeks.html filen har linjen Du kjører Debian Linux
På min centos eksterne vert, indeks.html filen har linjen Du kjører Centos Linux
Hvis jeg hadde en annen ekstern vert som kjørte et OS annet enn Debian eller Centos, ville det ha linjen Operativsystemet ditt støttes ikke
Så, jinja2 if-elif Tilstanden fungerer.
Løkker i Jinja2 -mal
Du kan også skrive ut matriser og objekter ved hjelp av løkker i jinja2.
Jinja2 til Loop Syntax er som følger:
% for variablenavn i arrayName %
Gjør noe med variablenavn
% endfor %
Her, i hver iterasjon av matrisen ArrayName, Et av matriseelementene (fra begynnelsen av matrisen) er tilordnet variablename variabel. Du kan gjøre noe med denne variabelen inne i løkken.
La oss se hvordan du kan skrive ut matriseelementer i Jinja2 -malen din i følgende eksempel.
Først, åpne copy_file_template1.Yaml Ansible Playbook med Nano Text Editor, som følger:
$ nano playbooks/copy_file_template1.YamlDeretter legger du til følgende linjer i copy_file_template1.Yaml Playbook -fil:
vars:Her har jeg lagt til en menyer matrise i copy_file_template1.Yaml Playbook. Neste, jeg skriver ut matriselementene ved hjelp av en sløyfe i min indeks.Jinja2 Jinja2 malfil.
Til slutt copy_file_template1.Yaml Playbook -filen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Nå, åpne indeks.Jinja2 Jinja2 -mal med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2
Legg til følgende linjer i indeks.Jinja2 Malfil:
Her genererer jeg en enkel HTML -navigasjonslinje ved hjelp av en jinja2 til Løkke. Sløyfen itererer gjennom menyer Array (som jeg har definert i copy_file_template1.yaml playbook) elementer og genererer en Meny element i hver iterasjon.
Til slutt indeks.Jinja2 Malfilen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Kjør lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du ser, jinja2 til sløyfe genererte en HTML -navigasjonslinje (i indeks.html fil).
Du kan også få tilgang til en rekke objekter i Jinja2 -malen.
La oss se et annet eksempel.
Først, åpne copy_file_template1.Yaml Ansible Playbook med Nano Text Editor, som følger:
$ nano playbooks/copy_file_template1.YamlDeretter legger du til følgende linjer i copy_file_template1.Yaml Playbook -fil:
vars:Her har jeg lagt til en menyer objektmatrise i copy_file_template1.Yaml Playbook. Hver av disse objektene har to egenskaper, a Navn Eiendom og a lenke eiendom.
Til slutt copy_file_template1.Yaml Playbook -filen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Åpne indeks.Jinja2 Jinja2 -mal med Nano Text Editor, som følger:
$ nano playbooks/maler/indeks.Jinja2Deretter legger du til følgende linjer i indeks.Jinja2 Malfil:
Alt du ser her er det samme som i forrige eksempel. Den eneste forskjellen er at jeg skriver ut objektegenskapene Navn (ved hjelp av Meny.Navn) og lenke (ved hjelp av Meny.lenke) i min indeks.Jinja2 Jinja2 -mal.
Til slutt indeks.Jinja2 Malfilen skal se ut som vist på skjermdumpen nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på + X, etterfulgt av Y og .
Kjør nå lekeboken copy_file_template1.Yaml følgende:
$ ansible-playbook playbooks/copy_file_template1.YamlSom du ser, jinja2 til sløyfe genererte en HTML -navigasjonslinje (i indeks.html fil) fra en rekke objekter.
Hva blir det neste?
I denne artikkelen har jeg vist deg hvordan du bruker Ansible mal modul og beskrev noen av de grunnleggende i Jinja2 -templeringsspråket. Besøk det offisielle nettstedet til Jinja2 for å lære mer om Jinja2 Templating Language.