Ansible

Hur man använder Ansible Template Module

Hur man använder Ansible Template Module
Ansible mall modulen används främst för att kopiera filer från Ansible-klienten (där Ansible är installerad) till Ansible-värdarna (hanteras av Ansible). Fördelen med att använda mall modulen snarare än kopiera modul, är det Ansible mall modulen kan använda mallens språk Jinja2. Jinja2 är ett kraftfullt Python-mallningsspråk genom vilket du kan skapa konfigurationsfiler, webbsidor osv. Du kan också använda Ansible fact-variabler, loopar och villkor i dina Jinja2-mallar.

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å + X, följd av Y och .

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å + X, följd av Y och .

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: alla
anvä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å + X, följd av Y och .

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:




Jinja2 malldemo


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å + X, följd av Y och .

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å + X, följd av Y och .

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

. Annars ska du inte skriva ut det.

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å + X, följd av Y och .

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

. Men på min CentOS-fjärrvärd är linjen inte närvarande. Så Jinja2 om fungerar.

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

. Annars kan du skriva ut

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å + X, följd av Y och .

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

. Men på min CentOS fjärrvärd, index.html filen har raden

Du kör inte Debian Linux

. Så Jinja2 om annat fungerar.

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å + X, följd av Y och .

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

i index.html fil.

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:

% för variabelnamn i arraynamn%
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å + X, följd av Y och .

Ö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å + X, följd av Y och .

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å + X, följd av Y och .

Ö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å + X, följd av Y och .

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.

Gratis och öppen källkodsmotorer för utveckling av Linux-spel
Den här artikeln kommer att täcka en lista över gratis motorer med öppen källkod som kan användas för att utveckla 2D- och 3D-spel på Linux. Det finns...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...