GNU/Linux >> LINUX-Kenntnisse >  >> Linux

YAML für Anfänger

YAML ist keine Markup-Sprache (YAML), und was Konfigurationsformate angeht, schont es die Augen. Es hat eine intuitive visuelle Struktur und seine Logik ist ziemlich einfach:Eingerückte Aufzählungszeichen erben Eigenschaften von übergeordneten Aufzählungszeichen.

Aber diese scheinbare Einfachheit kann täuschen.

Es ist einfach (und irreführend), sich YAML nur als eine Liste verwandter Werte vorzustellen, nicht komplexer als eine Einkaufsliste. Es gibt eine Überschrift und einige Elemente darunter. Die Punkte unter der Überschrift beziehen sich direkt darauf, richtig? Nun, Sie können diese Theorie testen, indem Sie ein wenig gültiges YAML schreiben.

Öffnen Sie einen Texteditor und geben Sie diesen Text ein, wobei Sie die Bindestriche am Anfang der Datei und die führenden Leerzeichen für die letzten beiden Elemente beibehalten:

---
Store: Bakery
  Sourdough loaf
  Bagels

Speichern Sie die Datei als example.yaml (oder ähnlich).

Falls Sie noch nicht yamllint haben installiert, installieren Sie es:

$ sudo dnf install -y yamllint

Ein Linter ist eine Anwendung, die die Syntax einer Datei überprüft. Der yamllint Befehl ist eine großartige Möglichkeit, um sicherzustellen, dass Ihre YAML-Datei gültig ist, bevor Sie sie an die Anwendung übergeben, für die Sie YAML schreiben (z. B. Ansible).

Verwenden Sie yamllint um Ihre YAML-Datei zu validieren:

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

Aber bei der Konvertierung in JSON mit einem einfachen Konvertierungsskript wird die Datenstruktur dieses einfachen YAML klarer:

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

Ohne den visuellen Kontext von Zeilenumbrüchen und Einrückungen analysiert, sieht der tatsächliche Umfang Ihrer Daten ganz anders aus. Die Daten sind größtenteils flach, fast ohne Hierarchie. Es gibt keinen Hinweis darauf, dass das Sauerteigbrot und die Bagels Kinder des Ladennamens sind.

[ Leser mochten auch: Ansible:IT-Automatisierung für alle ]

Wie Daten in YAML gespeichert werden

YAML kann verschiedene Arten von Datenblöcken enthalten:

  • Reihenfolge:Werte, die in einer bestimmten Reihenfolge aufgelistet sind. Eine Sequenz beginnt mit einem Bindestrich und einem Leerzeichen (- ). Sie können sich eine Sequenz als eine Python-Liste oder ein Array in Bash oder Perl vorstellen.
  • Zuordnung:Schlüssel-Wert-Paare. Jeder Schlüssel muss eindeutig sein, und die Reihenfolge spielt keine Rolle. Denken Sie an ein Python-Wörterbuch oder eine Variablenzuweisung in einem Bash-Skript.

Es gibt einen dritten Typ namens scalar , bei denen es sich um beliebige Daten handelt (in Unicode codiert), z. B. Zeichenfolgen, Ganzzahlen, Datumsangaben usw. In der Praxis sind dies die Wörter und Zahlen, die Sie beim Erstellen von Zuordnungs- und Sequenzblöcken eingeben, sodass Sie nicht mehr darüber nachdenken müssen als über die Wörter Ihrer Muttersprache.

Beim Erstellen von YAML kann es hilfreich sein, sich YAML entweder als Sequenz von Sequenzen oder als Karte von Karten vorzustellen, aber nicht beides.

YAML-Zuordnungsblöcke

Wenn Sie eine YAML-Datei mit einer Mapping-Anweisung starten, erwartet YAML eine Reihe von Mappings. Ein Zuordnungsblock in YAML wird erst geschlossen, wenn er aufgelöst wurde, und es wird explizit ein neuer Zuordnungsblock erstellt. Ein neuer Block kann nur beides erstellt werden durch Erhöhen der Einrückungsebene (in diesem Fall existiert der neue Block innerhalb des vorherigen Blocks) oder durch Auflösen der vorherigen Zuordnung und Starten eines angrenzenden Zuordnungsblocks.

Der Grund, warum das ursprüngliche YAML-Beispiel in diesem Artikel keine Daten mit einer Hierarchie erzeugt, ist, dass es sich tatsächlich nur um einen Datenblock handelt:den Schlüssel Store hat einen einzelnen Wert von Bakery Sourdough loaf Bagels . YAML ignoriert die Leerzeichen, da kein neuer Mapping-Block gestartet wurde.

Ist es möglich, das YAML-Beispiel zu reparieren, indem jedem Sequenzelement ein Bindestrich und ein Leerzeichen vorangestellt wird?

---
Store: Bakery
  - Sourdough loaf
  - Bagels

    Auch dies ist gültiges YAML, aber es ist immer noch ziemlich flach:

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

    Das Problem ist, dass diese YAML-Datei einen Zuordnungsblock öffnet und ihn nie schließt. Um den Store zu schließen blockieren und ein neues öffnen, müssen Sie ein neues Mapping starten. Der Wert der Zuordnung kann eine Sequenz sein, aber Sie benötigen einen Schlüssel zuerst.

    Hier ist die richtige (und erweiterte) Auflösung:

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

    In JSON wird dies folgendermaßen aufgelöst:

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

    Wie Sie sehen können, enthält diese YAML-Direktive eine Zuordnung (Store ) in zwei untergeordnete Werte (Bakery und Cheesemonger ), die jeweils einer untergeordneten Sequenz zugeordnet sind.

    YAML-Sequenzblöcke

    Die gleichen Prinzipien gelten, wenn Sie eine YAML-Direktive als Sequenz beginnen. Beispielsweise ist diese YAML-Direktive gültig:

    Flour
    Water
    Salt

      Jedes Element ist unterschiedlich, wenn es als JSON:

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

      Aber diese YAML-Datei ist nicht gültig, weil es versucht, einen Zuordnungsblock zu starten auf einer benachbarten Ebene zu einem Sequenzblock :

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

      Es kann repariert werden, indem der Zuordnungsblock nach verschoben wird die Reihenfolge:

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

      Sie können wie immer eine Sequenz in Ihr Zuordnungselement einbetten:

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

      Durch die Linse des expliziten JSON-Scoping betrachtet, sieht dieses YAML-Snippet so aus:

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

      [ Ein kostenloser Leitfaden von Red Hat:5 Schritte zur Automatisierung Ihres Unternehmens. ] 

      YAML-Syntax

      Wenn Sie bequem YAML schreiben möchten, ist es wichtig, sich seiner Datenstruktur bewusst zu sein. Wie Sie sehen, müssen Sie sich nicht viel merken. Sie kennen sich mit Mapping aus und Reihenfolge Blöcke, damit Sie alles wissen, was Sie zum Arbeiten brauchen. Alles, was übrig bleibt, ist, sich daran zu erinnern, wie sie miteinander interagieren und wie sie nicht interagieren. Viel Spaß beim Codieren!


      Linux
      1. MX Linux 17:Eine aktualisierte Distribution für Anfänger

      2. Linux-dir-Befehl für Anfänger (10 Beispiele)

      3. Linux-Killall-Befehl für Anfänger (8 Beispiele)

      4. DNF-Befehlsbeispiele für Anfänger

      5. YAML für Ansible verstehen

      16 praktische Beispiele für Linux LS-Befehle für Anfänger

      Linux-mv-Befehl für Anfänger erklärt (8 Beispiele)

      Bash-Scripting-Tutorial für Anfänger

      Über 20 FFmpeg-Befehle für Anfänger

      Bash Heredoc-Tutorial für Anfänger

      Linux-Verzeichnisstruktur für Anfänger erklärt