Ansible

Hvordan bruke Ansible Template Module

Hvordan bruke Ansible Template Module
The Ansible mal modulen brukes hovedsakelig til å kopiere filer fra Ansible-klienten (hvor Ansible er installert) til Ansible-vertene (administrert av Ansible). Fordelen med å bruke mal modul, i stedet for kopiere modul, er det Ansible mal modulen kan bruke malingsspråket Jinja2. Jinja2 er et kraftig Python-malingsspråk der du kan generere konfigurasjonsfiler, websider osv. Du kan også bruke variabler, sløyfer og betingelser for Ansible fakta i Jinja2-malene dine.

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å + X, etterfulgt av Y og .

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å + X, etterfulgt av Y og .

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: alle
bruker: 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å + X, etterfulgt av Y og .

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:




Jinja2 maldemo


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å + X, etterfulgt av Y og .

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å + X, etterfulgt av Y og .

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

. Ellers må du ikke skrive den ut.

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å + X, etterfulgt av Y og .

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

. Imidlertid er linjen ikke til stede på min CentOS-eksterne vert. Så, Jinja2 hvis tilstanden fungerer.

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

. Ellers kan du skrive ut

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å + X, etterfulgt av Y og .

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

. Men på CentOS ekstern vert, den indeks.html filen har linjen

Du kjører ikke Debian Linux

. Så, Jinja2 hvis ikke tilstanden fungerer.

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å + X, etterfulgt av Y og .

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

i indeks.html fil.

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:

% for variableName i arrayName%
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å + X, etterfulgt av Y og .

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å + X, etterfulgt av Y og .

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å + X, etterfulgt av Y og .

Å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å + X, etterfulgt av Y og .

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.

Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...
Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...