Synlig

Sådan bruges Ansible Template Module

Sådan bruges Ansible Template Module
Det synlige skabelon modulet bruges hovedsageligt til at kopiere filer fra Ansible-klienten (hvor Ansible er installeret) til Ansible-værterne (administreret af Ansible). Fordelen ved at bruge skabelon modul, snarere end kopi modul, er det Ansible skabelon modulet kan bruge Jinja2-skabelonsproget. Jinja2 er et kraftfuldt Python-skabelonsprog, hvorigennem du kan generere konfigurationsfiler, websider osv. Du kan også bruge variabler, sløjfer og betingelser for Ansible fakta i dine Jinja2-skabeloner.

Denne artikel viser dig, hvordan du bruger Ansible skabelon modul og nogle grundlæggende i skabelonsproget Jinja2. Så lad os komme i gang!

Forudsætninger


Hvis du gerne vil prøve eksemplerne i denne artikel:

1) Du skal have Ansible installeret på din computer.

2) Du skal have mindst en Ubuntu / Debian-vært eller en CentOS / RHEL 8-vært konfigureret til Ansible-automatisering.

Der er mange artikler om LinuxHint dedikeret til installation af Ansible og konfigurering af værter til Ansible-automatisering. Du kan også tjekke disse ud, hvis det er nødvendigt.

Opsætning af en anvendelig projektmappe

Før vi går videre, er det en god idé at oprette en projektmappestruktur, bare for at holde tingene lidt organiseret.

For at oprette et projektmappe skabelon-demo / og alle de krævede underkataloger (i din nuværende arbejdsmappe), kør følgende kommando:

$ mkdir -pv template-demo / playbooks / templates

Når projektmappen er oprettet, skal du navigere til projektmappen som følger:

$ cd-skabelon-demo /

Lave en værter opgørelsesfil som følger:

$ nano værter

Tilføj derefter din værts-IP- eller DNS-navn (vm1.nodekite.com og vm2.nodekite.com) i opgørelsesfilen.

Når du er færdig med dette trin, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Opret en Ansible-konfigurationsfil i projektmappen som følger:

$ nano ansible.cfg

Indtast derefter følgende linjer i ansible.cfg fil.

Når dette trin er afsluttet, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

På dette tidspunkt skal projektmappen se således ud:

$ træ

Som du kan se, er Ansible-værter også tilgængelige. Så vi kan gå videre til næste afsnit i denne artikel.

$ ansible all -u ansible -m ping

Grundlæggende om Ansible Template Module

Det skabelon modul af Ansible accepterer de samme muligheder som kopi modul af Ansible.

Almindelig synlig skabelon modulindstillinger:

src - Stien til Jinja2-skabelonfilen på din computer, som bliver analyseret af Jinja2-skabelonsproget og kopieret til fjernværterne.
dest - Destinationsstien på fjernværterne, som filen kopieres til.
ejer - Ejeren af ​​filen på fjernværterne.
gruppe - Gruppen af ​​filen på fjernværterne.
mode - Filtilladelsestilstanden på fjernværterne.

Lad os se på et eksempel.

Opret først en ny Ansible playbook kopifil_skabelon1.yaml i legebøger / katalog, som følger:

$ nano playbooks / copy_file_template1.yaml

Indtast derefter følgende linjer i kopi_fil_skabelon1.yaml playbook.

- værter: alle
bruger: ansible
opgaver:
- navn: Kopier indeks.html-fil til server
skabelon:
src: indeks.jinja2
dest: / home / ansible / index.html
ejer: ansible
gruppe: ansible
tilstand: 0644

Denne playbook kopierer indeks.jinja2 fil fra playbøger / skabeloner / katalog (i forhold til dit projektkatalog) til fjernværter ved hjælp af Ansible skabelon modul.

Når du er færdig med dette trin, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Opret indeks.jinja2 skabelonfil i playbøger / skabeloner katalog, som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Skriv følgende linjer i indeks.jinja2 skabelonfil:




Jinja2 skabelon demo


Velkommen til Linuxhint!



Dette er bare en almindelig HTML-fil. Jeg brugte ikke nogen fancy Jinja2-syntaks her.

Når du er færdig med dette trin, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør playbook kopi_fil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Playbook'en skal køre med succes.

Som du kan se, er indeks.jinja2 skabelonen blev gengivet ved hjælp af Jinja2-skabelonsproget. Det gengivne indhold skal kopieres til indeks.html fil af fjernværterne.

Udskrivning af variabler i Jinja2-skabelon

Du kan bruge Ansible fakta, variabler og brugerdefinerede variabler i dine Jinja2-skabeloner.

På din Jinja2-skabelon kan du udskrive værdien af ​​en variabel ved hjælp af variableName syntaks. Hvis variablen er et objekt, kan du udskrive individuelle objektegenskaber ved hjælp af objectVariable.ejendomsnavn syntaks.

I det følgende eksempel udskriver vi dato ejendommen til ansible_date_time objekt i vores indeks.jinja2 skabelon.

$ ansible alle -u ansible -m opsætning | egrep --farve 'dato | tid'

Først skal du åbne indeks.jinja2 skabelonfil med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Føj følgende linje til indeks.jinja2 skabelonfil:

Side genereret den ansible_date_time.dato

Finalen indeks.jinja2 filen skal se ud som vist på skærmbilledet nedenfor.

Når du er færdig med dette trin, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør playbook kopi_fil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, er indeks.jinja2 skabelonen blev behandlet af Jinja2 skabelonsproget og erstattet ansible_date_time.dato variabel med datoen i ÅÅÅÅ-MM-DD format. Outputtet blev derefter kopieret til indeks.html fil på den eksterne vært.

Betinget hvis erklæring i Jinja2-skabelon

Jinja2 skabelonsprog understøtter betinget hvis udsagn. Du kan kontrollere bestemte variabler, før du udskriver noget ved hjælp af hvis udmelding.

Jinja2 hvis syntaksen er som følger:

% hvis betingelse%
Gør noget, hvis betingelsen er sand
% Afslut Hvis %

Lad os se et eksempel på Jinja2 hvis udmelding.

I dette afsnit vil jeg demonstrere Jinja2 hvis erklæring ved hjælp af ansible_distribution fakta variabel.

$ ansible alle -u ansible -m opsætning | egrep --farve 'dist'

Først skal du åbne indeks.jinja2 Jinja2-skabelon med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Dernæst tilføj følgende linjer i indeks.jinja2 skabelonfil:

% if ansible_distribution == "Debian"%

Du kører Debian Linux


% Afslut Hvis %

Her har jeg kontrolleret, om ansible_distribution er Debian. Hvis det er tilfældet, skal du udskrive strengen

Du kører Debian Linux

. Ellers skal du ikke udskrive det.

Endelig blev indeks.jinja2 skabelonfil skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør nu playbogen kopi_fil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, på min Debian fjernhost, er indeks.html filen har linjen

Du kører Debian Linux

. Men på min CentOS-fjernhost er linjen ikke til stede. Så Jinja2 hvis tilstand fungerer.

Betinget: if-else-erklæring i Jinja2-skabelon

Jinja2 skabelonsprog understøtter betinget hvis ellers udsagn. Du kan udskrive en ting, hvis betingelsen matcher, og udskrive noget andet, hvis den ikke bruger hvis ellers udmelding.

Jinja2 hvis ellers syntaksen er som følger:

% hvis betingelse%
Gør noget, hvis betingelsen er sand
% ellers%
Gør noget, hvis betingelsen er falsk
% Afslut Hvis %

Lad os se et eksempel på Jinja2 hvis ellers udmelding.

Først skal du åbne indeks.jinja2 Jinja2-skabelon med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Dernæst tilføj følgende linjer i indeks.jinja2 skabelonfil:

% if ansible_distribution == "Debian"%

Du kører Debian Linux


% ellers%

Du kører ikke Debian Linux


% Afslut Hvis %

Her har jeg kontrolleret, om ansible_distribution er Debian. Hvis det er tilfældet, skal du udskrive strengen

Du kører Debian Linux

. Ellers skal du udskrive

Du kører ikke Debian Linux

.

Endelig blev indeks.jinja2 skabelonfil skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør playbook kopifil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, på min Debian fjernhost, er indeks.html filen har linjen

Du kører Debian Linux

. Men på min CentOS fjernhost, den indeks.html filen har linjen

Du kører ikke Debian Linux

. Så Jinja2 hvis ellers tilstand fungerer.

Betinget: if-elif-erklæring i Jinja2-skabelon

Jinja2 skabelonsprog understøtter betinget if-elif udsagn.

Jinja2 if-elif syntaksen er som følger:

% hvis betingelse1%
Gør noget, hvis betingelsen1 er sand
% elif-betingelse2%
Gør noget, hvis betingelsen 2 er sand
% elif-betingelse3%
Gør noget, hvis betingelsen 3 er sand
..
% elif-betingelseN%
Gør noget, hvis betingelsen N er sand
% ellers%
Gør noget, hvis ingen af ​​betingelserne er sande
% Afslut Hvis %

Her, den % ellers% sektion er valgfri, men den er der, hvis du har brug for det.

Lad os se et eksempel på Jinja2 if-elif udmelding.

Først skal du åbne indeks.jinja2 Jinja2-skabelon med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Dernæst tilføj følgende linjer i indeks.jinja2 skabelonfil:

% if ansible_distribution == "Debian"%

Du kører Debian Linux


% elif ansible_distribution == "CentOS"%

Du kører CentOS Linux


% ellers%

Dit operativsystem understøttes ikke


% Afslut Hvis %

Her har jeg kontrolleret, om ansible_distribution er Debian. Hvis det er tilfældet, skal du udskrive strengen

Du kører Debian Linux

.

Jeg har også kontrolleret, om ansible_distribution er CentOS. Hvis det er tilfældet, skal du udskrive strengen

Du kører CentOS Linux

.

Ellers skal du udskrive

Dit operativsystem understøttes ikke

.

Endelig blev indeks.jinja2 skabelonfil skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør playbook kopi_fil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, på min Debian fjernhost, er indeks.html filen har linjen

Du kører Debian Linux

.

På min CentOS fjernhost, indeks.html filen har linjen

Du kører CentOS Linux

.

Hvis jeg havde en anden fjernhost, der kører et andet operativsystem end Debian eller CentOS, ville det have linjen

Dit operativsystem understøttes ikke

i indeks.html fil.

Så Jinja2 if-elif tilstand fungerer.

Sløjfer i Jinja2-skabelon

Du kan også udskrive arrays og objekter ved hjælp af sløjfer i Jinja2.
Jinja2 til loop-syntaks er som følger:

% for variableName i arrayName%
Gør noget med variabelnavn
% endfor%

Her i hver iteration af arrayet arrayName, et af matrixelementerne (startende fra begyndelsen af ​​arrayet) tildeles til variabelnavn variabel. Du kan gøre noget med denne variabel inde i sløjfen.

Lad os se, hvordan du kan udskrive matrixelementer i din Jinja2-skabelon i det følgende eksempel.

Først skal du åbne kopi_fil_skabelon1.yaml Ansible playbook med nano-teksteditoren som følger:

$ nano playbooks / copy_file_template1.yaml

Dernæst tilføj følgende linjer i kopi_fil_skabelon1.yaml playbook-fil:

vars:
menuer:
- Hjem
- Produkter
- Om os
- Kontakt os

Her har jeg tilføjet en menuer array i kopi_fil_skabelon1.yaml playbook. Dernæst vil jeg udskrive arrayelementerne ved hjælp af en loop i min indeks.jinja2 Jinja2 skabelonfil.

Endelig blev kopi_fil_skabelon1.yaml playbook-filen skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Åbn nu indeks.jinja2 Jinja2-skabelon med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Tilføj følgende linjer i indeks.jinja2 skabelonfil:

Her genererer jeg en simpel HTML-navigationslinje ved hjælp af en Jinja2 til løkke. Sløjfen gentager sig gennem menuer array (som jeg har defineret i copy_file_template1.yaml playbook) elementer og genererer en menu element i hver iteration.

Endelig blev indeks.jinja2 skabelonfil skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør playbook kopifil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, Jinja2 til loop genererede en HTML-navigationslinje (i indeks.html fil).

Du kan også få adgang til en række objekter i din Jinja2-skabelon.

Lad os se et andet eksempel.

Først skal du åbne kopi_fil_skabelon1.yaml Ansible playbook med nano-teksteditoren som følger:

$ nano playbooks / copy_file_template1.yaml

Dernæst tilføj følgende linjer i kopi_fil_skabelon1.yaml playbook-fil:

vars:
menuer:
- navn: Hjem
link: / hjem
- navn: Produkter
link: / produkter
- navn: Om os
link: / om-os
- navn: Kontakt os
link: / kontakt os

Her har jeg tilføjet en menuer objekt array i kopi_fil_skabelon1.yaml playbook. Hver af disse objekter har to egenskaber, a navn ejendom og en link ejendom.

Endelig blev kopi_fil_skabelon1.yaml playbook-filen skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Åbn indeks.jinja2 Jinja2-skabelon med nano-teksteditoren som følger:

$ nano playbøger / skabeloner / indeks.jinja2

Dernæst tilføj følgende linjer i indeks.jinja2 skabelonfil:

Alt, hvad du ser her, er det samme som i det foregående eksempel. Den eneste forskel er, at jeg udskriver objektegenskaberne navn (ved brug af menu.navn) og link (ved brug af menu.link) i min indeks.jinja2 Jinja2 skabelon.

Endelig blev indeks.jinja2 skabelonfil skal se ud som vist på skærmbilledet nedenfor.

Når du har redigeret filen, skal du gemme filen ved at trykke på + x, efterfulgt af Y og .

Kør nu playbogen kopi_fil_skabelon1.yaml som følger:

$ ansible-playbook playbooks / copy_file_template1.yaml

Som du kan se, Jinja2 til loop genererede en HTML-navigationslinje (i indeks.html fil) fra en række objekter.

Hvad er det næste?

I denne artikel har jeg vist dig, hvordan du bruger Ansible skabelon modul og beskrev nogle af de grundlæggende i Jinja2-skabelonsproget. Besøg det officielle websted for Jinja2 for at lære mere om Jinja2-skabelonsproget.

Sådan registreres og streames din gaming-session på Linux
Tidligere blev spil kun betragtet som en hobby, men med tiden oplevede spilindustrien en enorm vækst med hensyn til teknologi og antallet af spillere....
Bedste spil at spille med håndsporing
Oculus Quest introducerede for nylig den gode idé om håndsporing uden controllere. Med et stadigt stigende antal spil og aktiviteter, der udfører supp...
Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...