Denne artikkelen viser deg hvordan du bruker Ansible mal modul og noen grunnleggende om malingsspråket Jinja2. 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 automatisering.
Det er mange artikler om LinuxHint dedikert til å installere Ansible og konfigurere verter for Ansible automatisering. Du kan også sjekke ut disse om nødvendig.
Sette opp en synlig prosjektkatalog
Før vi går videre, er det lurt å lage en prosjektkatalogstruktur, bare for å holde ting litt organisert.
Å 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 / spillbøker / maler
Når prosjektkatalogen er opprettet, navigerer du til prosjektkatalogen, som følger:
$ cd mal-demo /
Lage en verter inventarfil, som følger:
$ nano verter
Deretter legger du til verts-IP- eller DNS-navnet ditt (vm1.nodekite.com og vm2.nodekite.com) i beholdningsfilen.
Når du er ferdig med dette trinnet, lagrer du filen ved å trykke på
Opprett en Ansible-konfigurasjonsfil i prosjektkatalogen, som følger:
$ nano ansible.cfg
Skriv deretter inn følgende linjer i ansible.cfg fil.
Når du er ferdig med dette trinnet, lagrer du filen ved å trykke på
På dette tidspunktet skal prosjektkatalogen se slik ut:
$ treet
Som du kan se, er Ansible-vertene også tilgjengelige. Så vi kan gå videre til neste del av denne artikkelen.
$ ansible all -u ansible -m ping
Grunnleggende om Ansible Template Module
De mal modul av Ansible godtar de samme alternativene som kopiere modul av Ansible.
Vanlig Ansible mal modulalternativer:
src - Banen til Jinja2 malfilen på datamaskinen din, som blir analysert av malingsspråket Jinja2 og kopiert til eksterne verter.
dest - Destinasjonsstien på fjernkontrollen som filen skal kopieres til.
Eieren - Eieren av filen på fjernkontrollen er vert.
gruppe - Gruppen av filen på den eksterne verten.
modus - Filtillatelsesmodus på eksterne verter.
La oss se på et eksempel.
Først oppretter du en ny Ansible-spillbok copy_file_template1.yaml i lekebøker / katalog, som følger:
$ nano playbooks / copy_file_template1.yaml
Skriv deretter inn følgende linjer i copy_file_template1.yaml lekebok.
- verter: allebruker: ansible
oppgaver:
- navn: Kopier indeks.html-fil til server
mal:
src: indeks.jinja2
dest: / home / ansible / index.html
eier: ansible
gruppe: ansible
modus: 0644
Denne lekeboken kopierer indeks.jinja2 fil fra spillbøker / maler / katalog (i forhold til prosjektkatalogen) til eksterne verter ved hjelp av Ansible mal modul.
Når du er ferdig med dette trinnet, lagrer du filen ved å trykke på
Opprett indeks.jinja2 malfilen i spillbøker / maler katalog, som følger:
$ nano spillbøker / maler / indeks.jinja2
Skriv inn følgende linjer i indeks.jinja2 malfil:
Velkommen til Linuxhint!
Dette er bare en vanlig HTML-fil. Jeg brukte ingen fancy Jinja2-syntaks her.
Når du er ferdig med dette trinnet, lagrer du filen ved å trykke på
Kjør lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Spillboken skal kjøre vellykket.
Som du kan se, er indeks.jinja2 malen ble gjengitt ved hjelp av malingsspråket Jinja2. Det gjengitte innholdet skal kopieres til indeks.html filen til de eksterne vertene.
Utskrift av variabler i Jinja2-mal
Du kan bruke Ansible fakta, variabler og brukerdefinerte variabler i Jinja2-malene dine.
På Jinja2-malen 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 hjelp av objectVariable.eiendomsnavn syntaks.
I eksemplet som følger vil vi skrive ut Dato eiendommen til ansible_date_time objekt i vår indeks.jinja2 mal.
$ ansible all -u ansible -m oppsett | egrep --farge 'dato | tid'
Først åpner du indeks.jinja2 malfil med nano teksteditor, som følger:
$ nano spillbøker / maler / indeks.jinja2
Legg til følgende linje i indeks.jinja2 malfil:
Side generert ansible_date_time.Dato
Finalen indeks.jinja2 filen skal se ut som vist på skjermbildet nedenfor.
Når du er ferdig med dette trinnet, lagrer du filen ved å trykke på
Kjør lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, er indeks.jinja2 malen ble behandlet av malingsspråket Jinja2 og erstattet ansible_date_time.Dato variabel med datoen i ÅÅÅÅ-MM-DD format. Resultatet ble deretter kopiert til indeks.html filen på den eksterne verten.
Betinget hvis uttalelse i Jinja2-mal
Jinja2 malspråk støtter betinget hvis uttalelser. Du kan sjekke bestemte variabler før du skriver ut noe ved hjelp av hvis uttalelse.
Jinja2 hvis syntaksen er som følger:
% if condition%Gjør noe hvis tilstanden er oppfylt
% 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 variabel.
$ ansible all -u ansible -m oppsett | egrep --farge 'dist'
Først åpner du indeks.jinja2 Jinja2-mal med nano-teksteditoren, som følger:
$ nano spillbøker / maler / indeks.jinja2
Deretter legger du til følgende linjer i indeks.jinja2 malfil:
% if ansible_distribution == "Debian"%Du kjører Debian Linux
% slutt om %
Her har jeg sjekket om ansible_distribution er Debian. Hvis det er det, så skriv strengen ut Du kjører Debian Linux
Til slutt, indeks.jinja2 malfilen skal se ut som vist på skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Kjør nå lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på Debians eksterne vert, indeks.html filen har linjen Du kjører Debian Linux
Betinget: if-else-uttalelse i Jinja2-mal
Jinja2 malspråk støtter betinget hvis ikke uttalelser. Du kan skrive ut en ting hvis tilstanden samsvarer, og skrive ut noe annet hvis den ikke bruker hvis ikke uttalelse.
Jinja2 hvis ikke syntaksen er som følger:
% if condition%Gjør noe hvis tilstanden er oppfylt
% else%
Gjør noe hvis tilstanden er falsk
% slutt om %
La oss se et eksempel på Jinja2 hvis ikke uttalelse.
Først åpner du indeks.jinja2 Jinja2-mal med nano-teksteditoren, som følger:
$ nano spillbøker / maler / indeks.jinja2
Deretter legger du til følgende linjer i indeks.jinja2 malfil:
% if ansible_distribution == "Debian"%Du kjører Debian Linux
% else%
Du kjører ikke Debian Linux
% slutt om %
Her har jeg sjekket om ansible_distribution er Debian. Hvis det er det, så skriv strengen ut Du kjører Debian Linux Du kjører ikke Debian Linux
Til slutt, indeks.jinja2 malfilen skal se ut som vist på skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Kjør lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på Debians 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 malspråk støtter betinget if-elif uttalelser.
Jinja2 if-elif syntaksen er som følger:
% if condition1%Gjør noe hvis betingelsen1 er oppfylt
% elif condition2%
Gjør noe hvis betingelsen2 er oppfylt
% elif condition3%
Gjør noe hvis betingelsen 3 er oppfylt
..
% elif conditionN%
Gjør noe hvis tilstandenN er oppfylt
% else%
Gjør noe hvis ingen av forholdene er oppfylt
% slutt om %
Her, den % else% seksjonen er valgfri, men den er der hvis du trenger det.
La oss se et eksempel på Jinja2 if-elif uttalelse.
Først åpner du indeks.jinja2 Jinja2-mal med nano-teksteditoren, som følger:
$ nano spillbøker / maler / indeks.jinja2
Deretter legger du til følgende linjer i indeks.jinja2 malfil:
% if ansible_distribution == "Debian"%Du kjører Debian Linux
% elif ansible_distribution == "CentOS"%
Du kjører CentOS Linux
% else%
Operativsystemet støttes ikke
% slutt om %
Her har jeg sjekket om ansible_distribution er Debian. Hvis det er det, så skriv strengen ut Du kjører Debian Linux
Jeg har også sjekket om ansible_distribution er CentOS. Hvis det er det, så skriv strengen ut Du kjører CentOS Linux
Ellers kan du skrive ut Operativsystemet støttes ikke
Til slutt, indeks.jinja2 malfilen skal se ut som vist på skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Kjør lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på Debians eksterne vert, indeks.html filen har linjen Du kjører Debian Linux
På CentOS eksterne vert, den indeks.html filen har linjen Du kjører CentOS Linux
Hvis jeg hadde en annen ekstern vert som kjører et annet operativsystem enn Debian eller CentOS, ville det ha linjen Operativsystemet støttes ikke
Så, Jinja2 if-elif tilstanden fungerer.
Sløyfer i Jinja2-mal
Du kan også skrive ut matriser og objekter ved hjelp av løkker i Jinja2.
Jinja2 til sløyfesyntaks er som følger:
Gjør noe med variabelnavn
% endfor%
Her, i hver iterasjon av matrisen arrayName, et av matriseelementene (fra begynnelsen av matrisen) er tilordnet variabelnavn 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 i følgende eksempel.
Først åpner du copy_file_template1.yaml Ansible spillbok med nano-teksteditoren, som følger:
$ nano playbooks / copy_file_template1.yaml
Deretter legger du til følgende linjer i copy_file_template1.yaml playbook-fil:
vars:menyer:
- Hjem
- Produkter
- Om oss
- Kontakt oss
Her har jeg lagt til en menyer array i copy_file_template1.yaml lekebok. Deretter vil jeg skrive ut matriseelementene 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å skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Nå åpner du indeks.jinja2 Jinja2-mal med nano-teksteditoren, som følger:
$ nano spillbøker / maler / indeks.jinja2
Legg til følgende linjer i indeks.jinja2 malfil:
Her genererer jeg en enkel HTML-navigasjonsfelt ved hjelp av en Jinja2 til Løkke. Sløyfen gjentas 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å skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Kjør lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, Jinja2 til loop 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 åpner du copy_file_template1.yaml Ansikts lekebok med nano teksteditor, som følger:
$ nano playbooks / copy_file_template1.yaml
Deretter legger du til følgende linjer i copy_file_template1.yaml playbook-fil:
vars:menyer:
- navn: Hjem
lenke: / hjem
- navn: Produkter
lenke: / produkter
- navn: Om oss
lenke: / om-oss
- navn: Kontakt oss
lenke: / kontakt oss
Her har jeg lagt til en menyer objekt array i copy_file_template1.yaml lekebok. Hver av disse objektene har to egenskaper, a Navn eiendom og en lenke eiendom.
Til slutt, copy_file_template1.yaml playbook-filen skal se ut som vist på skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Åpne indeks.jinja2 Jinja2-mal med nano-teksteditoren, som følger:
$ nano spillbøker / maler / indeks.jinja2
Deretter 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å skjermbildet nedenfor.
Når du har redigert filen, lagrer du filen ved å trykke på
Kjør nå lekeboken copy_file_template1.yaml som følger:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, Jinja2 til loop 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 det grunnleggende i malingsspråket Jinja2. Besøk den offisielle nettsiden til Jinja2 for å lære mer om Jinja2 malespråk.