Ez a cikk bemutatja az Ansible használatát sablon modul és a Jinja2 sablonnyelv néhány alapja. Tehát kezdjük!
Előfeltételek
Ha szeretné kipróbálni a cikk példáit:
1) A számítógépére telepítve kell lennie az Ansible programnak.
2) Legalább Ubuntu / Debian vagy CentOS / RHEL 8 gazdagéppel kell rendelkeznie az Ansible automatizáláshoz.
A LinuxHint-en számos cikk foglalkozik az Ansible telepítésével és a gazdagépek konfigurálásával az Ansible automatizáláshoz. Szükség esetén ezeket is megnézheti.
Ansible Project Directory beállítása
Mielőtt továbblépnénk, célszerű létrehozni egy projekt könyvtárstruktúrát, csak azért, hogy a dolgokat egy kicsit rendben tartsuk.
Projekt könyvtár létrehozása template-demo / és az összes szükséges alkönyvtárat (az aktuális munkakönyvtárban), futtassa a következő parancsot:
$ mkdir -pv template-demo / playbooks / templates
A projektkönyvtár létrehozása után lépjen a projektkönyvtárba az alábbiak szerint:
$ cd template-demo /
Hozzon létre egy otthont ad leltárállomány, az alábbiak szerint:
$ nano házigazdák
Ezután adja hozzá a gazdagép IP vagy DNS nevét (vm1.nodekite.com és vm2.nodekite.com) a leltárállományban.
Miután befejezte ezt a lépést, mentse el a fájlt a megnyomásával
Hozzon létre egy Ansible konfigurációs fájlt a projektkönyvtárban, az alábbiak szerint:
$ nano ansible.vö
Ezután írja be a következő sorokat a lehetséges.vö fájl.
Miután befejezte ezt a lépést, a gomb megnyomásával mentse el a fájlt
Ezen a ponton a projektkönyvtárnak a következőképpen kell kinéznie:
$ fa
Amint láthatja, az Ansible hosztok is elérhetők. Tehát folytathatjuk a cikk következő szakaszát.
$ ansible all -u ansible -m ping
Egy lehetséges sablon modul alapjai
A sablon Az Ansible modul ugyanazokat az opciókat fogadja el, mint az másolat modulja az Ansible.
Közös Ansible sablon modul opciók:
src - A számítógépen található Jinja2 sablonfájl útvonala, amelyet a Jinja2 sablonnyelv elemez és átmásol a távoli gazdagépekre.
rend - A távoli állomáson a cél elérési útja, ahová a fájlt átmásolja.
tulajdonos - A fájl tulajdonosa a távoli gazdagépeken.
csoport - A fájl csoportja a távoli gazdagépeken.
mód - A fájlengedélyezési mód a távoli gazdagépeken.
Nézzünk meg egy példát.
Először hozzon létre egy új Ansible játékkönyvet copy_file_template1.yaml ban,-ben játékkönyvek / könyvtárat, az alábbiak szerint:
$ nano playbooks / copy_file_template1.yaml
Ezután írja be a következő sorokat a copy_file_template1.yaml játékkönyv.
- házigazdák: mindfelhasználó: ansible
feladatok:
- név: Index másolása.html fájl a szerverre
sablon:
src: index.jinja2
dest: / home / ansible / index.html
tulajdonos: ansible
csoport: lehetséges
mód: 0644
Ez a játékkönyv másolja a index.jinja2 fájl a játékkönyvek / sablonok / könyvtárat (a projekt könyvtárához képest) a távoli gazdagépekre az Ansible segítségével sablon modul.
Miután végzett ezzel a lépéssel, a gomb megnyomásával mentse el a fájlt
Hozza létre a index.jinja2 sablonfájl a játékkönyvek / sablonok könyvtárat, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Írja be a következő sorokat a index.jinja2 sablon fájl:
Üdvözli a Linuxhint!
Ez csak egy sima HTML fájl. Nem használtam itt semmiféle Jinja2 szintaxist.
Miután végzett ezzel a lépéssel, a gomb megnyomásával mentse el a fájlt
Futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
A játékkönyvnek sikeresen futnia kell.
Mint láthatja, a index.jinja2 a sablont a Jinja2 sablonnyelv használatával renderelték. A renderelt tartalmat át kell másolni a index.html a távoli gazdagépek fájlja.
Változók nyomtatása Jinja2 sablonban
A Jinja2 sablonokban használhat Ansible tényeket, változókat és felhasználó által definiált változókat.
A Jinja2 sablonján kinyomtathatja egy változó értékét a változóNév szintaxis. Ha a változó objektum, akkor az objektum egyes tulajdonságait kinyomtathatja objectVariable.ingatlan neve szintaxis.
Az alábbi példában kinyomtatjuk a dátum tulajdona ansible_date_time tárgy a mi index.jinja2 sablon.
$ ansible all -u ansible -m beállítás | egrep - 'date | time' szín
Először nyissa meg a index.jinja2 sablonfájl a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Adja hozzá a következő sort a index.jinja2 sablon fájl:
Az oldal létrehozásának dátuma: ansible_date_time.dátum
A végső index.jinja2 a fájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután befejezte ezt a lépést, mentse el a fájlt a megnyomásával
Futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Mint láthatja, a index.jinja2 sablont a Jinja2 sablonnyelv dolgozta fel, és felváltotta a ansible_date_time.dátum változó a dátummal ÉÉÉÉ-HH-NN formátum. A kimenetet ezután átmásolta a index.html fájl a távoli gazdagépen.
Feltételes, ha nyilatkozat a Jinja2 sablonban
A Jinja2 sablonnyelv támogatja a feltételeset ha nyilatkozatok. A. Használatával ellenőrizhet bizonyos változásokat, mielőtt bármit kinyomtatna ha nyilatkozat.
A Jinja2 ha a szintaxis a következő:
%, ha a feltétel%Tegyen valamit, ha a feltétel igaz
% endif%
Lássunk egy példát a Jinja2-re ha nyilatkozat.
Ebben a részben bemutatom a Jinja2-t ha utasítás a ansible_distribution tények változó.
$ ansible all -u ansible -m beállítás | egrep --color 'dist'
Először nyissa meg a index.jinja2 Jinja2 sablon a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Ezután adja hozzá a következő sorokat a index.jinja2 sablon fájl:
% if ansible_distribution == "Debian"%A Debian Linuxot futtatja
% endif%
Itt ellenőriztem ansible_distribution van Debian. Ha igen, akkor nyomtassa ki a karakterláncot A Debian Linuxot futtatja
Végül a index.jinja2 a sablonfájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Most futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Amint láthatja, a Debian távoli gazdagépemen a index.html fájlban van a sor A Debian Linuxot futtatja
Feltételes: if-else nyilatkozat a Jinja2 sablonban
A Jinja2 sablonnyelv támogatja a feltételeset ha más nyilatkozatok. Kinyomtathat egy dolgot, ha a feltétel megegyezik, és mást nyomtathat, ha nem használja a ha más nyilatkozat.
A Jinja2 ha más a szintaxis a következő:
%, ha a feltétel%Tegyen valamit, ha a feltétel igaz
% más %
Tegyen valamit, ha a feltétel hamis
% endif%
Lássunk egy példát a Jinja2-re ha más nyilatkozat.
Először nyissa meg a index.jinja2 Jinja2 sablon a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Ezután adja hozzá a következő sorokat a index.jinja2 sablon fájl:
% if ansible_distribution == "Debian"%A Debian Linuxot futtatja
% más %
Nem fut a Debian Linux
% endif%
Itt ellenőriztem ansible_distribution van Debian. Ha igen, akkor nyomtassa ki a karakterláncot A Debian Linuxot futtatja Nem fut a Debian Linux
Végül a index.jinja2 a sablonfájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Amint láthatja, a Debian távoli gazdagépemen a index.html fájlban van a sor A Debian Linuxot futtatja Nem fut a Debian Linux
Feltételes: if-elif nyilatkozat a Jinja2 sablonban
A Jinja2 sablonnyelv támogatja a feltételeset if-elif nyilatkozatok.
A Jinja2 if-elif a szintaxis a következő:
%, ha feltétel1%Tegyen valamit, ha a feltétel1 igaz
% elif feltétel2%
Tegyen valamit, ha a feltétel2 igaz
% elif feltétel3%
Tegyen valamit, ha a feltétel3 igaz
…
% elif feltételN%
Tegyen valamit, ha a feltétel N igaz
% más %
Tegyen valamit, ha egyik feltétel sem teljesül
% endif%
Itt a % más % szakasz nem kötelező, de ott van, ha szüksége van rá.
Lássunk egy példát a Jinja2-re if-elif nyilatkozat.
Először nyissa meg a index.jinja2 Jinja2 sablon a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Ezután adja hozzá a következő sorokat a index.jinja2 sablon fájl:
% if ansible_distribution == "Debian"%A Debian Linuxot futtatja
% elif ansible_distribution == "CentOS"%
A CentOS Linuxot futtatja
% más %
Az operációs rendszer nem támogatott
% endif%
Itt ellenőriztem ansible_distribution van Debian. Ha igen, akkor nyomtassa ki a karakterláncot A Debian Linuxot futtatja
Azt is megnéztem, hogy ansible_distribution van CentOS. Ha igen, akkor nyomtassa ki a karakterláncot A CentOS Linuxot futtatja
Ellenkező esetben nyomtasson Az operációs rendszer nem támogatott
Végül a index.jinja2 a sablonfájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Amint láthatja, a Debian távoli gazdagépemen a index.html fájlban van a sor A Debian Linuxot futtatja
A CentOS távoli gazdagépemen az index.html fájlban van a sor A CentOS Linuxot futtatja
Ha lenne egy másik távoli gazdagépem, amely a Debianon vagy a CentOS-tól eltérő operációs rendszert futtatna, akkor megvan a sor Az operációs rendszer nem támogatott
Tehát, a Jinja2 if-elif állapot működik.
Hurkok a Jinja2 sablonban
A tömböket és az objektumokat a Jinja2 hurkok segítségével is kinyomtathatja.
A Jinja2 mert hurok szintaxisa a következő:
Csináljon valamit a változónévvel
% endfor%
Itt, a tömb minden egyes iterációjában arrayName, az egyik tömb elem (a tömb elejétől kezdve) az változóNév változó. Ezzel a változóval a hurok belsejében tehet valamit.
Nézzük meg, hogyan nyomtathat tömb elemeket a Jinja2 sablonba a következő példában.
Először nyissa meg a copy_file_template1.yaml Lehetséges játékkönyv a nano szövegszerkesztővel, az alábbiak szerint:
$ nano playbooks / copy_file_template1.yaml
Ezután adja hozzá a következő sorokat a copy_file_template1.yaml playbook fájl:
változatok:menük:
- itthon
- Termékek
- Rólunk
- Lépjen kapcsolatba velünk
Itt adtam hozzá a menük tömb a copy_file_template1.yaml játékkönyv. Ezután kinyomtatom a tömb elemeket egy hurok használatával index.jinja2 Jinja2 sablonfájl.
Végül a copy_file_template1.yaml a playbook fájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Nyissa meg a index.jinja2 Jinja2 sablon a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Adja hozzá a következő sorokat a index.jinja2 sablon fájl:
Itt létrehozok egy egyszerű HTML navigációs sávot egy Jinja2 segítségével mert hurok. A hurok a menük tömb (amelyet a copy_file_template1 fájlban definiáltam.yaml playbook) elemeket és generál a menü elem minden iterációban.
Végül a index.jinja2 a sablonfájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Mint látható, a Jinja2 mert ciklus létrehozott egy HTML navigációs sávot (a index.html fájl).
A Jinja2 sablonban objektumok tömbjéhez is hozzáférhet.
Lássunk egy másik példát.
Először nyissa meg a copy_file_template1.yaml Lehetséges játékkönyv a nano szövegszerkesztővel, az alábbiak szerint:
$ nano playbooks / copy_file_template1.yaml
Ezután adja hozzá a következő sorokat a copy_file_template1.yaml playbook fájl:
változatok:menük:
- név: Otthon
link: / home
- név: Termékek
link: / termékek
- név: Rólunk
link: / rólunk
- név: Lépjen kapcsolatba velünk
link: / contact-us
Itt adtam hozzá a menük objektumtömb a copy_file_template1.yaml játékkönyv. Ezen objektumok mindegyikének két tulajdonsága van, a név ingatlan és a link ingatlan.
Végül a copy_file_template1.yaml a playbook fájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Nyissa meg a index.jinja2 Jinja2 sablon a nano szövegszerkesztővel, az alábbiak szerint:
$ nano játékkönyvek / sablonok / index.jinja2
Ezután adja hozzá a következő sorokat a index.jinja2 sablon fájl:
Minden, amit itt lát, ugyanaz, mint az előző példában. Az egyetlen különbség az, hogy az objektum tulajdonságait nyomtatom név (használatával menü.név) és link (használatával menü.link) az én index.jinja2 Jinja2 sablon.
Végül a index.jinja2 a sablonfájlnak az alábbi képernyőképen látható módon kell kinéznie.
Miután szerkesztette a fájlt, a gomb megnyomásával mentse el a fájlt
Most futtassa a játékkönyvet copy_file_template1.yaml alábbiak szerint:
$ ansible-playbook playbooks / copy_file_template1.yaml
Mint látható, a Jinja2 mert ciklus létrehozott egy HTML navigációs sávot (a index.html fájl) objektumok tömbjéből.
Mi a következő lépés?
Ebben a cikkben megmutattam, hogyan kell használni az Ansible-t sablon modult, és ismertette a Jinja2 sablonnyelv néhány alapját. Látogasson el a Jinja2 hivatalos weboldalára, hogy többet tudjon meg a Jinja2 sablon nyelvéről.