10 Schrëtt op YAML Zen

Mir all gär Ansible, awer Ansible ass YAML. Et gi vill Formater fir Konfiguratiounsdateien: Lëschte vu Wäerter, Parameter-Wäertpaaren, INI Dateien, YAML, JSON, XML a vill anerer. Wéi och ëmmer, aus verschiddene Grënn aus hinnen all gëtt YAML dacks als besonnesch schwéier ugesinn. Besonnesch, trotz sengem erfrëschende Minimalismus an beandrockende Fäegkeeten fir mat hierarchesche Wäerter ze schaffen, kann d'YAML Syntax lästeg sinn mat senger Python-ähnlecher Approche fir d'Indentatioun.

10 Schrëtt op YAML Zen

Wann YAML Iech pisses, Dir kënnt - an Dir sollt! - huelt déi folgend 10 Schrëtt fir Är Frustratioun op en akzeptablen Niveau ze reduzéieren a verléift mat YAML. Wéi dës Lëscht passt, ginn eis zéng Tipps vun Null nummeréiert, mir addéieren Meditatioun a spirituell Praktiken op Wëllen 😉

0. Maacht Äre Redakter Aarbecht

Et ass egal wéi en Texteditor Dir hutt, et gëtt wahrscheinlech op d'mannst ee Plugin fir mat YAML ze schaffen. Wann Dir keen hutt, fann an installéiert se direkt. D'Zäit fir d'Sich an d'Konfiguratioun bezuele wäert vill Mol all Kéier wann Dir YAML änneren musst.

Zum Beispill, Redakter Atom ënnerstëtzt YAML par défaut, awer fir GNU Emacs musst Dir zousätzlech Packagen installéieren, zum Beispill, yaml-Modus.

10 Schrëtt op YAML Zen

Emacs am YAML Modus a weist Plazen.

Wann Äre Liiblingseditor keen YAML Modus huet, da kënnen e puer vun de Probleemer geléist ginn andeems Dir mat den Astellungen schafft. Zum Beispill huet de Standard GNOME Texteditor Gedit keen YAML Modus, awer par défaut beliicht et YAML Syntax an erlaabt Iech d'Aarbecht mat Indentatiounen ze konfiguréieren:

10 Schrëtt op YAML Zen

Astellungen an Gedit.

E Plugin drawspaces fir Gedit, weist Plazen als Punkten, eliminéiert Ambiguitéiten mat Indentatiounsniveauen.

An anere Wierder, verbréngt Zäit iwwer Äre Liiblingseditor ze léieren. Fannt eraus wat hien oder seng Entwécklungsgemeinschaft ze bidden huet fir mat YAML ze schaffen, a benotzt dës Funktiounen. Dir wäert et definitiv net bedaueren.

1. Benotzt eng linter

Idealerweis benotze Programméierungssproochen a Markupsproochen prévisibel Syntax. Computeren si gutt op Prévisibilitéit, dofir ass d'Konzept vun lintera. Wann an de 40 Joer vu senger Existenz et Iech passéiert ass an Dir nach ëmmer kee YAML Linter benotzt, dann ass et Zäit Yamllint ze probéieren.

Installéieren yamlint Dir kënnt de Standard Linux Package Manager benotzen. Zum Beispill, an Red Hat Enterprise Linux 8 oder Fedora dëst gëtt esou gemaach:

$ sudo dnf install yamllint

Da fuert Dir einfach Yamllint, gitt et d'YAML Datei fir ze kontrolléieren. Dëst ass wéi et ausgesäit wann Dir e Fichier mat engem Feeler un d'Linter passéiert:

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

D'Zuelen op der lénker Säit sinn net d'Zäit, mee d'Koordinate vum Feeler: Zeil a Kolonnnummer. D'Beschreiwung vum Feeler kann Iech näischt soen, awer Dir wësst genee wou et ass. Kuckt just dës Plaz am Code, a wahrscheinlech wäert alles kloer ginn.

Wann Yamllint keng Feeler an enger Datei fënnt, gëtt näischt op den Ecran gedréckt. Wann esou Rou Iech Angscht mécht an Dir wëllt e bësse méi Feedback, da kënnt Dir d'Linter mat dem bedingten Echo Kommando iwwer en duebelen Ampersand (&&) lafen, sou:

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

An POSIX, eng duebel ampersand Feier wann an nëmmen wann de viregte Kommando zréck 0. An yamllint just d'Zuel vun fonnt Feeler zréck, déi ass firwat dës ganz bedingt Konstruktioun Wierker.

2. Schreiwen am Python, net YAML

Wann YAML Iech wierklech pisses, einfach net an et schreiwen, wuertwiertlech. Et geschitt datt YAML dat eenzegt Format ass dat d'Applikatioun versteet. Awer och an dësem Fall ass et net néideg eng YAML Datei ze kreéieren. Schreift wat Dir gär hutt an dann konvertéiert. Zum Beispill gëtt et eng super Bibliothéik fir Python pyjaml an zwou Konversioun Methoden: Self-Konversioun an Konversioun duerch Scripten.

Self-Konversioun

An dësem Fall ass d'Datedatei och e Python Skript dat YAML generéiert. Dës Method ass am Beschten gëeegent fir kleng Datesets. Dir schreift einfach d'JSON-Daten an eng Python Variabel, setzt se mat enger Importdirektiv vir, a füügt um Enn vun der Datei dräi Zeilen derbäi fir den Ausgang ëmzesetzen.

#!/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

Elo lafe mir dës Datei am Python a kréien d'output.yaml Datei:

$ 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

Dëst ass perfekt valabel YAML, mee yamllint wäert Iech warnen, datt et net fänkt mat -. Gutt, dëst kann einfach manuell korrigéiert ginn oder liicht am Python Skript geännert ginn.

Konversioun iwwer Scripten

An dësem Fall schreiwen mir als éischt an JSON, a lafen dann den Konverter als separat Python Skript, deen YAML als Output produzéiert. Am Verglach mat der viregter Method ass dës Method besser, well d'Konversioun getrennt vun den Donnéeën ass.

Als éischt, loosst eis e JSON-Datei example.json erstellen, zum Beispill, kënnt Dir et huelen json.org:

{
	"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"
			}
		  }
		}
	  }
	}

Da wäerte mir en einfache Konverter-Skript erstellen a späicheren et ënner dem Numm json2yaml.py. Dëse Skript importéiert souwuel YAML wéi och JSON Python Moduler, a lued eng Benotzerspezifizéierter JSON Datei, mécht d'Konversioun a schreift d'Donnéeën an d'output.yaml Datei.

#!/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()

Späichert dëse Skript am Systemwee a lafen et wéi néideg:

$ ~/bin/json2yaml.py example.json

3. Parse vill an dacks

Heiansdo ass et nëtzlech e Problem aus engem anere Wénkel ze kucken. Wann Dir Probleemer hutt d'Bezéiungen tëscht Ären Donnéeën am YAML ze representéieren, kënnt Dir se temporär an eppes méi vertraut transforméieren.

Zum Beispill, wann Dir bequem sidd mat Wierderbuchlëschten oder JSON ze schaffen, kënnt Dir YAML op JSON konvertéieren mat nëmmen zwee Kommandoen an der interaktiver Python Shell. Loosst eis soen datt Dir eng YAML Datei mydata.yaml hutt, dann ass dat wéi et ausgesäit:

$ 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.'}

Dir kënnt vill aner Beispiller zu dësem Thema fannen. Zousätzlech ginn et vill Online Konverter a lokal Parser verfügbar. Also zéckt net fir d'Daten nei ze formatéieren wann Dir nëmmen en onverständleche Geck dran gesitt.

4. Liest d'Spezifikatioune

Zréck op YAML no enger laanger Paus, ass et nëtzlech fir ze besichen yaml.org a liesen d'Spezifikatioune (Spezifikatioune) nei. Wann Dir Schwieregkeeten mat YAML hutt, awer net un d'Spezifikatioun komm sidd, dann ass et Zäit dës Situatioun ze korrigéieren. D'Spezifikatioune sinn iwwerraschend einfach ze schreiwen, an d'Syntaxfuerderunge si mat enger grousser Unzuel u Beispiller illustréiert. Kapitel 6.

5. Pseudo-configs

Wann Dir e Buch oder Artikel schreift, ass et ëmmer nëtzlech fir éischt eng virleefeg Kontur ze skizzéieren, op d'mannst a Form vun engem Inhaltsverzeechnes. Et ass d'selwecht mat YAML. Wahrscheinlech hutt Dir eng Iddi iwwer wéi eng Donnéeën an eng YAML-Datei geschriwwe musse ginn, awer Dir verstitt net wierklech wéi Dir et matenee verbënnt. Dofir, ier Dir YAML sculpt, zéien eng Pseudo-Config.

Pseudo-Config ass ähnlech wéi Pseudo-Code, wou Dir keng Suergen iwwer Struktur oder Indentatioun, Elteren-Kand Bezéiungen, Ierfschaft an Nesting maache musst. Et ass d'selwecht hei: Dir zitt Iteratiounen vun den Daten wéi se an Ärem Kapp entstinn.

10 Schrëtt op YAML Zen

Pseudo-config Lëscht Programméierer (Martin an Tabitha) an hir Fäegkeeten (Programméiersproochen: Python, Perl, Pascal a Lisp, Fortran, Erlang, respektiv).

Nodeems Dir e Pseudo-Config op e Stéck Pabeier gezeechent hutt, analyséiert se virsiichteg a, wann alles an der Rei ass, formatéiert se a Form vun enger valabeler YAML Datei.

6. D'Tabs vs Spaces Dilemma

Dir musst den Dilemma léisen "Tabs oder Plazen?". Net am globale Sënn, mä nëmmen um Niveau vun Ärer Organisatioun, oder op d'mannst engem Projet. Et ass egal ob dëst d'Benotzung vun der Postveraarbechtung mat engem Sed-Skript implizéiert, Texteditoren op Programméierer Maschinnen opzestellen, oder allgemeng Empfange vu strikt Konformitéit mat den Instruktioune vun der Linter ënner Bedrohung vun der Entloossung huelen, awer all Member vun Ärem Team, déi an eng Manéier oder aner Zesummenhang mat YAML muss nëmmen Plazen benotzen (wéi néideg vun der YAML Spezifizéierung).

An all normalen Texteditor kënnt Dir Autokorrektur Tabs op eng spezifizéiert Zuel vu Plazen konfiguréieren, sou datt d'Rebellioun vu Schlësselanhänger Tab Dir musst net fäerten.

Wéi all YAML Hater weess gutt, Dir kënnt den Ënnerscheed tëscht Tabs a Plazen um Écran net gesinn. A wann eppes net sichtbar ass, ass et normalerweis déi lescht Saach, déi d'Leit erënneren, nodeems se all aner méiglech Problemer sortéiert, gepréift an eliminéiert hunn. Eng Stonn Zäit op der Sich no enger Tabulatiounskurve oder e Block vu Plazen jäizt einfach datt Dir dréngend eng Politik fir d'Benotzung vun deem een ​​oder anere muss kreéieren, an dann e Betonbetonkontroll fir d'Konformitéit domat ëmsetzen (z.B. duerch e Git Haken fir et duerch eng Linter ze zwéngen).

7. Manner ass méi (oder méi ass manner)

E puer Leit gär an YAML schreiwen well et Struktur ënnersträicht. Zur selwechter Zäit benotze se aktiv Indentatioun fir Datenblocken ze markéieren. Dëst ass eng Aart Scam fir Markupsproochen ze imitéieren déi explizit Ofgrenzer benotzen.

Hei ass e Beispill vun esou Struktur aus Ansible Dokumentatioun:

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

Fir e puer hëlleft dës Optioun hinnen d'YAML-Struktur an de Kapp ze sortéieren; fir anerer, am Géigendeel, irritéiert se mat vill onnéideg, an hirer Meenung no, Abriecher.

Awer wann Dir de Besëtzer vum YAML Dokument sidd a verantwortlech sidd fir et z'erhalen, dann Dir an nëmmen Dir muss definéieren wéi Indentatioun ze benotzen. Wann Dir genervt sidd vu grousser Polsterung, halen et op de Minimum méiglech no der YAML Spezifizéierung. Zum Beispill kann déi uewe genannte Datei aus der Ansible Dokumentatioun sou nei geschriwwe ginn ouni Verloscht:

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

8. Benotzt eidel

Wann Dir ëmmer déiselwecht Feeler widderhëlt wann Dir eng YAML-Datei ausfëllt, mécht et Sënn fir eng Schabloun als Kommentar anzeginn. Da kënnt Dir d'nächst Kéier einfach dës Schabloun kopéieren an do richteg Daten aginn, zum Beispill:

---
# - <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. Benotzt eppes anescht

Wann d'Applikatioun kee Streik op Iech huet, da kéint et derwäert sinn den YAML an en anert Format z'änneren. Mat der Zäit kënne Konfiguratiounsdateien sech selwer auswuessen an dann ass et besser se an einfache Scripten am Lua oder Python ze konvertéieren.

YAML ass eng super Saach déi vill Leit gär hunn fir säi Minimalismus an Simplicitéit, awer et ass wäit vun dat eenzegt Tool an Ärem Arsenal. Also heiansdo kënnt Dir et refuséieren. Parsing Bibliothéiken sinn einfach fir YAML ze fannen, also wann Dir einfach Migratiounsoptiounen ubitt, wäerten Är Benotzer dësen Echec relativ schmerzlos iwwerliewen.

Wann Dir net ouni YAML maache kënnt, huelt dann dës 10 Tipps an iwwerwannt Är Ongléck vu YAML eemol a fir all!

Source: will.com

Setzt e Commentaire