10 Schritte zum YAML Zen

Wir alle lieben Ansible, aber Ansible ist YAML. Es gibt viele Formate für Konfigurationsdateien: Wertelisten, Parameter-Wert-Paare, INI-Dateien, YAML, JSON, XML und viele andere. Allerdings wird YAML aus mehreren Gründen oft als besonders schwierig angesehen. Insbesondere die YAML-Syntax kann trotz ihres erfrischenden Minimalismus und der beeindruckenden Möglichkeiten für die Arbeit mit hierarchischen Werten mit ihrem Python-ähnlichen Ansatz zur Einrückung nervig sein.

10 Schritte zum YAML Zen

Wenn Ihnen YAML auf die Nerven geht, können Sie das – und das sollten Sie auch! - Ergreifen Sie die nächsten 10 Schritte, um Ihre Irritation auf ein akzeptables Maß zu reduzieren und YAML zu lieben. Passend zu dieser Liste werden unsere zehn Tipps von Grund auf nummeriert, Meditation und spirituelle Praktiken ergänzen wir nach Wunsch 😉

0. Sorgen Sie dafür, dass Ihr Editor funktioniert

Es spielt keine Rolle, welchen Texteditor Sie haben, es gibt wahrscheinlich mindestens ein Plugin für die Arbeit mit YAML. Wenn Sie noch keines haben, suchen Sie es sofort und installieren Sie es. Der Zeitaufwand für das Suchen und Einrichten zahlt sich bei jeder Bearbeitung von YAML um ein Vielfaches aus.

Zum Beispiel der Herausgeber Atom unterstützt standardmäßig YAML, aber für GNU Emacs müssen Sie zusätzliche Pakete installieren, zum Beispiel Yaml-Modus.

10 Schritte zum YAML Zen

Emacs im YAML-Modus und mit Leerzeichen.

Wenn Ihr Lieblingseditor nicht über den YAML-Modus verfügt, können einige Probleme durch Arbeiten mit den Einstellungen gelöst werden. Der Standardtexteditor für GNOME, Gedit, verfügt beispielsweise nicht über den YAML-Modus, hebt jedoch standardmäßig die YAML-Syntax hervor und ermöglicht Ihnen die Anpassung der Einrückung:

10 Schritte zum YAML Zen

Einzüge in Gedit festlegen.

Ein Plugin Zeichenräume Für Gedit werden Leerzeichen als Punkte angezeigt, wodurch Unklarheiten bei der Einrückungsebene vermieden werden.

Mit anderen Worten: Nehmen Sie sich die Zeit, Ihren Lieblingseditor zu erlernen. Finden Sie heraus, was er oder seine Entwickler-Community für die Arbeit mit YAML zu bieten hat, und nutzen Sie diese Möglichkeiten. Sie werden es bestimmt nicht bereuen.

1. Verwenden Sie einen Linter

Im Idealfall verwenden Programmiersprachen und Auszeichnungssprachen eine vorhersehbare Syntax. Computer sind gut vorhersagbar, weshalb das Konzept bereits 1978 entstand lintera. Wenn es Ihnen in den 40 Jahren seines Bestehens entgangen ist und Sie immer noch keinen YAML-Linter verwenden, dann ist es an der Zeit, Yamllint auszuprobieren.

Installieren Yamlint Sie können den nativen Linux-Paketmanager verwenden. Zum Beispiel in Red Hat Enterprise Linux 8 oder Fedora es wird so gemacht:

$ sudo dnf install yamllint

Dann führen Sie einfach yamllint aus und übergeben ihm die YAML-Datei zur Überprüfung. So sieht es aus, wenn Sie eine Datei mit einem Fehler an den Linter übergeben:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

Die Zahlen auf der linken Seite geben nicht die Zeit an, sondern die Koordinaten des Fehlers: die Nummer der Zeile und Spalte. Die Beschreibung des Fehlers sagt Ihnen vielleicht nichts, aber Sie wissen genau, wo er liegt. Schauen Sie sich einfach diese Stelle im Code an und höchstwahrscheinlich wird alles klar.

Wenn Yamllint in einer Datei keine Fehler findet, wird nichts auf dem Bildschirm ausgegeben. Wenn Ihnen solche Stille Angst macht und Sie etwas mehr Feedback wünschen, können Sie den Linter mit dem echo-bedingten Befehl über ein doppeltes kaufmännisches Und (&&) ausführen, etwa so:

$ yamllint perfect.yaml && echo "OK"
OK

In POSIX wird das doppelte kaufmännische Und nur dann ausgelöst, wenn der vorhergehende Befehl 0 zurückgibt. Und yamllint gibt nur die Anzahl der gefundenen Fehler zurück, weshalb diese bedingte Konstruktion funktioniert.

2. Schreiben Sie in Python, nicht in YAML

Wenn Ihnen YAML wirklich auf die Nerven geht, schreiben Sie einfach nicht hinein, im wahrsten Sinne des Wortes. Es kommt vor, dass YAML das einzige Format ist, das von der Anwendung akzeptiert wird. In diesem Fall ist es jedoch nicht erforderlich, eine YAML-Datei zu erstellen. Schreiben Sie, was Ihnen gefällt, und konvertieren Sie es dann. Es gibt zum Beispiel eine tolle Bibliothek für Python pyyaml und zwei ganze Arten der Konvertierung: Selbstkonvertierung und Konvertierung durch Skripte.

Selbstbekehrung

In diesem Fall handelt es sich bei der Datendatei auch um ein Python-Skript, das YAML generiert. Diese Methode eignet sich am besten für kleine Datensätze. Sie schreiben einfach JSON-Daten in eine Python-Variable, stellen ihr eine Importanweisung voran und fügen am Ende der Datei drei Zeilen hinzu, um die Ausgabe zu implementieren.

#!/usr/bin/python3	
import yaml 

d={
"glossary": {
  "title": "example glossary",
  "GlossDiv": {
	"title": "S",
	"GlossList": {
	  "GlossEntry": {
		"ID": "SGML",
		"SortAs": "SGML",
		"GlossTerm": "Standard Generalized Markup Language",
		"Acronym": "SGML",
		"Abbrev": "ISO 8879:1986",
		"GlossDef": {
		  "para": "A meta-markup language, used to create markup languages such as DocBook.",
		  "GlossSeeAlso": ["GML", "XML"]
		  },
		"GlossSee": "markup"
		}
	  }
	}
  }
}

f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close

Jetzt führen wir diese Datei in Python aus und erhalten die Datei „output.yaml“ als Ausgabe:

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: A meta-markup language, used to create markup languages such as DocBook.
		GlossSee: markup
		GlossTerm: Standard Generalized Markup Language
		ID: SGML
		SortAs: SGML
	title: S
  title: example glossary

Dies ist vollkommen gültiges YAML, aber Yamllint wird Sie warnen, dass es nicht mit - beginnt. Nun, dies kann leicht von Hand korrigiert oder mit dem Python-Skript leicht angepasst werden.

Konvertieren über Skripte

In diesem Fall schreiben wir zunächst in JSON und führen dann den Konverter als separates Python-Skript aus, das YAML als Ausgabe erzeugt. Im Vergleich zur vorherigen Methode lässt sich diese Methode besser skalieren, da die Konvertierung getrennt von den Daten erfolgt.

Erstellen wir zunächst eine JSON-Datei example.json, aus der Sie sie beispielsweise übernehmen können json.de:

{
	"glossary": {
	  "title": "example glossary",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Standard Generalized Markup Language",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "A meta-markup language, used to create markup languages such as DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "markup"
			}
		  }
		}
	  }
	}

Als Nächstes erstellen wir ein einfaches Konverterskript und speichern es als json2yaml.py. Dieses Skript importiert sowohl die YAML- als auch die JSON-Python-Module, lädt eine vom Benutzer angegebene JSON-Datei, führt die Konvertierung durch und schreibt die Daten in die Datei „output.yaml“.

#!/usr/bin/python3
import yaml
import sys
import json

OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')

JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()

Speichern Sie dieses Skript im Systempfad und führen Sie es nach Bedarf aus:

$ ~/bin/json2yaml.py example.json

3. Analysieren Sie viel und oft

Manchmal ist es sinnvoll, ein Problem aus einem anderen Blickwinkel zu betrachten. Wenn Sie Schwierigkeiten haben, die Beziehungen zwischen Ihren Daten in YAML darzustellen, können Sie sie vorübergehend in etwas Vertrauteres umwandeln.

Wenn Sie beispielsweise mit Wörterbuchlisten oder JSON vertraut sind, kann YAML mit nur zwei Befehlen in einer interaktiven Python-Shell in JSON konvertiert werden. Nehmen wir an, Sie haben eine YAML-Datei mydata.yaml, dann würde sie so aussehen:

$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}

Es gibt viele weitere Beispiele zu diesem Thema. Darüber hinaus stehen zahlreiche Online-Konverter und lokale Parser zur Verfügung. Formatieren Sie die Daten also gerne neu, wenn Sie darin nur ein unverständliches Durcheinander sehen.

4. Lesen Sie die technischen Daten

Wenn Sie nach einer langen Pause wieder zu YAML zurückkehren, ist es hilfreich, einen Blick darauf zu werfen yaml.org und lesen Sie die Spezifikationen (specs) noch einmal durch. Wenn Sie Schwierigkeiten mit YAML haben, aber Ihre Hände haben die Spezifikation noch nicht erreicht, dann ist es an der Zeit, diese Situation zu korrigieren. Die Spezifikationen sind überraschend einfach zu schreiben und die Syntaxanforderungen werden anhand zahlreicher Beispiele veranschaulicht Kapitel 6.

5. Pseudokonfigurationen

Wenn Sie ein Buch oder einen Artikel schreiben, ist es immer eine gute Idee, zunächst eine vorläufige Gliederung zu entwerfen, zumindest in Form eines Inhaltsverzeichnisses. Das Gleiche gilt für YAML. Höchstwahrscheinlich haben Sie eine Vorstellung davon, welche Daten in die YAML-Datei geschrieben werden sollen, wissen aber nicht wirklich, wie Sie diese miteinander in Beziehung setzen sollen. Zeichnen Sie daher vor dem Formen von YAML eine Pseudokonfiguration.

Pseudokonfiguration ähnelt Pseudocode, bei dem Sie sich keine Gedanken über Struktur oder Einrückung, Eltern-Kind-Beziehungen, Vererbung und Verschachtelung machen müssen. Hier ist es dasselbe: Sie zeichnen Iterationen der Daten, während sie in Ihrem Kopf entstehen.

10 Schritte zum YAML Zen

Pseudoconfig listet Programmierer (Martin und Tabitha) und ihre Fähigkeiten auf (Programmiersprachen: Python, Perl, Pascal bzw. Lisp, Fortran, Erlang).

Nachdem Sie eine Pseudokonfiguration auf ein Blatt Papier gezeichnet haben, analysieren Sie sie sorgfältig und formatieren Sie sie, wenn alles in Ordnung ist, als gültige YAML-Datei.

6. Das Tabulator- oder Leerzeichen-Dilemma

Sie müssen das Dilemma lösen „Tabs oder Leerzeichen?“. Nicht im globalen Sinne, sondern nur auf der Ebene Ihrer Organisation oder zumindest eines Projekts. Es spielt keine Rolle, ob es sich dabei um die Nachbearbeitung mit einem Sed-Skript, das Einrichten von Texteditoren auf den Computern von Programmierern oder das Entgegennehmen von Quittungen für die strikte Einhaltung von Linter-Anweisungen unter Androhung einer Entlassung handelt, sondern alle Mitglieder Ihres Teams sind dabei Weise oder auf andere Weise mit YAML in Zusammenhang stehen, dürfen nur Leerzeichen verwenden (wie von der YAML-Spezifikation gefordert).

In jedem normalen Texteditor können Sie die automatische Ersetzung von Tabulatoren für eine bestimmte Anzahl von Leerzeichen einrichten, sodass die Anhänger des Schlüssels rebellieren Tab Du brauchst keine Angst zu haben.

Wie jeder YAML-Hasser weiß, gibt es auf dem Bildschirm keinen Unterschied zwischen Tabulatoren und Leerzeichen. Und wenn etwas nicht sichtbar ist, wird es in der Regel zuletzt gemerkt, nachdem es aussortiert, überprüft und alle anderen möglichen Probleme beseitigt wurden. Eine Stunde Zeitverschwendung beim Suchen nach einem Tabulator oder Leerzeichenblock schreit geradezu danach, dass Sie dringend eine Richtlinie für die Verwendung des einen oder anderen erstellen und dann eine Stahlbetonprüfung auf deren Konformität durchführen müssen (z. B. durch einen Git-Hook to). einen Lauf durch den Linter erzwingen).

7. Weniger ist mehr (oder mehr ist weniger)

Manche Leute schreiben gerne in YAML, weil es die Struktur betont. Gleichzeitig nutzen sie aktiv Einrückungen, um Datenblöcke hervorzuheben. Es ist eine Art Betrug, Markup-Sprachen nachzuahmen, die explizite Trennzeichen verwenden.

Hier ist ein Beispiel einer solchen Struktur von Ansible-Dokumentation:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

Für einige hilft diese Option dabei, die YAML-Struktur in ihren Köpfen zu zerlegen, während andere sie im Gegenteil mit einer Menge unnötiger, ihrer Meinung nach, Einrückungen ärgern.

Wenn Sie jedoch Eigentümer des YAML-Dokuments sind und für dessen Pflege verantwortlich sind, dann du und nur du muss definieren, wie Einrückungen verwendet werden sollen. Wenn Sie sich über große Polsterungen ärgern, beschränken Sie diese auf das Minimum, das gemäß der YAML-Spezifikation möglich ist. Beispielsweise kann die obige Datei aus der Ansible-Dokumentation ohne Verlust wie folgt umgeschrieben werden:

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. Verwenden Sie Leerzeichen

Wenn Sie beim Ausfüllen einer YAML-Datei immer wieder dieselben Fehler machen, ist es sinnvoll, darin eine leere Vorlage als Kommentar einzufügen. Dann können Sie beim nächsten Mal dieses Leerzeichen einfach kopieren und dort echte Daten eingeben, zum Beispiel:

---
# - <common name>:
#   name: Given Surname
#   job: JOB
#   skills:
#   - LANG
- martin:
  name: Martin D'vloper
  job: Developer
  skills:
  - python
  - perl
  - pascal
- tabitha:
  name: Tabitha Bitumen
  job: Developer
  skills:
  - lisp
  - fortran
  - erlang

9. Verwenden Sie etwas anderes

Wenn die Anwendung Sie nicht im Würgegriff hat, kann es sich lohnen, YAML auf ein anderes Format umzustellen. Mit der Zeit können Konfigurationsdateien über sich hinauswachsen, dann ist es besser, sie in einfache Lua- oder Python-Skripte umzuwandeln.

YAML ist eine großartige Sache, die viele Menschen wegen ihres Minimalismus und ihrer Einfachheit lieben, aber es ist bei weitem nicht das einzige Werkzeug in Ihrem Arsenal. Manchmal kann man es also ablehnen. Parsing-Bibliotheken sind für YAML leicht zu finden. Wenn Sie also einfache Migrationsoptionen anbieten, werden Ihre Benutzer diesen Fehler relativ schmerzlos überstehen.

Wenn Sie auf YAML nicht verzichten können, dann nutzen Sie diese 10 Tipps und besiegen Sie Ihre Abneigung gegen YAML ein für alle Mal!

Source: habr.com

Kommentar hinzufügen