Někdy můžete chtít spouštět konkrétní úlohy namísto spouštění celého souboru playbooku. To pomáhá zkrátit celkovou dobu provádění playbooku, zejména při práci s velkým souborem playbooku.
Co jsou tedy značky?
Tagy v playbookech jsou části metadat, které jsou připojeny k úkolům v souboru playbooku. Odkazuje se na ně při spouštění playbooků a umožňují vám selektivně cílit na určité úlohy za běhu. V zásadě jde o pokyn Ansible, aby provedl (nebo neprovedl) konkrétní úkoly v souboru playbooku.
Úkoly, které byly přeskočeny, byly obvykle provedeny, a proto je není nutné provádět znovu. Tímto způsobem se značky vyhýbají opakování a optimalizují dobu provádění playbooku. Jsou užitečné, když chcete spouštět určité úlohy na vyžádání.
V této příručce se ponoříme do Ansible Tags a ukážeme si, jak můžete k úkolům připojovat tagy, abyste určili provedení playbooku.
Proveďte konkrétní úkol v příručce
Vezměme si příklad souboru playbooku, který provádí tři úlohy, jak je uvedeno na obrázku. Tagy jsou specifikovány pomocí štítku tags na konci každého úkolu.
--- - name: Ansible Tags example hosts: localhost gather_facts: False tasks: - name: Hello World tag example debug: msg: "Hello World!" tags: - hello - name: Welcome to Ansible Tags tag example debug: msg: "How are you?" tags: - welcome - name: Enjoy tag example debug: msg: "Enjoy!" tags: - enjoy
V této příručce máme tři značky:ahoj, vítejte a užívejte si.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --list-tags
Jak již bylo zmíněno dříve, pomocí značek můžete ovládat provádění her Ansible. Chcete-li určit, která úloha se má provést, použijte parametr -t nebo –tags.
V níže uvedeném příkazu dáváme Ansible pokyn, aby provedl pouze první úlohu, která byla označena jako hello.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --tags hello
Přeskočit konkrétní značky v příručce
Pomocí příznaku –skip-tags můžete také dát Ansible pokyn, aby přeskakoval určité značky. Přitom Ansible spustí zbytek úloh v souboru Playbook s výjimkou poskytnuté úlohy.
V tomto příkladu Ansible ignoruje poslední úkol označený jako enjoy a provede zbytek úkolů definovaných v playbooku.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --skip-tags enjoy
Zajistěte, aby se úloha vždy (nebo nikdy) nespustila
I když používáte značky k určování, které úlohy se mají v souboru playbooku provést, někdy zjistíte, že existují úlohy, které musíte provést. Vezměte si například příručku, která nainstaluje Apache na vzdálený webový server.
Kniha má 3 úkoly. Nejprve aktualizuje seznamy balíčků na vzdáleném hostiteli, nainstaluje Apache a restartuje jej. Před instalací Apache je však nutné aktualizovat seznamy balíčků nebo aktualizovat úložiště.
Vzhledem k tomu, že obnovení repozitářů je nezbytným předpokladem, označíme tento úkol tagem always.
--- - name: install Apache webserver hosts: webserver tasks: - name: Update and upgrade apt packages apt: update_cache: yes tags: - always - name: install Apache on Ubuntu apt: name: apache2 state: latest tags: - install_apache - name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache
Bez jakýchkoliv tagů běží playbook podle očekávání.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
Pokud určíme spuštění jiné specifické úlohy, než té, která je povinná (což je v tomto případě první úloha), Ansible také provede úlohu, která nese značku ‘always’.
V tomto příkladu jsme dali pokyn Ansible restartovat Apache, který nese značku „restart_apache“. Úloha ‚update apt repository‘ však stále běží, protože má značku ‚always‘.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
Ve stejném duchu můžete Ansible říct, aby nikdy nespouštěla úlohu, a k tomu používáme značku ‚nikdy‘. Toto je přesný opak značky „vždy“.
Zpátky k naší učebnici. Předpokládejme, že po instalaci nechcete restartovat Apache. Chcete-li toho dosáhnout, jednoduše předejte značku nikdy, jak je uvedeno.
- name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache - never
To lze také označit následovně pomocí dvojitých hranatých závorek:
tags: [ restart_apache, never ]
Když je playbook spuštěn bez jakýchkoliv značek, úloha bude vynechána.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
Z výstupu můžete vidět, že úloha restartování Apache byla přeskočena.
POZNÁMKA:
Úloha, která je označena jako ‚nikdy‘, bude stále spuštěna, když je explicitně volána v příkazu ansible-playbook. Například úloha, která restartuje Apache, bude stále provedena, protože byla explicitně definována v příkazu.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
Koneckonců
Značky Ansible jsou praktické a poskytují flexibilitu potřebnou při spouštění herních knih Ansible. Můžete provést nebo přeskočit provádění konkrétních úkolů v playbooku. To poskytuje lepší kontrolu nad vašimi playbooky během běhu playbooku.
Přečtěte si také :Jak používat Ansible Vault k zabezpečení citlivých dat