Den här artikeln visar hur du använder Ansible mall modul och några grunder i Jinja2-mallningsspråket. Så, låt oss komma igång!
Förutsättningar
Om du vill prova exemplen i den här artikeln:
1) Du måste ha Ansible installerat på din dator.
2) Du måste ha minst en Ubuntu / Debian-värd eller en CentOS / RHEL 8-värd konfigurerad för Ansible-automatisering.
Det finns många artiklar om LinuxHint tillägnad Installera Ansible och konfigurera värdar för Ansible-automatisering. Du kan också kolla in dessa om det behövs.
Ställa in en synlig projektkatalog
Innan vi går vidare är det en bra idé att skapa en projektkatalogstruktur, bara för att hålla sakerna lite organiserade.
Att skapa en projektkatalog mall-demo / och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:
$ mkdir -pv mall-demo / playbooks / mallar
När projektkatalogen har skapats navigerar du till projektkatalogen enligt följande:
$ cd mall-demo /
Skapa en värdar inventeringsfil, enligt följande:
$ nano värdar
Lägg sedan till ditt värd-IP- eller DNS-namn (vm1.nodekite.com och vm2.nodekite.com) i inventeringsfilen.
När du är klar med detta steg sparar du filen genom att trycka på
Skapa en Ansible-konfigurationsfil i projektkatalogen enligt följande:
$ nano ansible.cfg
Skriv sedan följande rader i ansible.cfg fil.
När du har avslutat detta steg, spara filen genom att trycka på
Vid denna tidpunkt ska projektkatalogen se ut enligt följande:
$ träd
Som du kan se är Ansible-värdarna också tillgängliga. Så vi kan gå vidare till nästa avsnitt i den här artikeln.
$ ansible all -u ansible -m ping
Grunderna i Ansible Template Module
De mall Modulen i Ansible accepterar samma alternativ som kopiera modul av Ansible.
Vanligt Ansible mall modulalternativ:
src - Sökvägen till Jinja2-mallfilen på din dator, som analyseras av Jinja2-mallens språk och kopieras till fjärrvärdarna.
dest - Destinationsvägen på fjärrvärdarna till vilken filen kommer att kopieras.
ägare - Ägaren av filen på fjärrvärdarna.
grupp - Gruppen med filen på fjärrvärdarna.
läge - Filtillståndsläget på fjärrvärdarna.
Låt oss titta på ett exempel.
Skapa först en ny Ansible-spelbok copy_file_template1.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / copy_file_template1.yaml
Skriv sedan följande rader i copy_file_template1.yaml spelbok.
- värdar: allaanvändare: ansible
uppgifter:
- namn: Kopiera index.html-fil till servern
mall:
src: index.jinja2
dest: / home / ansible / index.html
ägare: ansible
grupp: ansible
läge: 0644
Denna spelbok kommer att kopiera index.jinja2 fil från spelböcker / mallar / katalog (i förhållande till din projektkatalog) till fjärrvärdarna med Ansible mall modul.
När du är klar med detta steg sparar du filen genom att trycka på
Skapa index.jinja2 mallfilen i spelböcker / mallar katalog, enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Skriv följande rader i index.jinja2 mallfil:
Välkommen till Linuxhint!
Detta är bara en vanlig HTML-fil. Jag använde ingen fin Jinja2-syntax här.
När du är klar med detta steg sparar du filen genom att trycka på
Kör spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Spelboken ska köras framgångsrikt.
Som du kan se index.jinja2 mallen återges med hjälp av mallspråket Jinja2. Det återgivna innehållet ska kopieras till index.html fjärrvärdens fil.
Utskrift av variabler i Jinja2-mall
Du kan använda Ansible fakta, variabler och användardefinierade variabler i dina Jinja2-mallar.
På din Jinja2-mall kan du skriva ut värdet på en variabel med hjälp av variabelnamn syntax. Om variabeln är ett objekt kan du skriva ut enskilda objektegenskaper med objectVariable.egendomsnamn syntax.
I exemplet som följer kommer vi att skriva ut datum egendom för ansible_date_time objekt i vårt index.jinja2 mall.
$ ansible all -u ansible -m setup | egrep --färg 'datum | tid'
Öppna först index.jinja2 mallfil med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg till följande rad i index.jinja2 mallfil:
Sidan skapades den ansible_date_time.datum
Den slutliga index.jinja2 filen ska se ut som visas på skärmdumpen nedan.
När du är klar med detta steg sparar du filen genom att trycka på
Kör spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se index.jinja2 mallen bearbetades av Jinja2-mallningsspråket och ersatte ansible_date_time.datum variabel med datumet i ÅÅÅÅ-MM-DD formatera. Utdata kopierades sedan till index.html fil på fjärrvärden.
Villkorligt om uttalande i Jinja2-mall
Jinja2-mallningsspråk stöder villkorligt om uttalanden. Du kan kontrollera vissa variabler innan du skriver ut något med om påstående.
Jinja2 om syntax är som följer:
% if villkor%Gör något om villkoret är sant
% endif%
Låt oss se ett exempel på Jinja2 om påstående.
I det här avsnittet kommer jag att demonstrera Jinja2 om uttalande med hjälp av ansible_distribution fakta variabel.
$ ansible all -u ansible -m setup | egrep --färg 'dist'
Öppna först index.jinja2 Jinja2-mall med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg sedan till följande rader i index.jinja2 mallfil:
% if ansible_distribution == "Debian"%Du kör Debian Linux
% endif%
Här har jag kollat om ansible_distribution är Debian. Om det är så skriv ut strängen Du kör Debian Linux
Slutligen, index.jinja2 mallfilen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Kör nu spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på min Debian fjärrvärd, index.html filen har raden Du kör Debian Linux
Villkorat: if-else-uttalande i Jinja2-mall
Jinja2-mallningsspråk stöder villkorligt om annat uttalanden. Du kan skriva ut en sak om villkoret matchar och skriva ut något annat om den inte använder om annat påstående.
Jinja2 om annat syntax är som följer:
% if villkor%Gör något om villkoret är sant
% else%
Gör något om villkoret är falskt
% endif%
Låt oss se ett exempel på Jinja2 om annat påstående.
Öppna först index.jinja2 Jinja2-mall med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg sedan till följande rader i index.jinja2 mallfil:
% if ansible_distribution == "Debian"%Du kör Debian Linux
% else%
Du kör inte Debian Linux
% endif%
Här har jag kollat om ansible_distribution är Debian. Om det är så skriver du ut strängen Du kör Debian Linux Du kör inte Debian Linux
Slutligen, index.jinja2 mallfilen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Kör spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på min Debian fjärrvärd, index.html filen har raden Du kör Debian Linux Du kör inte Debian Linux
Villkorat: if-elif-uttalande i Jinja2-mall
Jinja2-mallningsspråk stöder villkorligt if-elif uttalanden.
Jinja2 if-elif syntax är som följer:
% if villkor1%Gör något om villkoret 1 är sant
% elif villkor2%
Gör något om villkoret 2 är sant
% elif villkor3%
Gör något om villkoret 3 är sant
..
% elif villkorN%
Gör något om villkoret N är sant
% else%
Gör något om inget av villkoren är sant
% endif%
Här, den % else% avsnittet är valfritt, men det finns där om du behöver det.
Låt oss se ett exempel på Jinja2 if-elif påstående.
Öppna först index.jinja2 Jinja2-mall med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg sedan till följande rader i index.jinja2 mallfil:
% if ansible_distribution == "Debian"%Du kör Debian Linux
% elif ansible_distribution == "CentOS"%
Du kör CentOS Linux
% else%
Operativsystemet stöds inte
% endif%
Här har jag kollat om ansible_distribution är Debian. Om det är så skriv ut strängen Du kör Debian Linux
Jag har också kollat om ansible_distribution är CentOS. Om det är så skriver du ut strängen Du kör CentOS Linux
Annars kan du skriva ut Operativsystemet stöds inte
Slutligen, index.jinja2 mallfilen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Kör spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, på min Debian fjärrvärd, index.html filen har raden Du kör Debian Linux
På min CentOS fjärrvärd index.html filen har raden Du kör CentOS Linux
Om jag hade en annan fjärrvärd som kör ett annat operativsystem än Debian eller CentOS, skulle det ha linjen Operativsystemet stöds inte
Så Jinja2 if-elif fungerar.
Slingor i Jinja2-mall
Du kan också skriva ut matriser och objekt med hjälp av öglor i Jinja2.
Jinja2 för loop syntax är som följer:
Gör något med variabelt namn
% endfor%
Här, i varje iteration av matrisen arrayName, ett av arrayelementen (från början av arrayen) tilldelas variabelt namn variabel. Du kan göra något med denna variabel inuti slingan.
Låt oss se hur du kan skriva ut arrayelement i din Jinja2-mall i följande exempel.
Öppna först copy_file_template1.yaml Ansible playbook med nano-textredigeraren enligt följande:
$ nano playbooks / copy_file_template1.yaml
Lägg sedan till följande rader i copy_file_template1.yaml playbook-fil:
vars:menyer:
- Hem
- Produkter
- Om oss
- Kontakta oss
Här har jag lagt till en menyer array i copy_file_template1.yaml spelbok. Därefter skriver jag matriselementen med en slinga i min index.jinja2 Jinja2 mallfil.
Slutligen, copy_file_template1.yaml playbook-filen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Öppna nu index.jinja2 Jinja2-mall med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg till följande rader i index.jinja2 mallfil:
Här genererar jag ett enkelt HTML-navigeringsfält med hjälp av en Jinja2 för slinga. Slingan itererar genom menyer array (som jag har definierat i copy_file_template1.yaml playbook) element och genererar en meny objekt i varje iteration.
Slutligen, index.jinja2 mallfilen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Kör spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, Jinja2 för loop genererade ett HTML-navigeringsfält (i index.html fil).
Du kan också komma åt en rad objekt i din Jinja2-mall.
Låt oss se ett annat exempel.
Öppna först copy_file_template1.yaml Ansible playbook med nano-textredigeraren enligt följande:
$ nano playbooks / copy_file_template1.yaml
Lägg sedan till följande rader i copy_file_template1.yaml playbook-fil:
vars:menyer:
- namn: Hem
länk: / hem
- namn: Produkter
länk: / produkter
- namn: Om oss
länk: / om-oss
- namn: Kontakta oss
länk: / kontakta oss
Här har jag lagt till en menyer objektmatris i copy_file_template1.yaml spelbok. Var och en av dessa objekt har två egenskaper, a namn fastighet och en länk fast egendom.
Slutligen, copy_file_template1.yaml playbook-filen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Öppna index.jinja2 Jinja2-mall med nano-textredigeraren enligt följande:
$ nano-spelböcker / mallar / index.jinja2
Lägg sedan till följande rader i index.jinja2 mallfil:
Allt du ser här är detsamma som i föregående exempel. Den enda skillnaden är att jag skriver ut objektegenskaperna namn (använder sig av meny.namn) och länk (använder sig av meny.länk) i min index.jinja2 Jinja2-mall.
Slutligen, index.jinja2 mallfilen ska se ut som på skärmdumpen nedan.
När du har redigerat filen sparar du filen genom att trycka på
Kör nu spelboken copy_file_template1.yaml som följer:
$ ansible-playbook playbooks / copy_file_template1.yaml
Som du kan se, Jinja2 för loop genererade ett HTML-navigeringsfält (i index.html fil) från en rad objekt.
Vad kommer härnäst?
I den här artikeln har jag visat dig hur du använder Ansible mall modul och beskrev några av grunderna i Jinja2-mallningsspråket. Besök den officiella webbplatsen för Jinja2 för att lära dig mer om Jinja2-mallningsspråket.