Të gjithë ne i duam Ansible, por Ansible është YAML. Ka shumë formate për skedat e konfigurimit: lista vlerash, çiftet "çelës-vlerë", skedarë INI, YAML, JSON, XML dhe shumë të tjera. Sidoqoftë, për disa arsye, nga të gjitha ato, YAML shpesh konsiderohet veçanërisht i vështirë. Kryesisht, pavarësisht minimalizmit të tij freskues dhe mundësive të tij mbresëlënëse për punë me vlera hierarkike, sintaksa YAML mund të jetë irrituese me qasjen e saj të ngjashme me Python për indentimin.

NĂ«se YAML ju bezdis, ju mund â dhe duhet! â tĂ« bĂ«ni 10 hapat e mĂ«poshtĂ«m pĂ«r tĂ« ulur irritimin tuaj nĂ« njĂ« nivel tĂ« pranueshĂ«m dhe pĂ«r ta dashuruar YAML. Ashtu siç i takon njĂ« liste tĂ« vĂ«rtetĂ«, dhjetka jonĂ« e kĂ«shillave do tĂ« numĂ«rohet nga zero, meditimi dhe praktikat shpirtĂ«rore janĂ« tĂ« shtuar sipas dĂ«shirĂ«s đ
0. Beri që redaktori juaj të punojë
Nuk ka rĂ«ndĂ«si se cili Ă«shtĂ« redaktori juaj i tekstit â pĂ«r tĂ« me siguri ekziston tĂ« paktĂ«n njĂ« plug-in pĂ«r tĂ« punuar me YAML. NĂ«se nuk keni njĂ« tĂ« tillĂ«, gjejeni dhe instaloni menjĂ«herĂ«. Koha e harxhuar pĂ«r kĂ«rkimin dhe konfigurimin do tĂ« kompensohet shumĂ«fish sa herĂ« qĂ« do t'ju duhet tĂ« redaktoni YAML.
Për shembull, redaktori mbështet YAML në mënyrë default, por për GNU Emacs do t'ju nevojiten paketa shtesë, për shembull, .

Emacs në modalitetin YAML dhe shfaqjen e hapësirave.
Nëse editori juaj i preferuar nuk ka modalitet YAML, disa probleme mund të zgjidhen duke punuar me cilësimet. Për shembull, redaktori i tekstit Gedit që vjen me GNOME nuk ka modalitet YAML, por në mënyrë default shfaq sintaksën YAML dhe lejon që të konfigurohen hapat:

Konfigurimi i hapësirave në Gedit.
Dhe plugin-i për Gedit shfaq hapësirat si pika, duke eliminuar paqartësitë me nivelin e hapësirave.
Me tjetër fjalë, shpenzoni kohë për të mësuar mbi editorin tuaj të preferuar. Zbuloni se çfarë ofron ai ose komuniteti i tij për të punuar me YAML dhe përdorni këto mundësi. Të sigurt do të jeni se nuk do të pendoheni për këtë.
1. Përdorni lintern (linter)
Idealisht, gjuhët e programimit dhe gjuhët e shënjestrës përdorin sintaksë të parashikueshme. Kompjuterët e kanë më të lehtë të përballen me parashikueshmërinë, prandaj koncepti lindi që nga vitit 1978. Nëse për 40 vjet ekzistence nuk ka kaluar pranë jush dhe ende nuk përdorni një YAML-linter, tani është koha për të provuar yamllint.
Instalo mund të përdorni menaxherin e paketave të pranishëm në Linux. Për shembull, në 8 ose kështu bëhet:
$ sudo dnf install yamllint
Më pas thjesht ekzekutoni yamllint, duke i kaluar skedarin YAML për kontroll. Këtu është se si duket nëse i dërgoni një skedar me gabim linters:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 gabim gabim sintaksor: vlerat e mapimit nuk lejohen këtu
23:11 gabim hapësira pas (hapësira që mbeten)
Numerat në të majtë nuk janë kohë, por koordinatat e gabimit: numri i linjës dhe kolona. Përshkrimi i gabimit mund të mos ju thotë asgjë, por ju e dini për siguri se ku ndodhet. Thjesht shikoni këtë vend në kod dhe, me siguri, gjithçka do të bëhet e qartë.
Kur yamllint nuk gjen gabime në skedar, nuk dalin të dhëna. Nëse kjo heshtje ju frikëson dhe dëshironi pak më shumë feedback, mund të ekzekutoni linters me komandën kush echos përmes dy amperstands (&&), kështu:
$ yamllint perfect.yaml && echo "OK"
OK
Në POSIX, dy amperstandet funksionojnë vetëm kur komanda e mëparshme jep 0. Dhe yamllint thjesht kthehet në numrin e gabimeve të gjetura, kështu që gjithë kjo strukturë kushtore funksionon.
2. Shkruani në Python, jo në YAML
Nëse ju bezdis realisht YAML, thjesht mos shkruani në të, në kuptimin e vërtetë. Ndonjëherë, YAML është e vetmja format që aplikacioni e pranon. Por edhe në këtë rast, nuk është e nevojshme të krijoni një skedë YAML. Shkruani në atë që ju pëlqen, dhe pastaj konvertoni. Për shembull, për Python ka një bibliotekë të shkëlqyer dhe dy mënyra për konvertim: konvertimi vetjak dhe konvertimi përmes skripteve.
Konvertimi vetjak
Në këtë rast, skeda e të dhënave është gjithashtu një skript Python që gjeneron YAML. Ky metodë është më e përshtatshme për grupe të vogla të dhënash. Thjesht shkruani të dhënat JSON në një variabël Python, duke e paraprirë këtë me direktivën import, dhe në fund të skedës shtoni tre rreshta për të realizuar rezultatin.
#!/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
Tani e ekzekutojmë këtë skedë në Python dhe në daljen merrni skedën output.yaml:
$ 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
Ky Ă«shtĂ« njĂ« YAML krejtĂ«sisht i saktĂ«, por yamllint do tĂ« japĂ« njĂ« paralajmĂ«rim se nuk fillon me â. Epo, kjo mund tĂ« rregullohet lehtĂ«sisht me dorĂ« ose duke modifikuar pak skenarin Python.
Konvertimi përmes skenareve
Në këtë rast, së pari shkruajmë në JSON dhe më pas ekzekutojmë konvertorin si një skenar të veçantë Python, i cili në daljen e tij jep YAML. Krahasuar me opsionin e mëparshëm, ky metodë është më e shkallëzuar, pasi konvertimi është i ndarë nga të dhënat.
Për të filluar, le të krijojmë një skedar JSON example.json; për shembull, mund ta merrni nga :
{
"glossary": {
"title": "shembulli i glosarit",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Gjuha Standardizuar e Markupit",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "Një gjuhë meta-markup, e cila përdoret për të krijuar gjuhë markup si DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
MĂ« pas le tĂ« krijojmĂ« njĂ« skenar konvertimi tĂ« thjeshtĂ« dhe ta ruajmĂ« atĂ« me emrin json2yaml.py. Ky skenar importon tĂ« dy modulat â YAML dhe JSON nga Python, si dhe ngarkon skedarin JSON tĂ« caktuar nga pĂ«rdoruesi, kryen konvertimin dhe shkruan tĂ« dhĂ«nat nĂ« skedarin 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()
Ruani këtë skenar në sistemin path dhe ekzekutoni sipas nevojës:
$ ~/bin/json2yaml.py example.json
3. Analizoni shumë dhe shpesh
Ndonjëherë është e dobishme ta shohësh një problem nga një këndvështrim tjetër. Nëse keni vështirësi në përfytyrimin e lidhjeve midis të dhënave në YAML, mund t'i shndërroni përkohësisht në diçka më të njohur.
Për shembull, nëse ju përshtatet të punoni me lista fjalësh ose me JSON, YAML mund të konvertohet në JSON me vetëm dy komanda në terminalin interaktiv të Python. Le të supozojmë se keni një skedar YAML mydata.yaml, atëherë kjo do të dukej kështu:
$ 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.'}
Ka shumë shembuj të tjerë mbi këtë temë. Për më tepër, ka shumë konvertues online dhe parserë lokalë. Pra, mos hezitoni të reformatojë të dhënat kur i shihni ato si një kaos të paqartë.
4. Lexoni specifikimet
Duke u kthyer në YAML pas një periudhe të gjatë, është e dobishme të shkoni në dhe rishikoni specifikimet (specifikimet). Nëse keni vështirësi me YAML, por nuk keni arritur ende tek specifikimet, është koha ta ndryshoni këtë situatë. Specifikimet janë surprizueshëm të shkruara lehtë, dhe kërkesat për sintaksën ilustrohen me një numër të madh shembujsh në .
5. Pseudokonfigurimet
Kur shkruani një libër ose një artikull, është gjithmonë e dobishme të bëni fillimisht një plan paraprak, së paku në formën e një përçapje. Po ashtu është edhe me YAML. Shumë gjasa, ju e dini se cilat të dhëna duhet të shkruani në skedarin YAML, por nuk e kuptoni mirë se si t'i lidhni ato me njëri-tjetrin. Prandaj, përpara se të krijoni YAML, vizatoni një pseudokonfigurim.
Pseudokonfigurimi është i ngjashëm me pseudokodin, ku nuk duhet të shqetësoheni për strukturën ose tërheqjet, marrëdhëniet "prind-fëmijë", trashëgiminë dhe thellësinë. Kështu që edhe këtu: ju vizatoni iteracione të të dhënave ndërsa ato shfaqen në mendjen tuaj.

Pseudokonfigurimi me enumerimin e programuesve (Martin dhe Tabitha) dhe aftësive të tyre (gjuhët e programimit: Python, Perl, Pascal dhe Lisp, Fortran, Erlang, përkatësisht).
Pasi të keni vizatuar pseudokonfigurimin në një copë letre, shqyrtojeni me kujdes atë dhe, nëse gjithçka është në rregull, organizojeni në një skedar YAML të vlefshëm.
6. Dilema «tabulatë ose hapësira»
Duhet të zgjidhni dilemmën . Jo në një kuptim global, por vetëm në nivelin e organizatës suaj, ose të paktën në nivelin e projektit. Nuk ka rëndësi nëse do të përdoret përpunimi post-zhvillim me scriptin sed, konfigurimi i redaktorëve të tekstit në makinat e programuesve, apo marrja e nënshkrimeve për zbatimin e rreptë të udhëzimeve të linters nën kërcënimin e shkarkimit, por të gjithë anëtarët e ekipit tuaj që kanë të bëjnë me YAML, patjetër duhet të përdorin vetëm hapësira (siç kërkon specifikimi i YAML).
Në çdo redaktor normal të tekstit, mund të vendosni automatikisht për të zëvendësuar tabulatën me një numër të caktuar hapësirash, kështu që nuk keni arsye të trembeni nga rebelët e çelësit Tab .
Si është mirë e njohur për çdo armiq të YAML, në ekran nuk ka dallim mes tabulimeve dhe hapësirave. Dhe kur diçka nuk është e dukshme, zakonisht kujtohet në fund, pas përfundimit, verifikimit dhe eliminimit të të gjitha problemeve të tjera të mundshme. Një orë e humbur në kërkimin e një tabulimi të keq ose një blloku hapësirash thjesht kërkon që ju urgjentisht të krijoni një politikë për përdorimin e këtij dhe atij, dhe më pas të implementoni një verifikim të fortë për respektimin e saj (për shembull, përmes një Git-hook për detyrimin e kalimit përmes linters).
7. MĂ« mirĂ« pak dhe mirĂ« (ose mĂ« shumĂ« â Ă«shtĂ« mĂ« pak)
Disa njerëz e duan të shkruajnë në YAML, pasi ai thekson strukturën. Në të njëjtën kohë, ata aktivisht përdorin hapësira për të theksuar blloqet e të dhënave. Kjo është një lloj mashtrimi për të imituar gjuhët e shënjimit, të cilat përdorin ndarës të qartë.
Ja një shembull i tillë strukturimi nga :
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Disa e gjejnë këtë variant ndihmues për të organizuar strukturën e YAML në mendjen e tyre, ndërsa të tjerët ndihen të irrituar nga sasia e panevojshme e hapësirave, sipas mendimit të tyre.
Por ëse, nëse jeni pronari i dokumentit YAML dhe jeni përgjegjës për mbajtjen e tij, atëherë vetëm ju duhet të përcaktoni se si të përdorni shkallët. Nëse ju shqetësojnë shkallët e mëdha, minimizojini në atë që është e mundur sipas specifikimit YAML. Për shembull, skedari i mësipërm nga dokumentacioni Ansible mund të ri-shkruhet kështu pa asnjë humbje:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Përdorni shabllona
Nëse gjatë plotësimit të skedarit YAML vazhdoni të bëni të njëjtat gabime, ka kuptim të vendosni një shabllon si komentin. Kështu, herën tjetër mund të kopjoni thjesht këtë shabllon dhe të shkruani të dhënat reale, për shembull:
---
# - <emri i zakonshëm>:
# name: Emri Mbiemri
# job: PUNA
# skills:
# - GJUHA
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
9. Përdorni diçka tjetër
Nëse aplikacioni nuk ju mban të lidhur fort, ndoshta është koha të zëvendësoni YAML me një format tjetër. Me kalimin e kohës, skedarët e konfigurimit mund të rriten dhe është më mirë t'i ktheheni në skenarë të thjeshtë në Lua ose Python.
YAML është një gjë e shkëlqyer, të cilën shumë njerëz e duan për minimalizmin dhe thjeshtësinë e saj, por nuk është mjeti i vetëm në arsenalin tuaj. Pra, ndonjëherë mund të hiqet dorë nga ajo. Për YAML janë të shkëlqyera bibliotekat e parse-it, kështu që nëse ofroni mundësi të përshtatshme për migrim, përdoruesit tuaj do ta kalojnë këtë ndryshim relativisht pa dhimbje.
Nëse, megjithatë, nuk mund të shmangni YAML, merrni këto 10 këshilla dhe mposhtni antipatinë tuaj ndaj YAML një herë e mirë!
Burimi: habr.com
