V minulém článku jsme diskutovali o příkazech Ansible ad hoc . Vše, co jsme se tam naučili, bude použito v tomto článku, ale jiným způsobem. Tento tutoriál vysvětluje, co je Playbook v Ansible a jak s Ansible Playbooks pracovat, s příklady.
Co je Ansible Playbook?
Příručka je YAML soubor, který se používá k provádění jedné nebo více úloh proti spravovaným hostitelům v prostředí.
Hlavní rozdíl mezi ad hoc příkazy a playbooky je v tom, že pomocí adhoc příkazů můžete vytvářet jednoduché jednoduché řádky nebo používat příkaz adhoc ve skriptech shellu ke spouštění jednoduchých úloh. Chcete-li provádět složité opakující se operace, měli byste napsat sešity a uložit je do centrálního úložiště a použít je, kdykoli to bude potřeba.
Předpokládejme, že jste součástí týmu správce systému. Kdykoli je postaven nový server, váš tým je zodpovědný za posílení serveru podle zásad vaší společnosti.
V tomto případě můžete sestavit playbook a zpevnit server. Nyní lze stejnou příručku použít proti počtu N nových hostitelů, které je třeba posílit.
Moje struktura Ansible Lab
Budu používat laboratoř ansible, která byla vytvořena se dvěma uzly Ubuntu 20.04LTS. V případě potřeby si můžete v následujícím článku zopakovat stejné nastavení laboratoře.
Vytvořte svou první Ansible Playbook
Jak jsem uvedl dříve, příručky jsou psány v YAML formát. Příručka by měla mít .yml
nebo .yaml
rozšíření. Pokud se chcete o YAML dozvědět více, podívejte se na odkaz níže.
Níže je ukázková příručka, kterou použiji k demonstraci toho, jak tato příručka funguje. Toto je jednoduchá příručka, která se postará o nastavení vlastní bannerové zprávy, když se přihlásím do uzlu.
- název:První přehrání - Upravit hostitele zpráv banneru:ubuntu2 shromáždit_fakty:false se stát:ano úkoly:- název:Odebrat oprávnění ke spuštění ze souboru /etc/update-motd.d/*:cesta:/etc/update-motd .d/ režim:u=rw,g=rw,o=rw recurse:yes - name:ADD BANNER MESSAGE copy:content:"Welcome to OSTechnix" dest:/etc/motd
Podívejme se na každou část této příručky. Příručka je rozdělena do dvou částí. První část obsahuje definice přehrávání, jako je název hry, cíloví hostitelé a eskalace oprávnění.
- jméno - Playbook by měl mít název hry, který není ničím jiným než logickým seskupením cílového hostitele, parametrů a úkolů. V playbooku můžete mít více než jednu hru. Dejte hře popisný název.
- hostitelé - Zacilte na hostitele. Ansible zkontroluje soubor inventáře a ověří, zda je hodnota uvedená v hostitelích dostupná v souboru inventáře.
- stát – Při nastavení na 'ano' spustí úlohu s oprávněním sudo. Protože upravuji oprávnění pod
/etc/
adresář, úkol by měl být odeslán se zvýšeným oprávněním.
Podívejte se na náš obsáhlý článek o eskalaci oprávnění, abyste mu porozuměli podrobně.

Ve druhé části jsou definovány úkoly. Měli byste použít klíčové slovo "úkoly" definovat úkol. Zde jsem vytvořil dva úkoly. Každý úkol by měl být pojmenován pomocí klíčového slova "name" .
- První úloha odebere oprávnění ke spuštění z
/etc/update-motd.d/*
adresář. Používám soubor modul pro toto. - Druhá úloha zapíše řetězec "Vítejte v OSTechnix" do
/etc/motd
pomocí kopie modul.

Před spuštěním příručky mi dovolte zkontrolovat stav mého cílového uzlu (managed2.anslab.com ) přihlášením do uzlu. Můžete vidět, že když se přihlásím do uzlu, zobrazí se mi výchozí bannerová zpráva a pro všechny soubory je nastaveno oprávnění ke spuštění.
$ ssh [e-mail chráněný]

Chcete-li spustit playbook, spusťte z terminálu následující příkaz.
$ ansible-playbook# SYNTAX$ ansible-playbook banner_mod.yml

Pokusme se porozumět výstupu.
1. Když spustíte playbook, první věc, kterou uvidíte, je název hry.
PLAY [Upravit zprávu banneru] *
2. Prvním možným spuštěním úlohy je "Shromažďování faktů" . Tuto úlohu jsme v naší příručce nedefinovali, ale poběží, dokud ji nevypnete.
ÚKOL [Shromažďování faktů] *
ok:[managed2]
3. Nyní se úloha, kterou jste definovali v souboru YAML jako součást hry, začne jeden po druhém provádět. Ansible bude číst playbook shora dolů, takže úkoly budou prováděny v pořadí definovaném v playbooku.
TASK [Odebrat oprávnění ke spuštění z /etc/update-motd.d/*] *********************************** ******************************************************* *********** změněno:[spravováno2]ÚKOL [PŘIDAT BANNEROVOU ZPRÁVU] ****************************** ******************************************************* *************************************************** změněno:[spravováno2 ]
4. Po dokončení všech úkolů budete mít rekapitulaci hry, která vám poskytne celkový stav různých úkolů. V našem případě běžely celkem tři úlohy (ok=3) včetně shromažďování faktů a pouze dvě úlohy (změněno=2) provedly změny ve spravovaném uzlu.
PLAY RECAP *********************************************** spravováno2 :dobře =3 změněno=2 nedostupné=0 selhalo=0 přeskočeno=0 zachráněno=0 ignorováno=0
Nyní mohu ověřit spravovaný uzel a zjistit, zda byly změny úspěšně aplikovány.

Zakázat shromažďování faktů
Jak bylo předpovězeno v předchozí části, když spustíte playbook, ansible bude shromažďovat fakta o spravovaných uzlech spuštěním modulu nastavení . Shromažďování faktů můžete zakázat přidáním následujícího řádku do příručky.
gather_facts :false

Nyní, když znovu spustíte playbook, uvidíte pouze dva úkoly, které byly definovány v playbooku. Protože Ansible je idempotentní, nebude se ansible pokoušet změnit stav objektu, pokud je již změněn. Takže výstup uvidíte jako OK .

Shromažďování faktů způsobí, že hry poběží pomalu, když musíte spustit playbook proti velkému počtu hostitelů. Je to proto, že ansible se musí spojit se spravovaným uzlem a shromáždit spoustu dat o uzlu, což není ve všech případech nutné.
Níže můžete zkontrolovat časový rozdíl s fakty a bez nich.
$ time ansible-playbook banner_mod.yml # BEZ FAKTAreal 0m1.642suser 0m0.731ssys 0m0.220s$ time ansible-playbook banner_mod.yml # S FACTSreal 0m2.547suser 0m1.107.8sys>Provést více přehrání
V playbooku můžete mít více než jednu hru. Jak můžete vidět na obrázku níže, moje druhá hra má jeden úkol, kterým je restartování
sshd
službu pomocí služby modul v jiném hostiteli.
- name:Second Play - Restartujte hostitele služby SSHD:ubuntu1 collect_facts:false se:ano úkoly:- name:Restartujte SSHD ve službě managed1.anslab.com:name:sshd state:restartedSpusťte playbook znovu a na výstupu uvidíte, že obě přehrávání byla úspěšně provedena.
$ ansible-playbook banner_mod.yml![]()
Nyní byste měli dobře rozumět tomu, jak napsat herní knihu a jak ji spustit. Playbook podporuje další užitečné funkce, které uvidíme v nadcházející sekci.
Ověřit syntaxi Playbook
Můžete použít
--syntax-check
příznak pro kontrolu případných syntaktických chyb ve vaší příručce. Záměrně jsem udělal syntaktickou chybu v "gather_facts" řádek v mém playbooku.$ ansible-playbook --syntax-check banner_mod.yml![]()
Výzva k potvrzení
Když použijete
--step
příznak, pro každý úkol ve vaší hře vás vyzve k potvrzení pokračování v úkolu.$ ansible-playbook --step banner_mod.yml![]()
Proveďte běh nasucho
Místo provádění úloh ve spravovaných uzlech můžete běh simulovat pomocí
-C
nebo--check
vlajka.$ ansible-playbook -C banner_mod.ymlZačněte od konkrétního úkolu
Máte možnost spustit playbook od konkrétní úlohy. Z obrázku níže můžete vidět, že jsem začal z Play2 (úloha1), takže obě úlohy v play1 jsou přeskočeny. Použijte příznak
--start-at-task
a předejte název úlohy jako argument.$ ansible-playbook banner_mod.yml --start-at-task "Restartujte SSHD na managed1.anslab.com"![]()
Spustit úlohu pomocí značek
Hry a úkoly můžete seskupit pomocí štítků . Pomocí značek můžete spouštět pouze úlohy s konkrétními značkami nebo úlohy přeskočit.
Můžete se podívat na níže uvedený obrázek, kde jsem použil "tagy" klíčové slovo a nastavte mu nějaké hodnoty. K jedné značce můžete také přidat více hodnot.
![]()
Můžete spustit následující příkaz a získat seznam úloh spolu s jejich značkami.
$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags![]()
Použijte
-t
flag a předat názvy značek jako argument. Můžete spustit buď konkrétní úlohu založenou na značkách, nebo více značek, jak je uvedeno níže. V níže uvedeném příkladu používám dva různé tagy ze dvou různých her.$ ansible-playbook -t "set_perm","restart service" banner_mod.yml![]()
Úlohu můžete také přeskočit a spustit všechny ostatní pomocí
--skip-tags
vlajka.$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml![]()
Zvýšení výřečnosti
Někdy se playbook nebude chovat tak, jak očekáváte. Může to být něco, co se děje na pozadí, nebo různé chyby.
Chcete-li problém odladit, můžete zvýšit upovídanost (-v) při spuštění playbooku. Existují čtyři úrovně výřečnosti. Výřečnost můžete nastavit buď v
ansible.cfg
přidáním vlastnosti "verbosity=<level
" nebo z terminálu pomocí-v
nebo proměnná prostředí ANSIBLE_VERBOSITY.$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # ÚROVNĚ NASTAVENÁ ÚROVEŇ NA 4(-vvvv)[NEBO]
$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4 (ENV VARIABLE)![]()
Řízení paralelismu
Když spustíte playbook, ansible provede úlohu v dávkách. Ve výchozím nastavení provede ansible úlohu v 5 uzlech paralelně a jakmile je úloha dokončena ve všech 5 uzlech, přesune se na další sadu 5 uzlů.
Podobně spustí úlohu v dávkách po 5, dokud nebude úloha dokončena ve všech uzlech, a poté se přesune na další úlohu a zopakuje stejný krok.
Nastavením "forks" můžete ovládat paralelismus a nastavit, kolik uzlů má být zpracováno paralelně parametr v
ansible.cfg
soubor.[výchozí]
inventář =inventář
host_key_checking =Nepravda
forks=20Nastavil jsem hodnotu forků na 20. Nyní zpracuje úlohu na 20 uzlech paralelně. Podobně můžete počet zvýšit/snížit v závislosti na vašem požadavku.
Hodnotu nastavenou v
ansible.cfg
můžete přepsat soubor předáním-f
nebo--forks
vlajka. Když spustím následující příkaz, hodnota rozvětvení 20 bude přepsána 15.$ ansible-playbook banner_mod.yml -f 15Závěr
V tomto článku jsme viděli, jak psát Ansible playbooky a různé parametry a možnosti podporované v playbookech. Existuje spousta dalších funkcí, jako jsou proměnné, podmínky, smyčky atd., které lze použít v příručkách, kterým se budeme věnovat v našich nadcházejících článcích.
Linux