Ansible

Hoe Ansible-sjabloonmodule te gebruiken

Hoe Ansible-sjabloonmodule te gebruiken
De Ansible sjabloon module wordt voornamelijk gebruikt om bestanden te kopiëren van de Ansible-client (waar Ansible is geïnstalleerd) naar de Ansible-hosts (beheerd door Ansible). Het voordeel van het gebruik van de sjabloon module, in plaats van de kopiëren module, is dat de Ansible sjabloon module kan de sjabloontaal Jinja2 gebruiken. Jinja2 is een krachtige Python-sjabloontaal waarmee u configuratiebestanden, webpagina's, enz. kunt genereren. U kunt ook Ansible-feitenvariabelen, loops en voorwaarden gebruiken in uw Jinja2-sjablonen.

Dit artikel laat je zien hoe je de Ansible gebruikt sjabloon module en enkele basisprincipes van de Jinja2-sjabloontaal. Dus laten we beginnen!

Vereisten


Als je de voorbeelden in dit artikel wilt uitproberen:

1) Je moet Ansible op je computer hebben geïnstalleerd.

2) U moet ten minste een Ubuntu/Debian-host of een CentOS/RHEL 8-host hebben die is geconfigureerd voor Ansible-automatisering.

Er zijn veel artikelen over LinuxHint gewijd aan het installeren van Ansible en het configureren van hosts voor Ansible-automatisering. U kunt deze ook bekijken, indien nodig.

Een Ansible-projectdirectory instellen

Voordat we verder gaan, is het een goed idee om een ​​projectdirectorystructuur te maken, gewoon om de zaken een beetje georganiseerd te houden.

Een projectmap maken: sjabloon-demo/ en alle vereiste subdirectories (in uw huidige werkdirectory), voert u de volgende opdracht uit:

$ mkdir -pv template-demo/playbooks/templates

Nadat de projectdirectory is gemaakt, navigeert u als volgt naar de projectdirectory:

$ cd sjabloon-demo/

Maak een gastheren inventarisbestand, als volgt:

$ nano-hosts

Voeg vervolgens uw host-IP of DNS-naam toe (vm1.nodekite.com en vm2.nodekite.com) in het inventarisbestand.

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Maak als volgt een Ansible-configuratiebestand in de projectdirectory:

$ nano mogelijk.cfg

Typ vervolgens de volgende regels in de weerbaar.cfg het dossier.

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Op dit punt zou de projectdirectory er als volgt uit moeten zien:

$ boom

Zoals je kunt zien, zijn de Ansible-hosts ook toegankelijk. We kunnen dus doorgaan naar het volgende gedeelte van dit artikel.

$ ansible all -u ansible -m ping

Basisprincipes van de Ansible-sjabloonmodule

De sjabloon module van Ansible accepteert dezelfde opties als de kopiëren module van Ansible.

Gemeenschappelijke Ansible sjabloon module opties:

src - Het pad van het Jinja2-sjabloonbestand op uw computer, dat wordt geparseerd door de Jinja2-sjabloontaal en gekopieerd naar de externe hosts.
bestemming - Het bestemmingspad op de externe hosts waarnaar het bestand wordt gekopieerd.
eigenaar - De eigenaar van het bestand op de externe hosts.
groep - De groep van het bestand op de externe hosts.
modus - De bestandstoestemmingsmodus op de externe hosts.

Laten we naar een voorbeeld kijken an.

Maak eerst een nieuw Ansible-playbook copy_file_template1.yaml in de draaiboeken/ directory, als volgt:

$ nano playbooks/copy_file_template1.yaml

Typ vervolgens de volgende regels in de copy_file_template1.yaml Speelboek.

- hosts: alle
gebruiker: ansible
taken:
- naam: Index kopiëren.html-bestand naar server
sjabloon:
src: index.jinja2
bestemming: /home/ansible/index.html
eigenaar: ansible
groep: ansible
modus: 0644

Dit draaiboek kopieert de inhoudsopgave.jinja2 bestand van de draaiboeken/sjablonen/ directory (ten opzichte van uw projectdirectory) naar de externe hosts met behulp van de Ansible sjabloon module.

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Maak de inhoudsopgave.jinja2 sjabloonbestand in de draaiboeken/sjablonen directory, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Typ de volgende regels in de inhoudsopgave.jinja2 sjabloonbestand:




Jinja2-sjabloondemo


Welkom bij Linuxhint!



Dit is gewoon een gewoon HTML-bestand. Ik heb hier geen fancy Jinja2-syntaxis gebruikt.

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Het playbook zou succesvol moeten worden uitgevoerd.

Zoals je kunt zien, is de inhoudsopgave.jinja2 sjabloon is weergegeven met behulp van de sjabloontaal Jinja2. De weergegeven inhoud moet worden gekopieerd naar de inhoudsopgave.html bestand van de externe hosts.

Variabelen afdrukken in Jinja2-sjabloon

U kunt feiten, variabelen en door de gebruiker gedefinieerde variabelen van Ansible gebruiken in uw Jinja2-sjablonen.

Op uw Jinja2-sjabloon kunt u de waarde van een variabele afdrukken met de variabeleNaam syntaxis. Als de variabele een object is, kunt u afzonderlijke objecteigenschappen afdrukken met de objectVariabele.eigendomsnaam syntaxis.

In het volgende voorbeeld zullen we de . afdrukken datum eigendom van de ansible_date_time object in onze inhoudsopgave.jinja2 sjabloon.

$ ansible all -u ansible -m setup | egrep --kleur 'datum|tijd'

Open eerst de inhoudsopgave.jinja2 sjabloonbestand met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg de volgende regel toe aan de inhoudsopgave.jinja2 sjabloonbestand:

Pagina gegenereerd op ansible_date_time.datum

De laatste inhoudsopgave.jinja2 bestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals je kunt zien, is de inhoudsopgave.jinja2 sjabloon werd verwerkt door de sjabloontaal Jinja2 en verving de ansible_date_time.datum variabele met de datum in JJJJ-MM-DD formaat. De uitvoer werd vervolgens gekopieerd naar de inhoudsopgave.html bestand op de externe host.

Voorwaardelijke if-instructie in Jinja2-sjabloon

Jinja2-sjabloontaal ondersteunt voorwaardelijk als uitspraken. U kunt bepaalde variabelen controleren voordat u iets afdrukt met de als uitspraak.

De Jinja2 als syntaxis is als volgt:

% als voorwaarde %
Doe iets als de voorwaarde waar is
% stop als %

Laten we een voorbeeld zien van de Jinja2 als uitspraak.

In deze sectie zal ik de Jinja2 . demonstreren als verklaring met behulp van de ansible_distribution feiten variabel.

$ ansible all -u ansible -m setup | egrep --kleur 'dist'

Open eerst de inhoudsopgave.jinja2 Jinja2-sjabloon met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg vervolgens de volgende regels toe in de inhoudsopgave.jinja2 sjabloonbestand:

% if ansible_distribution == "Debian" %

Je gebruikt Debian Linux


% stop als %

Hier heb ik gecontroleerd of ansible_distribution is Debian. Als dat zo is, druk dan de string af

Je gebruikt Debian Linux

. Anders niet afdrukken.

eindelijk, de inhoudsopgave.jinja2 sjabloonbestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer nu het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals u kunt zien, is op mijn externe host van Debian de inhoudsopgave.html bestand heeft de regel

Je gebruikt Debian Linux

. Op mijn externe CentOS-host is de regel echter niet aanwezig. Dus de Jinja2 als conditie werkt.

Voorwaardelijk: if-else-instructie in Jinja2-sjabloon

Jinja2-sjabloontaal ondersteunt voorwaardelijk als-anders uitspraken. U kunt één ding afdrukken als de voorwaarde overeenkomt en iets anders afdrukken als het de . niet gebruikt als-anders uitspraak.

De Jinja2 als-anders syntaxis is als volgt:

% als voorwaarde %
Doe iets als de voorwaarde waar is
% anders %
Doe iets als de voorwaarde onwaar is
% stop als %

Laten we een voorbeeld zien van de Jinja2 als-anders uitspraak.

Open eerst de inhoudsopgave.jinja2 Jinja2-sjabloon met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg vervolgens de volgende regels toe in de inhoudsopgave.jinja2 sjabloonbestand:

% if ansible_distribution == "Debian" %

Je gebruikt Debian Linux


% anders %

Je gebruikt geen Debian Linux


% stop als %

Hier heb ik gecontroleerd of ansible_distribution is Debian. Als dat zo is, druk dan de string af

Je gebruikt Debian Linux

. Anders afdrukken

Je gebruikt geen Debian Linux

.

eindelijk, de inhoudsopgave.jinja2 sjabloonbestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals u kunt zien, is op mijn externe host van Debian de inhoudsopgave.html bestand heeft de regel

Je gebruikt Debian Linux

. Maar op mijn CentOS externe host, de inhoudsopgave.html bestand heeft de regel

Je gebruikt geen Debian Linux

. Dus de Jinja2 als-anders conditie werkt.

Voorwaardelijk: if-elif-instructie in Jinja2-sjabloon

Jinja2-sjabloontaal ondersteunt voorwaardelijk als-elif uitspraken.

De Jinja2 als-elif syntaxis is als volgt:

% indien voorwaarde1 %
Doe iets als de voorwaarde1 waar is
% elif conditie2 %
Doe iets als de voorwaarde2 waar is
% elif conditie3 %
Doe iets als de voorwaarde3 waar is

% elif conditieN %
Doe iets als de voorwaardeN waar is
% anders %
Doe iets als geen van de voorwaarden waar is
% stop als %

Hier de % anders % sectie is optioneel, maar het is er als je het nodig hebt.

Laten we een voorbeeld zien van de Jinja2 als-elif uitspraak.

Open eerst de inhoudsopgave.jinja2 Jinja2-sjabloon met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg vervolgens de volgende regels toe in de inhoudsopgave.jinja2 sjabloonbestand:

% if ansible_distribution == "Debian" %

Je gebruikt Debian Linux


% elif ansible_distribution == "CentOS" %

Je gebruikt CentOS Linux


% anders %

Uw besturingssysteem wordt niet ondersteund


% stop als %

Hier heb ik gecontroleerd of ansible_distribution is Debian. Als dat zo is, druk dan de string af

Je gebruikt Debian Linux

.

Ik heb ook gecontroleerd of ansible_distribution is CentOS. Als dat zo is, druk dan de string af

Je gebruikt CentOS Linux

.

Anders afdrukken

Uw besturingssysteem wordt niet ondersteund

.

eindelijk, de inhoudsopgave.jinja2 sjabloonbestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals u kunt zien, is op mijn externe host van Debian de inhoudsopgave.html bestand heeft de regel

Je gebruikt Debian Linux

.

Op mijn CentOS externe host, de inhoudsopgave.html bestand heeft de regel

Je gebruikt CentOS Linux

.

Als ik een andere externe host had met een ander besturingssysteem dan Debian of CentOS, zou deze de regel hebben:

Uw besturingssysteem wordt niet ondersteund

in de inhoudsopgave.html het dossier.

Dus de Jinja2 als-elif conditie werkt.

Lussen in Jinja2-sjabloon

U kunt ook arrays en objecten afdrukken met lussen in Jinja2.
De Jinja2 voor lussyntaxis is als volgt:

% voor variabelenaam in arraynaam %
Doe iets met variabeleNaam
% eindvoor %

Hier, in elke iteratie van de array arraynaam, een van de array-elementen (vanaf het begin van de array) wordt toegewezen aan de variabelenaam variabele. Je kunt iets doen met deze variabele in de lus.

Laten we eens kijken hoe u array-elementen in uw Jinja2-sjabloon in het volgende voorbeeld kunt afdrukken:.

Open eerst de copy_file_template1.yaml Ansible-playbook met de nano-teksteditor, als volgt:

$ nano playbooks/copy_file_template1.yaml

Voeg vervolgens de volgende regels toe in de copy_file_template1.yaml playbook-bestand:

var:
menu's:
- Huis
- Producten
- Over ons
- Neem contact op

Hier heb ik een toegevoegd menu's array in de copy_file_template1.yaml Speelboek. Vervolgens zal ik de array-elementen afdrukken met een lus in mijn inhoudsopgave.jinja2 Jinja2 sjabloonbestand.

eindelijk, de copy_file_template1.yaml playbook-bestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Open nu de inhoudsopgave.jinja2 Jinja2-sjabloon met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg de volgende regels toe in de inhoudsopgave.jinja2 sjabloonbestand:

Hier genereer ik een eenvoudige HTML-navigatiebalk met behulp van een Jinja2 voor lus. De lus itereert door de menu's array (die ik heb gedefinieerd in de copy_file_template1.yaml playbook) elementen en genereert a menu item in elke iteratie.

eindelijk, de inhoudsopgave.jinja2 sjabloonbestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals je kunt zien, is de Jinja2 voor loop genereerde een HTML-navigatiebalk (in de inhoudsopgave.html het dossier).

Je hebt ook toegang tot een reeks objecten in je Jinja2-sjabloon.

Laten we een ander voorbeeld zien.

Open eerst de copy_file_template1.yaml Ansible-playbook met de nano-teksteditor, als volgt:

$ nano playbooks/copy_file_template1.yaml

Voeg vervolgens de volgende regels toe in de copy_file_template1.yaml playbook-bestand:

var:
menu's:
- naam: Thuis
link: /home
- naam: Producten
link: /producten
- naam: Over ons
link: /over-ons
- naam: Neem contact met ons op
link: /contact-ons

Hier heb ik een toegevoegd menu's objectarray in de copy_file_template1.yaml Speelboek. Elk van deze objecten heeft twee eigenschappen, a naam eigendom en een koppeling eigendom.

eindelijk, de copy_file_template1.yaml playbook-bestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Open de inhoudsopgave.jinja2 Jinja2-sjabloon met de nano-teksteditor, als volgt:

$ nano playbooks/sjablonen/index.jinja2

Voeg vervolgens de volgende regels toe in de inhoudsopgave.jinja2 sjabloonbestand:

Alles wat je hier ziet is hetzelfde als in het vorige voorbeeld. Het enige verschil is dat ik de objecteigenschappen afdruk naam (gebruik makend van menu.naam) en koppeling (gebruik makend van menu.koppeling) in mijn inhoudsopgave.jinja2 Jinja2-sjabloon.

eindelijk, de inhoudsopgave.jinja2 sjabloonbestand zou eruit moeten zien zoals weergegeven in de onderstaande schermafbeelding.

Nadat u het bestand hebt bewerkt, slaat u het bestand op door op te drukken + X, gevolgd door Y en .

Voer nu het draaiboek uit copy_file_template1.yaml als volgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Zoals je kunt zien, is de Jinja2 voor loop genereerde een HTML-navigatiebalk (in de inhoudsopgave.html bestand) uit een reeks objecten.

Wat is het volgende?

In dit artikel heb ik je laten zien hoe je de Ansible gebruikt sjabloon module en beschreef enkele basisprincipes van de Jinja2-sjabloontaal. Bezoek de officiële website van Jinja2 voor meer informatie over de Jinja2-sjabloontaal.

Voeg muisbewegingen toe aan Windows 10 met deze gratis tools
In de afgelopen jaren zijn computers en besturingssystemen sterk geëvolueerd. Er was een tijd dat gebruikers opdrachten moesten gebruiken om door best...
Beheer en beheer muisbewegingen tussen meerdere monitoren in Windows 10
Muisbeheer voor twee schermen laat je muisbewegingen tussen meerdere monitoren controleren en configureren door de bewegingen nabij de grens te vertra...
Met WinMouse kunt u de beweging van de muisaanwijzer op Windows-pc aanpassen en verbeteren
Als u de standaardfuncties van uw muisaanwijzer wilt verbeteren, gebruik dan freeware WinMuis. Het voegt meer functies toe om u te helpen het meeste u...