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å
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å
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: allebruger: 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å
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:
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å
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å
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
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å
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
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 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å
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 Du kører ikke Debian Linux
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å
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
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:
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å
Å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å
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å
Å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å
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.