GNU/Linux >> Znalost Linux >  >> Linux

Jak používat šablonu Jinja2 v Ansible Playbook

Jinja2 je výkonný a snadno použitelný šablonovací engine založený na pythonu, který se hodí v IT prostředí s více servery, kde se konfigurace pokaždé liší. Vytváření statických konfiguračních souborů pro každý z těchto uzlů je únavné a nemusí být schůdnou možností, protože spotřebuje více času a energie. A zde přichází na řadu šablonování.

Šablony Jinja2 jsou jednoduché soubory šablon, které ukládají proměnné, které se mohou čas od času měnit. Při spuštění Playbooks jsou tyto proměnné nahrazeny skutečnými hodnotami definovanými v Ansible Playbooks. Tímto způsobem nabízí šablonování efektivní a flexibilní řešení pro snadné vytvoření nebo změnu konfiguračního souboru.

V této příručce se zaměříme na to, jak můžete konfigurovat a používat šablonu Jinja2 v Ansible playbooku.

Architektura šablony

Soubor šablony Jinja2 je textový soubor, který obsahuje proměnné, které jsou vyhodnoceny a nahrazeny skutečnými hodnotami při spuštění nebo spuštění kódu. V souboru šablony Jinja2 najdete následující značky:

  • {{ }} :Tyto dvojité složené závorky jsou široce používané značky v souboru šablony a používají se pro vkládání proměnných a nakonec tisk jejich hodnoty během provádění kódu. Například jednoduchá syntaxe využívající dvojité složené závorky je následující:{{ webový server }} běží na  {{ nginx-version }}
  • {%  %} :Většinou se používají pro řídicí příkazy, jako jsou cykly a příkazy if-else.
  • {#  #} :Označují komentáře, které popisují úkol.

Ve většině případů se soubory šablon Jinja2 používají k vytváření souborů nebo nahrazování konfiguračních souborů na serverech. Kromě toho můžete provádět podmíněné příkazy, jako jsou cykly a pokud je to jinak a transformovat data pomocí filtrů a mnohem více.

Soubory šablon nesou .j2 rozšíření, což znamená, že se používá šablona Jinja2.

Vytváření souborů šablon

Zde je příklad souboru šablony Jinja2 example_template.j2, který použijeme k vytvoření nového souboru se zobrazenými proměnnými

Hey guys!
Apache webserver {{ version_number }} is running on {{ server }}
Enjoy!

Zde jsou proměnné {{ číslo_verze }} &{{ server }

Tyto proměnné jsou definovány v playbooku a budou nahrazeny skutečnými hodnotami v playbooku YAML souboru example1.yml níže.

Po spuštění playbooku se proměnné v souboru šablony nahradí skutečnými hodnotami a buď se vytvoří nový soubor, nebo nahradí již existující soubor.txt v cílové cestě.

Při spuštění playbooku si prohlédněte cíl a všimněte si, že proměnné byly nahrazeny hodnotami definovanými v souboru Ansible playbook.

Abyste získali lepší představu o tom, jak můžete odeslat konfigurační soubory, vytvoříme šablonu Jinja2, která vytvoří index.html soubor v kořenovém adresáři webu nebo v adresáři dokumentů /var/www/html na serveru CentOS 7. Apache již běží a zobrazuje výchozí uvítací stránku, jak je znázorněno,

Soubor šablony index.html.j2 se zobrazí, jak je znázorněno. Všimněte si přítomnosti ansible_hostname proměnná, což je vestavěná proměnná. Po spuštění playbooku bude toto nahrazeno názvem hostitele webového serveru.

<html>
    <center><h1> The Apache webserver is running on {{ ansible_hostname }} </h1>
    </center>
</html>

Soubor playbooku je zobrazen níže.

Po spuštění playbooku se vytvoří nový soubor index.html a jak můžete vidět, proměnná ansible_hostname byla nahrazena skutečným názvem hostitele serveru, v tomto případě Centos-7.

Šablona Jinja2 s podmíněnými podmínkami

Šablony Jinja2 lze také použít s podmíněnými příkazy, jako jsou cykly for k iteraci seznamu položek. Zvažte Playbook example2.yml, jak je znázorněno na obrázku níže:Vytvoříme šablonu, která bude iterovat přes seznam modelů aut s názvem ‚cars‘ a vytiskne výsledek do cílového souboru file2.txt.

Smyčka for v souboru šablony Jinja2 – example2_template.j2 – je zobrazeno

Když je playbook spuštěn, smyčka iteruje přes seznam aut a vytiskne modely aut v cílovém souboru. Pomocí příkazu cat můžete prozkoumat výstup a ověřit, kde v souboru existují modely.

Šablona Jinja2 s filtry

Filtry se používají ke změně vzhledu výstupních nebo formátovacích dat. Funguje to tak, že název proměnné je vložen do potrubí, jak je znázorněno:

{{ proměnná | argument }}

Pojďme se podívat na několik případů použití:

a) Transformujte řetězce do formátu velkých nebo malých písmen

Chcete-li například pomocí šablony vytisknout hodnoty v předchozím seznamu velkými písmeny, vložte proměnnou položku do argumentu „UPPER“, jak je znázorněno:{{ item | horní }}

Po spuštění playbooku se hodnoty převedou na velká písmena

Pokud jsou hodnoty od začátku psány malými písmeny, použijte argument „nižší“.

{{ položka | nižší }}

b) Použijte filtry seznamu k zobrazení maximálních a minimálních hodnot

Pokud pracujete s poli nebo seznamy uvnitř šablony, jak je znázorněno, můžete se rozhodnout vytisknout preferované hodnoty na základě určitých kritérií.

Chcete-li například vytisknout minimální hodnotu v seznamu, předejte celý seznam „min ’ filtrovat podle obrázku.

{{ [ 100, 37, 45, 65, 60, 78 ] | min }     =>   37

Chcete-li získat maximální hodnotu, použijte filtr  ‚max‘ .

{{ [ 100, 37, 45, 65, 60, 78 ] | max }     =>   100

Jedinečné hodnoty můžete získat ze seznamu duplicitních hodnot v poli pomocí jedinečného filtru, jak je uvedeno:

{{ [ 3, 4, 3, 3, 4, 2, 2 ] | jedinečný }}     =>   3,4,2

c) Nahrazení řetězcové hodnoty jinou

Kromě toho můžete nahradit řetězec novým pomocí argumentu nahradit, jak je znázorněno

{{ ”Ahoj kluci” | nahradit (“kluci”, “svět”) }} => Ahoj světe

Ve výše uvedeném příkladu budou string guys nahrazeny slovem world a nyní bude příkaz znít:

Ahoj světe

Toto je jen několik filtrů. Existuje spousta vestavěných filtrů, které můžete použít k manipulaci s výstupem spuštění Ansible Playbook.

Šablona Jinja2 je ideálním řešením při práci s dynamickými proměnnými v konfiguračních souborech. Je to mnohem efektivnější možnost než ruční změna hodnot, která často zabere spoustu času a může být docela únavná. Vaše zpětná vazba k tomuto článku je velmi vítána.

Přečtěte si také :Jak nahradit řetězce a řádky pomocí Ansible

Přečtěte si také :  Jak vytvořit Ansible role a používat je v Příručce


Linux
  1. Jak předat další proměnné do příručky Ansible

  2. Jak používat typ souboru ve Vimu?

  3. Jak použít chmod ke změně oprávnění k souboru?

  1. Jak vytvořit soubor v Ansible

  2. Jak používat značky v Ansible Playbook (příklady)

  3. Jak vytvořit Ansible Playbook

  1. Jak stáhnout a používat role Ansible Galaxy v Ansible Playbook

  2. Jak používat Ansible Vault k zabezpečení citlivých dat

  3. Jak používat proměnné v Ansible Playbook