10 skref til YAML Zen

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.

10 skref til YAML Zen

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 Atom styður YAML sjálfgefið, en fyrir GNU Emacs þarftu að setja upp viðbótarpakka, til dæmis, yaml-hamur.

10 skref til YAML Zen

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:

10 skref til YAML Zen

Setja inndrátt í Gedit.

Viðbót dráttarrými fyrir Gedit, sýnir bil sem punkta, útrýmir tvíræðni með inndráttarstigum.

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 lintera. Ef það hefur farið framhjá þér á þeim 40 árum sem það hefur verið til og þú notar enn ekki YAML linter, þá er kominn tími til að prófa yamllint.

Settu upp yamllint Þú getur notað venjulegan Linux pakkastjóra. Til dæmis, í Red Hat Enterprise Linux 8 eða Fedora það er gert svona:

$ 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 pyyaml og tvær umbreytingaraðferðir: sjálfsbreyting og umbreyting í gegnum forskriftir.

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

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 yaml.org og lestu forskriftirnar (forskriftirnar) aftur. Ef þú átt í erfiðleikum með YAML, en hefur ekki komist að forskriftinni, þá er kominn tími til að leiðrétta þetta ástand. Forskriftirnar eru furðu auðvelt að skrifa og setningafræðikröfurnar eru sýndar með fjölda dæma í 6. kafli.

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.

10 skref til YAML Zen

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ð "flipar eða bil?". Ekki í alþjóðlegum skilningi, heldur aðeins á vettvangi fyrirtækis þíns, eða að minnsta kosti verkefnis. Það skiptir ekki máli hvort þetta felur í sér að nota eftirvinnslu með sed skriftu, setja upp textaritla á vélum forritara eða taka almennt kvittanir fyrir því að leiðbeiningum linter sé fylgt með hótun um uppsögn, en allir meðlimir teymisins sem í á einn eða annan hátt tengjast YAML verður að nota aðeins bil (eins og krafist er í YAML forskriftinni).

Í 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á Ansible skjöl:

# 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

Bæta við athugasemd