Hvordan bruke Ansible Mal Module

Hvordan bruke Ansible Mal Module
Ansibelen mal Modul brukes hovedsakelig til å kopiere filer fra Ansible -klienten (der Ansible er installert) til Ansible Hosts (administrert av Ansible). Fordelen med å bruke mal modul, i stedet for kopiere modul, er at den erbar mal Modul kan bruke Jinja2 -templeringsspråket. Jinja2 er et kraftig Python -templeringsspråk som du kan generere konfigurasjonsfiler, websider osv. Du kan også bruke Ansible Facts -variabler, løkker og forhold i Jinja2 -malene dine.

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.Yaml

Skriv deretter følgende linjer i copy_file_template1.Yaml Playbook.

- Verter: Alle
Bruker: Ansible
oppgaver:
- Navn: Kopierindeks.HTML -fil til serveren
mal:
SRC: Indeks.Jinja2
Dest:/Home/Ansible/Index.html
Eier: Ansible
Gruppe: Ansible
Mode: 0644

Denne 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:




Jinja2 maldemo


Velkommen til Linuxhint!



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.Yaml

Playbooken 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.Yaml

Som 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


% slutt om %

Her har jeg sjekket om Ansible_distribution er Debian. Hvis det er det, kan du skrive ut strengen

Du kjører Debian Linux

. Ellers, ikke skriv den ut.

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.Yaml

Som du kan se, på min Debian eksterne vert, indeks.html filen har linjen

Du kjører Debian Linux

. Imidlertid, på min centos eksterne vert, er linjen ikke til stede. Så, jinja2 hvis Tilstanden fungerer.

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 %
Gjør noe hvis tilstanden er sann
% annet %
Gjør noe hvis tilstanden er falsk
% slutt om %

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


% annet %

Du kjører ikke Debian Linux


% slutt om %

Her har jeg sjekket om Ansible_distribution er Debian. Hvis det er det, kan du skrive ut strengen

Du kjører Debian Linux

. Ellers, skriv ut

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.Yaml

Som du kan se, på min Debian eksterne vert, indeks.html filen har linjen

Du kjører Debian Linux

. Men på min centos eksterne vert, indeks.html filen har linjen

Du kjører ikke Debian Linux

. Så, jinja2 If-Else Tilstanden fungerer.

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 %
Gjør noe hvis tilstanden1 er sann
% elif tilstand2 %
Gjør noe hvis tilstanden2 er sann
% elif tilstand3 %
Gjør noe hvis tilstanden3 er sann
..
% elif conditionn %
Gjør noe hvis tilstanden er sant
% annet %
Gjør noe hvis ingen av forholdene er sanne
% slutt om %

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


% elif ansible_distribution == "centos" %

Du kjører Centos Linux


% annet %

Operativsystemet ditt støttes ikke


% slutt om %

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.Yaml

Som 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

i indeks.html fil.

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.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 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.Yaml

Som 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.Yaml

Deretter legger du til følgende linjer i copy_file_template1.Yaml Playbook -fil:

vars:
Menyer:
- Navn: Hjem
Link: /Hjem
- Navn: Produkter
Link: /produkter
- Navn: Om oss
Link: /Om-USA
- Navn: Kontakt oss
Link: /Kontakt-amerikansk

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.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å 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.Yaml

Som 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.