GNU/Linux >> Znalost Linux >  >> Linux

Pochopení YAML pro Ansible

Pokud píšete nebo používáte Ansible playbooky, pak jste zvyklí číst konfigurační soubory YAML. YAML může být zdánlivě jednoduchý a přitom podivně ohromující najednou, zvláště když vezmete v úvahu nekonečné možné moduly Ansible, které máte k dispozici. Zdá se, že by mělo být snadné poznamenat si několik možností do souboru YAML a poté spustit Ansible, ale jaké možnosti vyžaduje váš oblíbený modul? A proč jsou některé páry klíč–hodnota, zatímco jiné jsou seznamy?

YAML pro Ansible může být komplexní, takže pochopení toho, jak se moduly Ansible překládají do YAML, je důležitou součástí zlepšení v obou. Než pochopíte, jak YAML funguje pro moduly Ansible, musíte pochopit základy YAML.

Pokud nevíte, jaký je rozdíl mezi blokem mapování a blokem sekvence v YAML, přečtěte si tento rychlý úvod do základů článku YAML.

Syntaxe příkazu

Kromě použití ad hoc se Ansible používá prostřednictvím příruček . Příručka se skládá z jednoho nebo více přehrání v uspořádaném seznamu (sekvence YAML ). Každá hra může spustit jeden nebo více úkolů a každý úkol vyvolá modul Ansible.

Ansible moduly jsou v podstatě front-endy pro příkazy. Pokud jste obeznámeni s terminálem Linux nebo Microsoft Powershell, pak víte, jak vytvořit příkaz pomocí možností (jako je --long nebo -s ) spolu s argumenty (nazývanými také parametry). ).

Zde je jednoduchý příklad:

$ mkdir foo

Tento příkaz používá mkdir příkaz k vytvoření adresáře s názvem foo .

Ansible playbook také vytváří příkazy. Jsou to stejné příkazy, ale jsou vyvolány pomocí jiné syntaxe, než na jakou jste zvyklí v terminálu.

[ Mohlo by se vám také líbit: Začínáme s Ansible ]

Moduly Ansible a YAML

Jako úkol v Ansible playbooku je však syntaxe hodně odlišná. Nejprve je hra pojmenována, což je lidsky čitelný popis toho, co se hraje. Hra přijímá mnoho klíčových slov, včetně hosts omezit, na kterých hostitelích má běžet, a remote_user k definování uživatelského jména, které musí Ansible použít pro přístup ke vzdáleným hostitelům.

Klíčová slova pro přehrávání definuje sám Ansible a v dokumentaci Ansible Play Keywords je k dispozici seznam klíčů (a typů informací, které každý očekává jako svou hodnotu).

Tyto klíče nejsou samostatné položky seznamu. V terminologii YAML jsou to mapování vložené do sekvence přehrávání .

Zde je jednoduché prohlášení o hře:

---
- name: “Create a directory”
  hosts: localhost

Posledním mapovacím blokem v deklaraci hry jsou tasks klíčové slovo, které otevírá novou sekvenci definující, jaký modul Ansible bude přehrávání spuštěno a s jakými argumenty. Právě zde používáte známé příkazy neznámým způsobem podle YAML. Ve skutečnosti je pro vás tak neznámý, že si pravděpodobně budete muset modul přečíst, abyste zjistili, jaké argumenty od vás očekává.

V tomto příkladu používám vestavěný modul souboru. Z dokumentace modulu můžete vidět, že požadovaný parametr je path , který očekává platnou cestu k souboru POSIX. Vyzbrojeni těmito informacemi můžete vytvořit velmi jednoduchou příručku Ansible, která vypadá takto:

---
- name: "Create a directory"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "foo"

Pokud si stále zvykáte na význam odsazení YAML, všimněte si, že název úkolu není odsazen vzhledem k tasks protože name je začátek nového bloku sekvence YAML (který, jak se to stalo, slouží jako hodnota pro tasks klíč). Slovo file určuje, jaký modul se používá, který je součástí definice úkolu, a path je povinný parametr file modul.

Jinými slovy, úkolem hry je sekvenční blok YAML (tj. uspořádaný seznam) definic vyvolávajících modul a jeho parametry.

Tuto hru můžete otestovat a ověřit, že funguje podle očekávání, ale nejprve spusťte yamllint na to, abyste se vyhnuli syntaktickým překvapením:

$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
TASK [Instantiate] ******************
fatal: [localhost]:
FAILED! => {“changed”: false,
“msg”: “file (foo) is absent, cannot continue” …

Příručka byla zpracována, ale úkol selhal. Čtení seznamu parametrů file modul ukazuje, že jeho chování do značné míry závisí na hodnotě state . Konkrétně je výchozí akcí vrátit stav path .

Upravte svůj ukázkový soubor YAML tak, aby obsahoval state mapování:

---
- name: "Create a directory"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "foo"
      state: directory

Pro úspěch jej spusťte znovu:

$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
$ ls
foo

Řídicí moduly

Ne všechny moduly Ansible mapují přímo na jeden příkaz. Některé moduly upravují způsob, jakým Ansible zpracovává vaši příručku. Například with_items modul vyjmenovává položky, se kterými má pracovat jiný modul. Můžete si to představit jako určitý druh do while nebo for smyčka.

Jeho dokumentace uvádí, že přijímá pouze jeden parametr:seznam položek. „Seznam“ v terminologii YAML je sekvence , takže víte, aniž byste se podívali na ukázkový kód v dokumentech, že každá položka musí začínat pomlčkou (- ).

Zde je nová iterace vytváření složek, tentokrát s více podsložkami (pomocí recurse parametr v file module) a další parametr pro nastavení oprávnění k souboru. Nenechte se zmást dalšími řádky. Toto je v podstatě stejný kód jako předtím, pouze s dalšími parametry, jak je popsáno v file dokumentaci modulu plus with_items modul pro povolení iterace:

---
- name: "Create directory structure"
  hosts: localhost
  tasks:
  - name: "Instantiate"
    file:
      path: "{{ item }}"
      recurse: true
      mode: "u=rwx,g=rwx,o=r"
      state: directory
    with_items:
      - "foo/src"
      - "foo/dist"
      - "foo/doc"

Výsledky zobrazíte spuštěním příručky:

$ yamllint folder.yaml
$ ansible-playbook folder.yaml
[…]
$ ls foo
dist doc src

[ Potřebujete více o Ansible? Absolvujte bezplatný kurz technického přehledu od společnosti Red Hat. Ansible Essentials:Jednoduchost v technickém přehledu automatizace. ] 

Ansible zásady

Příručka Ansible je sekvence YAML , který se sám skládá z mapování a sekvence .

Příručky také obsahují moduly Ansible, z nichž každý přijímá parametry definované vývojářem. Povinné i volitelné parametry jsou uvedeny v dokumentaci modulu.

Chcete-li vytvořit knihu Ansible, spusťte sekvenci YAML, která pojmenuje hru, a poté vypíše (v sekvenci) jeden nebo více úkolů. V každé úloze lze vyvolat jeden nebo více modulů.

Věnujte velkou pozornost odsazení tím, že porozumíte typu dat, která zadáváte do souboru YAML. Může pomoci vyhnout se uvažovat o odsazení jako o indikaci logické dědičnosti a místo toho vidět každý řádek jako jeho datový typ YAML (tj. sekvenci nebo mapování).

Použijte yamllint k ověření vašich souborů YAML.

Jakmile pochopíte strukturu příručky, je to jen otázka následování spolu s dokumentací modulu, abyste mohli provádět úkoly, které má vaše příručka provádět. K dispozici jsou stovky modulů, tak je začněte zkoumat a uvidíte, jaké úžasné věci můžete s tímto úžasným nástrojem dělat.


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

  2. YAML pro začátečníky

  3. 6 dovedností pro odstraňování problémů pro Ansible playbooky

  1. Pochopení Linusova zákona pro bezpečnost open source

  2. 10 modulů Ansible pro automatizaci systému Linux

  3. Potřebujete znát technologie pro mladší systémové správce

  1. Demystifikování Ansible pro systémové správce Linuxu

  2. Stručný úvod do rolí Ansible pro správu systému Linux

  3. Potřebujete příklad Netplan Yaml pro statickou IP?