GNU/Linux >> Znalost Linux >  >> Linux

YAML pro začátečníky

YAML není značkovací jazyk (YAML) a jak jdou konfigurační formáty, je to nenáročné na oči. Má intuitivní vizuální strukturu a jeho logika je docela jednoduchá:odsazené odrážky dědí vlastnosti nadřazených odrážek.

Ale tato zdánlivá jednoduchost může být klamná.

Je snadné (a zavádějící) považovat YAML za pouhý seznam souvisejících hodnot, o nic složitější než nákupní seznam. Je tam nadpis a některé položky pod ním. Položky pod nadpisem se toho přímo týkají, že? Tuto teorii můžete otestovat napsáním malého množství platného YAML.

Otevřete textový editor a zadejte tento text, přičemž ponechte pomlčky v horní části souboru a úvodní mezery pro poslední dvě položky:

---
Store: Bakery
  Sourdough loaf
  Bagels

Uložte soubor jako example.yaml (nebo podobný).

Pokud ještě nemáte yamllint nainstalováno, nainstalujte jej:

$ sudo dnf install -y yamllint

linter je aplikace, která ověřuje syntaxi souboru. yamllint Command je skvělý způsob, jak zajistit, aby byl váš YAML platný, než jej předáte jakékoli aplikaci, pro kterou YAML píšete (například Ansible).

Použijte yamllint pro ověření vašeho YAML souboru:

$ yamllint --strict shop.yaml || echo “Fail”
$

Ale po převodu na JSON pomocí jednoduchého skriptu převodníku se datová struktura tohoto jednoduchého YAML stane jasnější:

$ ~/bin/json2yaml.py shop.yaml
{“Store”: “Bakery Sourdough loaf Bagels”}

Při analýze bez vizuálního kontextu zalomení řádků a odsazení vypadá skutečný rozsah vašich dat hodně odlišně. Data jsou většinou plochá, téměř bez hierarchie. Nic nenasvědčuje tomu, že kynutý bochník a bagely jsou potomky názvu obchodu.

[ Čtenářům se také líbilo: Ansible:Automatizace IT pro každého ]

Jak jsou data uložena v YAML

YAML může obsahovat různé druhy datových bloků:

  • Pořadí:hodnoty uvedené v určitém pořadí. Sekvence začíná pomlčkou a mezerou (- ). Sekvenci si můžete představit jako seznam Pythonu nebo pole v Bash nebo Perlu.
  • Mapování:páry klíčů a hodnot. Každý klíč musí být jedinečný a na pořadí nezáleží. Představte si pythonovský slovník nebo přiřazení proměnných ve skriptu Bash.

Existuje třetí typ nazvaný scalar , což jsou libovolná data (zakódovaná v Unicode), jako jsou řetězce, celá čísla, data a tak dále. V praxi se jedná o slova a čísla, která zadáváte při vytváření mapovacích a sekvenčních bloků, takže na ně nebudete myslet o nic víc, než budete přemýšlet o slovech svého rodného jazyka.

Při konstrukci YAML může pomoci uvažovat o YAML buď jako o sekvenci sekvencí, nebo o mapě map, ale ne o obojím.

Mapovací bloky YAML

Když spustíte soubor YAML pomocí příkazu mapování, YAML očekává řadu mapování. Mapovací blok v YAML se neuzavře, dokud není vyřešen a není explicitně vytvořen nový mapovací blok. Nový blok lze vytvořit pouze buď zvýšením úrovně odsazení (v takovém případě nový blok existuje uvnitř předchozího bloku) nebo vyřešením předchozího mapování a spuštěním sousedního mapovacího bloku.

Důvod, proč původní příklad YAML v tomto článku nedokáže vytvořit data s hierarchií, je ten, že se ve skutečnosti jedná pouze o jeden datový blok:klíč Store má jedinou hodnotu Bakery Sourdough loaf Bagels . YAML ignoruje mezery, protože nebyl spuštěn žádný nový mapovací blok.

Je možné opravit příklad YAML tím, že před každou položku sekvence přidáte pomlčku a mezeru?

---
Store: Bakery
  - Sourdough loaf
  - Bagels

    Opět platí, že je to platný YAML, ale stále je to docela ploché:

    $ ~/bin/json2yaml.py shop.yaml
    {“Store”: “Bakery - Sourdough loaf - Bagels”}

    Problém je v tom, že tento soubor YAML otevře mapovací blok a nikdy jej nezavře. Chcete-li zavřít Store blok a otevřete nový, musíte spustit nové mapování. hodnotu mapování může být sekvence, ale potřebujete klíč první.

    Zde je správné (a rozšířené) rozlišení:

    ---
    Store:
      Bakery:
        - ‘Sourdough loaf’
        - ‘Bagels’
      Cheesemonger:
        - ‘Blue cheese’
        - ‘Feta’

    V JSON se to řeší takto:

    {“Store”: {“Bakery”: [“Sourdough loaf”, “Bagels”],
    “Cheesemonger”: [“Blue cheese”, “Feta”]}}

    Jak můžete vidět, tato direktiva YAML obsahuje jedno mapování (Store ) na dvě podřízené hodnoty (BakeryCheesemonger ), z nichž každý je namapován na podřízenou sekvenci.

    bloky sekvence YAML

    Stejné principy platí, pokud spustíte direktivu YAML jako sekvenci. Například tato směrnice YAML je platná:

    Flour
    Water
    Salt

      Každá položka je odlišná při zobrazení jako JSON:

      [“Flour”, “Water”, “Salt”]

      Tento soubor YAML však není platný, protože se pokouší spustit mapovací blok na sousední úrovni k sekvenčnímu bloku :

      ---
      - Flour
      - Water
      - Salt
      Sugar: caster

      Lze jej opravit přesunutím mapovacího bloku do sekvence:

      ---
      - Flour
      - Water
      - Salt
      - Sugar: caster

      Do položky mapování můžete jako vždy vložit sekvenci:

      ---
      - Flour
      - Water
      - Salt
      - Sugar:
          - caster
          - granulated
          - icing

      Nahlíženo optikou explicitního rozsahu JSON, tento úryvek YAML zní takto:

      [“Flour”, “Salt”, “Water”, {“Sugar”: [“caster”, “granulated”, “icing”]}]

      [ Bezplatný průvodce od společnosti Red Hat:5 kroků k automatizaci vašeho podnikání. ] 

      Syntaxe YAML

      Pokud chcete pohodlně psát YAML, je důležité znát jeho datovou strukturu. Jak můžete říci, není toho mnoho, co byste si měli pamatovat. Znáte mapování a sekvence bloky, takže víte vše, s čím musíte pracovat. Nezbývá, než si pamatovat, jak se chovají a jak spolu neinteragují. Šťastné kódování!


      Linux
      1. Linux killall příkaz pro začátečníky (8 příkladů)

      2. Příklady příkazů DNF pro začátečníky

      3. Pochopení YAML pro Ansible

      1. MX Linux 17:Upgradovaná distribuce vytvořená pro začátečníky

      2. Linuxový příkaz dir pro začátečníky (10 příkladů)

      3. Příkaz Linux rm vysvětlený pro začátečníky (8 příkladů)

      1. Linux ln Command Tutorial pro začátečníky (5 příkladů)

      2. Linux nl Command Tutorial pro začátečníky (7 příkladů)

      3. Linux nm Command Tutorial pro začátečníky (10 příkladů)