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.
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
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:
Astellungen an Gedit.
E Plugin
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
Installéieren
$ 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
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
{
"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
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.
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
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
# 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