GNU/Linux >> Znalost Linux >  >> Linux

Jak používat smyčky v Ansible Playbook

V průběhu provádění úkolů v příručce Ansible , můžete narazit na některé úkoly, které se svou povahou opakují. Jedná se o úkoly, které vyžadují vytvoření více her, což může být docela únavné. Stejně jako v každém programovacím jazyce poskytují smyčky v Ansible snadnější způsob provádění opakujících se úloh pomocí menšího počtu řádků kódu v playbooku.

Při vytváření smyček poskytuje Ansible tyto dvě direktivy:loop a s_* klíčové slovo.

Klíčové slovo smyčky bylo nedávno přidáno do Ansible 2.5 . Klíčové slovo loop se obvykle používá k vytvoření jednoduchých a standardních smyček, které procházejí několika položkami.

with_*  klíčové slovo se používá s řadou vyhledávacích pluginů při iteraci hodnot. Vyhledávací pluginy umožňují Ansible přistupovat k informacím z externích zdrojů, jako jsou externí datová úložiště, souborové systémy atd. The with_* vyhledávání se stále velmi používá a dosud nebylo zavrženo.

Pojďme se nyní podívat na to, jak můžete implementovat smyčky v Ansible.

Iterace přes jednoduché smyčky 

Zvažte Playbook, který přidá nového uživatele do cílového systému pomocí uživatelského modulu, jak je znázorněno:

---- hostitelé:ubuntu_webserver  úkoly:    - jméno:Vytvořit nového uživatele john      user:        jméno:john        stav:přítomný

Tohle vypadá dobře. Ale co když máme do cílového systému přidat více uživatelů? Jak bychom na to šli? Jedním ze způsobů by bylo duplikovat úkoly, jak je uvedeno v příkladu níže, kde přidáváme 3 uživatele.

---- hostitelé:ubuntu_webserver  úkoly:    - jméno:Vytvořit nového uživatele john      uživatel:        jméno:john         stav:přítomný    - jméno:Vytvořit nového uživatele mike      uživatel:         jméno:          jméno:mike   je přítomen uživatel:    nový uživatel      je      :        jméno:andrew        stav:přítomný

Jak se můžete zdát, vyžaduje to hodně duplikace a opakování.

Aby to bylo snazší, stejnou příručku lze napsat pomocí direktivy loop. Direktiva loop provede stejnou úlohu vícekrát. Ukládá hodnotu každé položky do proměnné s názvem item .Takže místo zadávání jmen uživatelů, kteří mají být přidáni, jednoduše zadejte proměnnou nazvanou item uzavřenou mezi dvojité složené závorky, jak je znázorněno.

jméno:‚{{ item }}‘

Proto bude proměnná odkazovat na každou z položek ve smyčce.

Jak můžete vidět, naše příručka je nyní mnohem přehlednější a zbytečně duplikuje/opakuje se.

$ vi create_users.yaml---- hostitelé:ubuntu_webserver  úkoly:    - name:Vytvořit nové uživatele      user:        name:'{{ item }}'        stav:přítomný      smyčka:         -                                                 

Můžete také použít with_items direktiva namísto směrnice smyčky. Oba povedou ke stejnému výsledku.

---- hostitelé:ubuntu_webserver  stát se:ano  úkoly:    - jméno:Vytvořit nové uživatele      uživatel:        jméno:'{{ item }}'        stav:přítomen      with_items:          - john              re w             

Nyní můžete spustit příručku a vytvořit uživatele pomocí ansible-playbook příkaz, jak je znázorněno níže:

$ ansible-playbook -i inventář.txt create_users.yaml

Opakování seznamu slovníků

V prvním příkladu jsme se podívali na jednoduchou standardní smyčku, kde pole bylo seznamem řetězcových hodnot představujících uživatele, kteří mají být přidáni do vzdáleného cíle.

Ale co když potřebujeme přidat uid do smyčky tak, že každá položka má nyní dvě hodnoty:uživatelské jméno a uid . Jak byste předali 2 hodnoty v poli?

V tomto scénáři budete muset předat pole slovníků, každý se 2 páry klíč–hodnota, jak je znázorněno. Klíči budou jméno a uid, zatímco hodnoty budou uživatelské jméno a ID každého uživatele.

V části „úkoly ‘, již nemůžete definovat položku proměnné jako dříve. Protože máme 2 hodnoty, převede se to na dvě proměnné:item.name &item.uid .

Kompletní příručka je zobrazena níže:

$ vi create_users.yaml---- hostitelé:ubuntu_webserver  stát se:yes  úkoly:    - name:Vytvořit nové uživatele      uživatel:        název:'{{ item.name }}'        uid:'{{ item.uid }}' stav:současnost      smyčka:        - jméno:john          uid:1020        - jméno:mike           uid:1030        - jméno:andrew           uid:před 10 

Pole slovníků může být také reprezentováno ve formátu JSON.

loop:  - { name:john , uid:1020 }  - { name:mike , uid:1030 }  - { name:andrew , uid:1040}

Po provedení získáte následující výstup:

$ ansible-playbook -i inventář.txt create_users.yaml

Ansible smyčky s indexy

Občas můžete chtít sledovat hodnoty indexu v rámci pole položek. K tomu použijte ‘with indexed_items ' vzhlédnout. Hodnota indexu začíná od 0, zatímco index smyčky začíná od item.0 a hodnotu zpoložky.1

Zvažte níže uvedenou příručku:

$ vi indexes.yaml---- hostitelé:ubuntu_webserver  úkoly:  - name:Indexes with Ansible loop    ladění:      msg:"Auto v {{ item.0 }} je {{ item.1 }}"    with_indexed_items:– „Nissan“     – „Mercedes“      – „Toyota“      – „Mazda“      – „BMW“

Po spuštění playbook zobrazí hodnotu indexu každé položky v seznamu polí.

$ ansible-playbook -i inventář.txt indexes.yaml

Podmínky v Ansible Loops

V Ansible cyklech můžete použít podmíněný příkaz, kdy řídit cyklování na základě povahy proměnných nebo systémových faktů. Podívejte se na níže uvedený playbook, kde máme seznam balíčků, které je třeba nainstalovat.

Zadali jsme pole nazvané „balíčky ‘, který obsahuje seznam balíčků, které je třeba nainstalovat. Každá z položek v poli obsahuje název balíčku, který se má nainstalovat, a vlastnost nazvanou „požadováno “, která je nastavena na hodnotu „True “ pro 2 balíčky a „False ‘ za jeden balíček.

$ vi install-packages.yaml---- name:Instalační software  stát se:ano  hostitelé:všechny  varianty:    balíčky:      - název:neofetch         povinné:True      - název:cpu-checker         povinné:True              screen fetch Falešné  úkoly:    - name:Install "{{ item.name }}" na Ubuntu      apt:        name:"{{ item.name }}"        State:present      when:         - item.required ==True         - ansible_facttion =="Ubuntu"      smyčka:"{{ balíčky }"

kdy ‘ podmíněný příkaz se snaží nainstalovat softwarové balíčky s vlastností ‘požadováno ‘ nastaveno na ‘True “ na cílových systémech, kterými jsou distribuce Ubuntu. Níže je uveden výstup z playbooku při spuštění.

Podrobný výstup jasně ukazuje balíčky, které se instalují, a ten, který je na základě podmíněného příkazu ignorován.

A tím se dostáváme ke konci tohoto tématu. Doufáme, že dobře rozumíte smyčkám v příručkách Ansible. Neváhejte se obrátit na jakékoli vysvětlení.

Přečtěte si také :Jak používat šablonu Jinja2 v Ansible Playbook


Linux
  1. Jak používám Ansible a anacron pro automatizaci

  2. Jak používat Ansible k nastavení monitorování systému pomocí Prometheus

  3. Jak předat další proměnné do příručky Ansible

  1. Jak používat příkaz if else Conditionals ve skriptu Bash

  2. Jak nainstalovat a používat Ansible na Debian 11

  3. Jak vytvořit Ansible Playbook

  1. Jak používat značky v Ansible Playbook (příklady)

  2. Jak stáhnout a používat role Ansible Galaxy v Ansible Playbook

  3. Jak nainstalovat softwarové balíčky pomocí Ansible playbooku