Ansible je opensource nástroj pro správu a orchestraci konfigurace, který usnadňuje automatizaci úloh IT ve vícevrstvém IT prostředí. Pomocí jediného příkazu můžete konfigurovat více serverů a nasazovat aplikace, aniž byste se museli přihlašovat ke každému ze serverů a provádět konfiguraci sami. Tím Ansible zjednodušuje úkoly, které by jinak byly časově náročné a únavné.
S nárůstem počtu souborů playbooků provádějících různé automatizační úlohy se věci mohou trochu zkomplikovat. A to je místo, kde přicházejí role Ansible.
Co je to role Ansible?
Ansible role je koncept v Ansible, který se zabývá spíše myšlenkami než událostmi. Role je v podstatě úroveň abstrakce, která se používá ke zjednodušení psaní souborů playbooku. Role poskytuje kostru pro opakovaně použitelné komponenty, jako jsou proměnné, moduly, úkoly a fakta, které lze načíst do souboru Playbook.
Praktická aplikace
Abyste lépe porozuměli tomu, jak se role používají, zvažte scénář, ve kterém máte na 2 vzdálených uzlech provést 8 úkolů. Jedním přístupem by bylo definovat všechny úlohy, které mají být provedeny na vzdálených hostitelích, v jediném souboru playbooku. To je však zdlouhavé a s největší pravděpodobností to zvýší složitost playbooku. Lepším přístupem by bylo vytvořit 8 samostatných rolí, přičemž každá role bude provádět jeden úkol a později tyto role zavolat v souboru ansible-playbook.
Jednou z největších výhod používání rolí je, že každá role je na druhé nezávislá. Provedení jedné role nezávisí na provedení jiné role. Role lze také upravit a znovu použít, čímž odpadá nutnost přepisování her a úkolů v souboru Playbook.
Předpokládejme tedy, že chcete vytvořit soubor playbook pro instalaci zásobníku LAMP na server Debian. Lepší způsob, jak toho dosáhnout, je začít vytvořením 3 samostatných rolí, z nichž každá nainstaluje Apache, MariaDB a PHP na vzdáleném hostiteli. Poté napište playbook a zavolejte role v souboru playbooku. Předpokládejme, že máte druhý server Debian, na který potřebujete nainstalovat Drupal CMS. Místo opětovného přepisování rolí můžete jednoduše znovu použít 3 role, které jste vytvořili dříve, a přidat další role pro instalaci Drupalu.
Chápeš drift?
Nyní se podívejme, jak můžete vytvořit role Ansible.
Jak vytvořit Ansible role
Chcete-li vytvořit ansible role od začátku, spusťte příkaz ansible galaxy, příklad je uveden níže:
$ ansible-galaxy init název-role
Chcete-li například vytvořit roli s názvem my-role, vyvolejte příkaz.
$ ansible-galaxy init my-role
Na obrazovce výše příkaz vytvoří adresář my-role. Tento adresář role obsahuje ve výchozím nastavení následující adresáře nebo složky.
- Složka ‚defaults‘ – obsahuje výchozí proměnné, které bude role používat.
- Složka „files“ – Obsahuje soubory, které může role nasadit.
- Složka ‚handlers‘ – obsahuje ovladače, které může tato role používat.
- složka „meta“ – Obsahuje soubory, které vytvářejí závislosti rolí.
- Složka „tasks“ – Obsahuje soubor YAML, který vysvětluje úkoly pro samotnou roli. Obvykle je to soubor main.yml.
- Složka ‚templates‘ – obsahuje soubory šablon, které lze upravit a přidělit vzdálenému hostiteli, který je zřizován.
- Složka „tests“ – integruje testování se soubory Ansible playbook.
- Složka „vars“ – Obsahuje proměnné, které bude role používat. Můžete je definovat v souboru playbooku, ale doporučujeme je definovat v tomto adresáři.
Chcete-li zobrazit strukturu adresáře role, spusťte příkaz stromu následovaný názvem role.
$ tree <role-name>
Nyní pro ukázku vytvoříme tři dostupné role následovně:
- Role předpokladů – Instaluje git
- Role mongodb – Nainstaluje databázový stroj MongoDB
- Role Apache – Nainstaluje webový server Apache
Takže pomocí stejné syntaxe, kterou jsme použili dříve, vytvoříme role následovně:
$ sudo ansible-galaxy init prerequisites $ sudo ansible-galaxy init mongodb $ sudo ansible-galaxy init apache
Dalším krokem je definování každé role, kterou jste vytvořili. Chcete-li toho dosáhnout, musíte upravit soubor main.yml umístěný ve složce „úkoly“ pro každou roli.
role —> úkoly —> main.yml
Chcete-li například upravit roli předpokladů, přejděte podle obrázku:
$ cd prerequisites/tasks/
Poté upravte soubor main.yml.
$ sudo vim main.yml
Role pro instalaci git je definována takto:
- name: Install git apt: name: git state: present update_cache: yes
Pro MongoDB máme 2 úkoly. Instalace MongoDB a spuštění démona Mongod.
- name: Install MongoDB apt: name: mongodb state: present update_cache: yes - name: Start Mongod daemon shell: "mongod &"
A konečně pro webový server Apache:
- name: install Apache web server apt: name=apache2 state=present update_cache=yes
Nakonec vytvoříme soubor playbooku s názvem stack.yml a zavoláme role, jak je znázorněno.
--- - hosts: all become: yes roles: - prerequisites - mongodb - apache
Jak můžete vidět, soubor playbooku vypadá docela jednoduše ve srovnání s definováním jednotlivých úloh pro hostitele.
Chcete-li zajistit, aby naše role fungovaly podle očekávání, spusťte soubor ansible playbook, jak je znázorněno.
$ sudo ansible-playbook /etc/ansible/stack.yml
Příručka provede všechny zobrazené role.
Abychom zajistili, že byly balíčky úspěšně nainstalovány, zkontrolujeme jejich verze, jak je uvedeno:
$ mongod --version $ apachectl -v $ git --version
Výše uvedený výstup potvrzuje, že se role skutečně úspěšně provádějí a že balíček byl nainstalován. Perfektní!
Konec:
Ansible role zjednodušují soubory playbooků, zvláště když máte více úloh, které je třeba provést na několika hostitelích. Navíc můžete znovu použít role pro více hostitelů, aniž byste museli upravovat soubor playbooku. Pokud vám tato příručka přišla užitečná, pošlete nám zprávu a sdílejte ji se svými přáteli.