Tento článek vám ukáže, jak používat Ansible šablona modul a některé základy šablonového jazyka Jinja2. Pojďme tedy začít!
Předpoklady
Chcete-li vyzkoušet příklady v tomto článku:
1) Musíte mít ve svém počítači nainstalovanou aplikaci Ansible.
2) Musíte mít alespoň hostitele Ubuntu / Debian nebo hostitele CentOS / RHEL 8 nakonfigurovaného pro automatickou automatizaci.
Existuje mnoho článků o LinuxHint věnovaných instalaci Ansible a konfiguraci hostitelů pro automatizaci Ansible. V případě potřeby je můžete také zkontrolovat.
Nastavení možného adresáře projektu
Než se přesuneme dále, je dobré vytvořit adresářovou strukturu projektu, jen aby to bylo trochu organizované.
Chcete-li vytvořit adresář projektu demo šablony / a všechny požadované podadresáře (ve vašem aktuálním pracovním adresáři), spusťte následující příkaz:
$ mkdir -pv template-demo / playbooks / templates
Po vytvoření adresáře projektu přejděte do adresáře projektu následujícím způsobem:
$ cd template-demo /
Vytvořit hostitelé soubor inventáře takto:
$ nano hostitelé
Poté přidejte název hostitele IP nebo DNS (vm1.nodekite.com a vm2.nodekite.com) v souboru inventáře.
Po dokončení tohoto kroku uložte soubor stisknutím
V adresáři projektu vytvořte konfigurační soubor Ansible:
$ nanoodpovědný.srov
Potom zadejte následující řádky do zodpovědný.srov soubor.
Po dokončení tohoto kroku uložte soubor stisknutím
V tomto okamžiku by měl adresář projektu vypadat takto:
$ strom
Jak vidíte, hostitelé Ansible jsou také přístupní. Můžeme tedy přejít k další části tohoto článku.
$ ansible vše -u ansible -m ping
Základy možného modulu šablony
The šablona modul Ansible přijímá stejné možnosti jako kopírovat modul Ansible.
Společné možné šablona možnosti modulu:
src - Cesta k souboru šablony Jinja2 ve vašem počítači, která bude analyzována templatingovým jazykem Jinja2 a zkopírována do vzdálených hostitelů.
dest - Cílová cesta na vzdálených hostitelích, na které bude soubor zkopírován.
majitel - Vlastník souboru na vzdálených hostitelích.
skupina - Skupina souboru na vzdálených hostitelích.
režimu - Režim oprávnění k souboru na vzdálených hostitelích.
Podívejme se na příklad.
Nejprve vytvořte nový scénář hry Ansible copy_file_template1.yaml v knihy o hře / adresář takto:
$ nano playbooks / copy_file_template1.yaml
Potom zadejte následující řádky do copy_file_template1.yaml hrací kniha.
- hostitelé: všichniuživatel: odpovědný
úkoly:
- name: Kopírovat rejstřík.html soubor na server
šablona:
src: index.jinja2
dest: / home / ansible / index.html
vlastník: odpovědný
skupina: odpovědná
režim: 0644
Tato hrací kniha zkopíruje soubor index.jinja2 soubor z knihy o hře / šablony / adresář (ve vztahu k vašemu adresáři projektu) ke vzdáleným hostitelům pomocí Ansible šablona modul.
Po dokončení tohoto kroku uložte soubor stisknutím
Vytvořte index.jinja2 soubor šablony v příručky / šablony adresář takto:
$ nano playbooks / templates / index.jinja2
Do řádku zadejte následující řádky index.jinja2 soubor šablony:
Vítejte v Linuxhintu!
Toto je jen obyčejný soubor HTML. Nepoužíval jsem zde žádnou fantazijní syntaxi Jinja2.
Po dokončení tohoto kroku uložte soubor stisknutím
Spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Příručka by se měla úspěšně spustit.
Jak vidíte, index.jinja2 Šablona byla vykreslena pomocí šablonového jazyka Jinja2. Vykreslený obsah by měl být zkopírován do index.html soubor vzdálených hostitelů.
Tisk proměnných v šabloně Jinja2
Ve svých šablonách Jinja2 můžete použít Ansible fakta, proměnné a uživatelem definované proměnné.
Na své šabloně Jinja2 můžete vytisknout hodnotu proměnné pomocí variableName syntax. Pokud je proměnná objekt, můžete tisknout vlastnosti jednotlivých objektů pomocí objectVariable.název vlastnosti syntax.
V následujícím příkladu vytiskneme datum majetek ansible_date_time objekt v našem index.jinja2 šablona.
$ ansible all -u ansible -m nastavení | egrep --color 'date | time'
Nejprve otevřete index.jinja2 soubor šablony s nano textovým editorem, a to následovně:
$ nano playbooks / templates / index.jinja2
Přidejte následující řádek do index.jinja2 soubor šablony:
Stránka vygenerována ansible_date_time.datum
Finále index.jinja2 soubor by měl vypadat, jak je znázorněno na následujícím obrázku.
Po dokončení tohoto kroku uložte soubor stisknutím
Spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, index.jinja2 Šablona byla zpracována šablonovým jazykem Jinja2 a nahradila ansible_date_time.datum proměnná s datem v RRRR-MM-DD formát. Výstup byl poté zkopírován do souboru index.html soubor na vzdáleném hostiteli.
Podmíněné, pokud je prohlášení v šabloně Jinja2
Jazyk šablon Jinja2 podporuje podmíněné -li prohlášení. Můžete zkontrolovat určité proměnné před tiskem čehokoli pomocí -li prohlášení.
Jinja2 -li syntaxe je následující:
% pokud podmínka%Udělejte něco, pokud je podmínka pravdivá
% endif%
Podívejme se na příklad Jinja2 -li prohlášení.
V této části předvedu Jinja2 -li prohlášení pomocí ansible_distribution fakta proměnná.
$ ansible all -u ansible -m nastavení | egrep --color 'dist'
Nejprve otevřete index.jinja2 Šablona Jinja2 s textovým editorem nano:
$ nano playbooks / templates / index.jinja2
Dále přidejte následující řádky do index.jinja2 soubor šablony:
% if ansible_distribution == "Debian"%Používáte Debian Linux
% endif%
Zde jsem zkontroloval, zda ansible_distribution je Debian. Pokud ano, vytiskněte řetězec Používáte Debian Linux
Nakonec index.jinja2 soubor šablony by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Nyní spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, na mém vzdáleném hostiteli Debianu je index.html soubor má řádek Používáte Debian Linux
Podmíněné: Prohlášení if-else v šabloně Jinja2
Jazyk šablon Jinja2 podporuje podmíněné kdyby-jinak prohlášení. Můžete si vytisknout jednu věc, pokud se podmínka shoduje, a vytisknout něco jiného, pokud nepoužívá kdyby-jinak prohlášení.
Jinja2 kdyby-jinak syntaxe je následující:
% pokud podmínka%Udělejte něco, pokud je podmínka pravdivá
% else%
Udělejte něco, pokud je podmínka nepravdivá
% endif%
Podívejme se na příklad Jinja2 kdyby-jinak prohlášení.
Nejprve otevřete index.jinja2 Šablona Jinja2 s textovým editorem nano:
$ nano playbooks / templates / index.jinja2
Dále přidejte následující řádky do index.jinja2 soubor šablony:
% if ansible_distribution == "Debian"%Používáte Debian Linux
% else%
Nepoužíváte Debian Linux
% endif%
Zde jsem zkontroloval, zda ansible_distribution je Debian. Pokud ano, vytiskněte řetězec Používáte Debian Linux Nepoužíváte Debian Linux
Nakonec index.jinja2 soubor šablony by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, na mém vzdáleném hostiteli Debianu je index.html soubor má řádek Používáte Debian Linux Nepoužíváte Debian Linux
Podmíněné: Prohlášení if-elif v šabloně Jinja2
Jazyk šablon Jinja2 podporuje podmíněné if-elif prohlášení.
Jinja2 if-elif syntaxe je následující:
% pokud podmínka1%Udělejte něco, pokud je podmínka1 pravdivá
% elif podmínka2%
Udělejte něco, pokud je podmínka2 pravdivá
% elif podmínka3%
Udělejte něco, pokud je podmínka3 pravdivá
…
% elif podmínkaN%
Udělejte něco, pokud je podmínka N pravdivá
% else%
Udělejte něco, pokud není splněna žádná z podmínek
% endif%
Tady % else% část je volitelná, ale je zde, pokud ji potřebujete.
Podívejme se na příklad Jinja2 if-elif prohlášení.
Nejprve otevřete index.jinja2 Šablona Jinja2 s textovým editorem nano:
$ nano playbooks / templates / index.jinja2
Dále přidejte následující řádky do index.jinja2 soubor šablony:
% if ansible_distribution == "Debian"%Používáte Debian Linux
% elif ansible_distribution == "CentOS"%
Používáte CentOS Linux
% else%
Váš operační systém není podporován
% endif%
Zde jsem zkontroloval, zda ansible_distribution je Debian. Pokud ano, vytiskněte řetězec Používáte Debian Linux
Také jsem zkontroloval, zda ansible_distribution je CentOS. Pokud ano, vytiskněte řetězec Používáte CentOS Linux
Jinak tiskněte Váš operační systém není podporován
Nakonec index.jinja2 soubor šablony by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, na mém vzdáleném hostiteli Debianu je index.html soubor má řádek Používáte Debian Linux
Na mém vzdáleném hostiteli CentOS je index.html soubor má řádek Používáte CentOS Linux
Pokud bych měl jiného vzdáleného hostitele s jiným operačním systémem než Debian nebo CentOS, měl by linku Váš operační systém není podporován
Jinja2 if-elif stav funguje.
Smyčky v šabloně Jinja2
Pole a objekty můžete také tisknout pomocí smyček v Jinja2.
Jinja2 pro syntaxe smyčky je následující:
Udělejte něco s variableName
% endfor%
Tady, v každé iteraci pole arrayName, jeden z prvků pole (počínaje začátkem pole) je přiřazen k název proměnné proměnná. S touto proměnnou můžete ve smyčce něco udělat.
V následujícím příkladu si ukážeme, jak můžete vytisknout prvky pole ve své šabloně Jinja2.
Nejprve otevřete copy_file_template1.yaml Možná hrací kniha s nano textovým editorem:
$ nano playbooks / copy_file_template1.yaml
Dále přidejte následující řádky do copy_file_template1.yaml soubor příručky:
vars:nabídky:
- Domov
- produkty
- O nás
- Kontaktujte nás
Tady jsem přidal a nabídky pole v copy_file_template1.yaml hrací kniha. Dále vytisknu prvky pole pomocí smyčky v mém index.jinja2 Soubor šablony Jinja2.
Nakonec copy_file_template1.yaml soubor playbook by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Nyní otevřete index.jinja2 Šablona Jinja2 s textovým editorem nano:
$ nano playbooks / templates / index.jinja2
Přidejte následující řádky do index.jinja2 soubor šablony:
Tady generuji jednoduchou navigační lištu HTML pomocí Jinja2 pro smyčka. Smyčka iteruje skrz nabídky pole (které jsem definoval v copy_file_template1.yaml playbook) prvky a generuje a Jídelní lístek položka v každé iteraci.
Nakonec index.jinja2 soubor šablony by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, Jinja2 pro smyčka vygenerovala navigační lištu HTML (v index.html soubor).
Ve své šabloně Jinja2 můžete také přistupovat k řadě objektů.
Uvidíme další příklad.
Nejprve otevřete copy_file_template1.yaml Možná hrací kniha s nano textovým editorem:
$ nano playbooks / copy_file_template1.yaml
Dále přidejte následující řádky do copy_file_template1.yaml soubor příručky:
vars:nabídky:
- jméno: Home
odkaz: / home
- název: Výrobky
odkaz: / produkty
- jméno: O nás
odkaz: / about-us
- jméno: Kontaktujte nás
link: / contact-us
Tady jsem přidal a nabídky pole objektu v copy_file_template1.yaml hrací kniha. Každý z těchto objektů má dvě vlastnosti, a název majetek a odkaz vlastnictví.
Nakonec copy_file_template1.yaml soubor playbook by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Otevři index.jinja2 Šablona Jinja2 s textovým editorem nano:
$ nano playbooks / templates / index.jinja2
Dále přidejte následující řádky do index.jinja2 soubor šablony:
Všechno, co zde vidíte, je stejné jako v předchozím příkladu. Jediný rozdíl je v tom, že tisknu vlastnosti objektu název (použitím Jídelní lístek.název) a odkaz (použitím Jídelní lístek.odkaz) v mém index.jinja2 Jinja2 šablona.
Nakonec index.jinja2 soubor šablony by měl vypadat, jak je znázorněno na následujícím obrázku.
Jakmile soubor upravíte, uložte jej stisknutím
Nyní spusťte příručku copy_file_template1.yaml jak následuje:
$ ansible-playbook playbooks / copy_file_template1.yaml
Jak vidíte, Jinja2 pro smyčka vygenerovala navigační lištu HTML (v index.html soubor) z řady objektů.
Co bude dál?
V tomto článku jsem vám ukázal, jak používat Ansible šablona modul a popsal některé základní základy šablonového jazyka Jinja2. Navštivte oficiální webové stránky Jinja2 a dozvíte se více o šablonovém jazyce Jinja2.