Við elskum öll Ansible, en Ansible er YAML. Það eru mörg snið fyrir stillingarskrár: lista yfir gildi, breytu-gildi pör, INI skrár, YAML, JSON, XML og margir aðrir. Hins vegar, af nokkrum ástæðum af þeim öllum, er YAML oft talið sérstaklega erfitt. Sérstaklega, þrátt fyrir hressandi naumhyggju og áhrifamikla getu til að vinna með stigveldisgildi, getur YAML setningafræðin verið pirrandi með Python-líkri nálgun sinni við inndrátt.
Ef YAML pirrar þig, geturðu það — og þú ættir að gera það! - taktu eftirfarandi 10 skref til að draga úr gremju þinni niður á viðunandi stig og verða ástfanginn af YAML. Eins og þessum lista sæmir verða tíu ráðin okkar tölusett frá grunni, við munum bæta við hugleiðslu og andlegum æfingum að vild 😉
0. Láttu ritstjórann þinn vinna
Það skiptir ekki máli hvaða textaritil þú hefur, það er líklega að minnsta kosti eitt viðbót til að vinna með YAML. Ef þú ert ekki með einn skaltu finna og setja hann upp strax. Tíminn sem fer í að leita og setja upp mun borga sig margfalt í hvert skipti sem þú þarft að breyta YAML.
Til dæmis ritstjóri
Emacs í YAML ham og sýna rými.
Ef uppáhalds ritstjórinn þinn er ekki með YAML ham, þá er hægt að leysa sum vandamálin með því að vinna með stillingarnar. Til dæmis er venjulegi GNOME textaritillinn Gedit ekki með YAML ham, en sjálfgefið undirstrikar hann YAML setningafræði og gerir þér kleift að stilla vinnu með inndráttum:
Setja inndrátt í Gedit.
Viðbót
Með öðrum orðum, eyða tíma í að læra um uppáhalds ritstjórann þinn. Finndu út hvað hann eða þróunarsamfélagið hans býður upp á til að vinna með YAML og notaðu þau tækifæri. Þú munt örugglega ekki sjá eftir því.
1. Notaðu linter
Helst nota forritunarmál og álagningarmál fyrirsjáanlega setningafræði. Tölvur eru góðar í fyrirsjáanleika, þess vegna er hugmyndin um
Settu upp
$ sudo dnf install yamllint
Síðan keyrirðu einfaldlega yamllint og sendir henni YAML skrána til að athuga. Svona lítur það út ef þú sendir skrá með villu í linterinn:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Tölurnar til vinstri eru ekki tíminn, heldur hnit villunnar: röð og dálknúmer. Lýsingin á villunni segir þér kannski ekki neitt, en þú veist nákvæmlega hvar hún er. Horfðu bara á þennan stað í kóðanum og líklega mun allt skýrast.
Þegar yamllint finnur engar villur í skrá er ekkert prentað á skjáinn. Ef slík þögn hræðir þig og þú vilt aðeins meiri endurgjöf, þá geturðu keyrt linterinn með skilyrtu bergmálsskipuninni með tvöföldu ampermerki (&&), svona:
$ yamllint perfect.yaml && echo "OK"
OK
Í POSIX kviknar tvöfalt ampermerki ef og aðeins ef fyrri skipunin skilar 0. Og yamllint skilar bara fjölda villna sem fundust, þess vegna virkar öll þessi skilyrta smíði.
2. Skrifaðu í Python, ekki YAML
Ef YAML fer virkilega í taugarnar á þér skaltu bara ekki skrifa í það, bókstaflega. Það gerist að YAML er eina sniðið sem forritið skilur. En jafnvel í þessu tilfelli er ekki nauðsynlegt að búa til YAML skrá. Skrifaðu á það sem þér líkar og breyttu síðan. Til dæmis er frábært bókasafn fyrir Python
Sjálfsbreyting
Í þessu tilviki er gagnaskráin einnig Python forskrift sem býr til YAML. Þessi aðferð hentar best fyrir lítil gagnasöfn. Þú einfaldlega skrifar JSON gögnin inn í Python breytu, formáli það með innflutningstilskipun og í lok skráarinnar bætir þú við þremur línum til að útfæra úttakið.
#!/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
Nú keyrum við þessa skrá í Python og fáum output.yaml skrána:
$ 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
Þetta er fullkomlega gilt YAML, en yamllint mun vara þig við því að það byrjar ekki á -. Jæja, þetta er auðvelt að leiðrétta handvirkt eða breyta örlítið í Python handritinu.
Umbreyting með forskriftum
Í þessu tilviki skrifum við fyrst í JSON og keyrum síðan breytirinn sem sérstakt Python skriftu, sem framleiðir YAML sem úttak. Í samanburði við fyrri aðferð, mælist þessi aðferð betur, þar sem umbreytingin er aðskilin frá gögnunum.
Fyrst skulum við búa til JSON skrá example.json, til dæmis, þú getur tekið hana úr
{
"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"
}
}
}
}
}
Síðan munum við búa til einfalt breytiforskrift og vista það undir nafninu json2yaml.py. Þetta handrit flytur inn bæði YAML og JSON Python einingar og hleður inn notendatilgreindri JSON skrá, framkvæmir umbreytinguna og skrifar gögnin í output.yaml skrána.
#!/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()
Vistaðu þetta handrit í kerfisslóðinni og keyrðu það eftir þörfum:
$ ~/bin/json2yaml.py example.json
3. Skoðaðu mikið og oft
Stundum er gagnlegt að skoða vandamál frá öðru sjónarhorni. Ef þú átt í vandræðum með að tákna tengslin milli gagna þinna í YAML geturðu umbreytt þeim tímabundið í eitthvað kunnuglegra.
Til dæmis, ef þú ert ánægð með að vinna með orðabókalista eða JSON, geturðu umbreytt YAML í JSON með aðeins tveimur skipunum í gagnvirku Python skelinni. Segjum að þú sért með YAML skrá mydata.yaml, þá myndi hún líta svona út:
$ 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.'}
Þú getur fundið mörg önnur dæmi um þetta efni. Að auki eru margir breytir á netinu og staðbundnir flokkarar í boði. Svo ekki hika við að endursníða gögnin þegar þú sérð aðeins óskiljanlegt rugl í þeim.
4. Lestu upplýsingarnar
Þegar farið er aftur til YAML eftir langt hlé er gagnlegt að heimsækja
5. Gervistillingar
Þegar þú skrifar bók eða grein er alltaf gagnlegt að skissa fyrst á bráðabirgðayfirlit, að minnsta kosti í formi efnisyfirlits. Það er eins með YAML. Líklegast hefurðu hugmynd um hvaða gögn þarf að skrifa inn í YAML skrá, en þú skilur í raun ekki hvernig á að tengja þau hvert við annað. Þess vegna, áður en þú myndhöggvar YAML, teiknaðu gervistillingu.
Pseudo-config er svipað og gervikóði, þar sem þú þarft ekki að hafa áhyggjur af uppbyggingu eða inndrætti, samskiptum foreldra og barns, arfleifð og hreiður. Það er það sama hér: þú teiknar endurtekningar á gögnunum þegar þau koma upp í hausnum á þér.
Pseudo-config skráir forritara (Martin og Tabitha) og færni þeirra (forritunarmál: Python, Perl, Pascal og Lisp, Fortran, Erlang, í sömu röð).
Eftir að hafa teiknað gervistillingu á blað skaltu greina hana vandlega og, ef allt er í lagi, forsníða það í formi gildrar YAML skrá.
6. Tabs vs Spaces vandamálið
Þú verður að leysa vandamálið
Í hvaða venjulegu textaritli sem er geturðu stillt sjálfvirka leiðréttingu flipa á tiltekinn fjölda rýma, þannig að helstu fylgismenn gera uppreisn Tab þú þarft ekki að vera hræddur.
Eins og allir YAML hatarar vita vel geturðu ekki séð muninn á flipa og bilum á skjánum. Og þegar eitthvað er ekki sýnilegt er það venjulega það síðasta sem fólk man eftir, eftir að það hefur raðað í gegnum, athugað og útrýmt öllum öðrum hugsanlegum vandamálum. Klukkutími af tíma í að leita að töflukúrfu eða blokk af rýmum öskrar einfaldlega að þú þurfir brýn að búa til stefnu um notkun á einum eða öðrum og innleiða síðan járnbentri steypuprófun til að uppfylla það (td í gegnum Git krókur til að þvinga hann í gegnum linter).
7. Minna er meira (eða meira er minna)
Sumum finnst gaman að skrifa í YAML vegna þess að það leggur áherslu á uppbyggingu. Á sama tíma nota þeir virkan inndrátt til að auðkenna gagnablokkir. Þetta er eins konar svindl til að líkja eftir álagningarmálum sem nota skýr afmörkun.
Hér er dæmi um slíka uppbyggingu frá
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Fyrir suma hjálpar þessi valkostur þeim að raða YAML uppbyggingunni í hausnum á sér; fyrir aðra, þvert á móti, pirrar hann þá með fullt af óþarfa, að þeirra mati, inndrætti.
En ef þú ert eigandi YAML skjalsins og berð ábyrgð á að viðhalda því, þá þú og aðeins þú verður að skilgreina hvernig á að nota inndrátt. Ef þú ert pirraður á stórum bólstrun, hafðu það í lágmarki sem mögulegt er samkvæmt YAML forskriftinni. Til dæmis er hægt að endurskrifa ofangreinda skrá úr Ansible skjölunum svona án þess að tapa:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Notaðu eyðurnar
Ef þú endurtekur sömu mistök stöðugt þegar þú fyllir út YAML skrá, þá er skynsamlegt að setja sniðmát inn í það sem athugasemd. Næst þegar þú getur einfaldlega afritað þetta sniðmát og slegið inn raunveruleg gögn þar, til dæmis:
---
# - <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. Notaðu eitthvað annað
Ef forritið hefur ekki kyrking á þér, þá gæti verið þess virði að breyta YAML í annað snið. Með tímanum geta stillingarskrár vaxið upp úr sjálfum sér og þá er betra að breyta þeim í einföld forskrift í Lua eða Python.
YAML er frábær hlutur sem margir elska fyrir naumhyggju og einfaldleika, en það er langt frá því að vera eina tækið í vopnabúrinu þínu. Svo stundum geturðu neitað því. Auðvelt er að finna greiningarsöfn fyrir YAML, þannig að ef þú býður upp á auðvelda flutningsmöguleika munu notendur þínir lifa af þessa bilun tiltölulega sársaukalaust.
Ef þú getur ekki verið án YAML, taktu þá þessar 10 ráð og sigrast á óþokka þinni á YAML í eitt skipti fyrir öll!
Heimild: www.habr.com