10 ceumannan gu YAML Zen

Tha gaol againn uile air Ansible, ach tha YAML ann an Ansible. Tha mòran chruthan ann airson faidhlichean rèiteachaidh: liostaichean luachan, paidhrichean luach paramadair, faidhlichean INI, YAML, JSON, XML agus mòran eile. Ach, airson grunn adhbharan a-mach às a h-uile gin dhiubh, tha YAML gu tric air a mheas gu sònraichte duilich. Gu sònraichte, a dh’ aindeoin a mhion-eòlas ùrachail agus na comasan drùidhteach aige airson a bhith ag obair le luachan rangachd, faodaidh co-chòrdadh YAML a bhith draghail leis an dòigh-obrach coltach ri Python a thaobh indentation.

10 ceumannan gu YAML Zen

Ma chuireas YAML stad ort, faodaidh tu - agus bu chòir dhut! - Gabh na 10 ceumannan a leanas gus do shàrachadh a lughdachadh gu ìre iomchaidh agus tuiteam ann an gaol le YAML. Mar a tha iomchaidh don liosta seo, bidh na deich molaidhean againn air an àireamhachadh bhon fhìor thoiseach, cuiridh sinn cleachdaidhean meòrachaidh agus spioradail ris aig toil 😉

0. Dèan an neach-deasachaidh agad ag obair

Chan eil e gu diofar dè an deasaiche teacsa a th’ agad, is dòcha gu bheil co-dhiù aon plugan ann airson a bhith ag obair le YAML. Mura h-eil fear agad, lorg agus stàlaich e sa bhad. Pàighidh an ùine a thèid a chaitheamh a’ lorg agus a’ stèidheachadh iomadh uair a h-uile uair a dh’ fheumas tu YAML a dheasachadh.

Mar eisimpleir, neach-deasachaidh Atom a’ toirt taic do YAML gu bunaiteach, ach airson GNU Emacs feumaidh tu pacaidean a bharrachd a chuir a-steach, mar eisimpleir, modh yaml.

10 ceumannan gu YAML Zen

Emacs ann am modh YAML agus a’ taisbeanadh àiteachan.

Mura h-eil modh YAML aig an deasaiche as fheàrr leat, faodar cuid de na duilgheadasan fhuasgladh le bhith ag obair leis na roghainnean. Mar eisimpleir, chan eil modh YAML aig deasaiche teacsa àbhaisteach GNOME Gedit, ach gu gnàthach bidh e a’ soilleireachadh co-chòrdadh YAML agus a’ leigeil leat obair a rèiteachadh le indentations:

10 ceumannan gu YAML Zen

A’ suidheachadh indents ann an Gedit.

A plugan àiteachan tarraing airson Gedit, a’ taisbeanadh àiteachan mar dotagan, a’ cur às do mhì-chinnt le ìrean indentation.

Ann am faclan eile, caith ùine ag ionnsachadh mun neach-deasachaidh as fheàrr leat. Faigh a-mach dè tha e fhèin no a choimhearsnachd leasachaidh a’ tabhann airson a bhith ag obair le YAML, agus cleachd na cothroman sin. Gu cinnteach cha bhith thu aithreachas air.

1. Cleachd lòchran

Mas fheàrr, bidh cànanan prògramaidh agus cànanan comharrachaidh a’ cleachdadh co-chòrdadh ro-innseach. Tha coimpiutairean math air ro-innse, agus is e sin as coireach gu bheil bun-bheachd loidhne-loidhne. Ma tha e air a dhol seachad ort anns na 40 bliadhna de bhith ann agus nach eil thu fhathast a’ cleachdadh loidhne-loidhne YAML, tha an t-àm ann yamllint fheuchainn.

Stàlaich yamllint Faodaidh tu am manaidsear pacaid Linux àbhaisteach a chleachdadh. Mar eisimpleir, ann an Red Hat Enterprise Linux 8 no Fedora tha e air a dhèanamh mar seo:

$ sudo dnf install yamllint

An uairsin bidh thu dìreach a’ ruith yamllint, a’ dol seachad air am faidhle YAML airson a sgrùdadh. Seo mar a tha e coltach ma bheir thu seachad faidhle le mearachd chun an loidhne-lìn:

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

Chan e na h-àireamhan air an taobh chlì an ùine, ach co-chomharran na mearachd: àireamh sreath is colbh. Is dòcha nach innis an tuairisgeul air a’ mhearachd dad dhut, ach tha fios agad gu cinnteach càite a bheil e. Dìreach thoir sùil air an àite seo sa chòd, agus is coltaiche gum fàs a h-uile dad soilleir.

Nuair nach lorg yamllint mearachdan sam bith ann am faidhle, chan eil dad air a chlò-bhualadh chun sgrion. Ma chuireas an leithid de shàmhchair eagal ort agus gu bheil thu ag iarraidh beagan a bharrachd fios air ais, faodaidh tu an loidhne a ruith leis an àithne mac-talla cumhach tro ampersand dùbailte (&&), mar seo:

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

Ann am POSIX, bidh ampersand dùbailte a 'losgadh ma tha agus a-mhàin ma thilleas an àithne roimhe 0. Agus tha yamllint dìreach a' tilleadh an àireamh de mhearachdan a chaidh a lorg, agus is e sin as coireach gu bheil an togail cumhach seo ag obair.

2. Sgrìobh ann am Python, chan e YAML

Ma tha YAML dha-rìribh gad chuir dheth, dìreach na sgrìobh ann, gu litearra. Tha e a’ tachairt gur e YAML an aon chruth a thuigeas an aplacaid. Ach eadhon anns a 'chùis seo, chan eil feum air faidhle YAML a chruthachadh. Sgrìobh air na tha thu ag iarraidh agus an uairsin tionndaidh. Mar eisimpleir, tha leabharlann math ann airson Python pyaml agus dà dhòigh tionndaidh: fèin-thionndadh agus tionndadh tro sgriobtaichean.

Fèin-thionndadh

Anns a ’chùis seo, tha am faidhle dàta cuideachd na sgriobt Python a ghineas YAML. Tha an dòigh seo nas freagarraiche airson seataichean dàta beaga. Bidh thu dìreach a’ sgrìobhadh an dàta JSON gu caochladair Python, ga ro-ràdh le stiùireadh in-mhalairt, agus aig deireadh an fhaidhle cuir trì loidhnichean ris gus an toradh a chuir an gnìomh.

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

A-nis ruithidh sinn am faidhle seo ann am Python agus gheibh sinn am faidhle 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

Tha seo gu tur dligheach YAML, ach bheir yamllint rabhadh dhut nach tòisich e le -. Uill, faodar seo a cheartachadh gu furasta le làimh no atharrachadh beagan ann an sgriobt Python.

Iompachadh tro sgriobtaichean

Anns a ’chùis seo, bidh sinn a’ sgrìobhadh ann an JSON an toiseach, agus an uairsin a ’ruith an inneal-tionndaidh mar sgriobt Python air leth, a bheir a-mach YAML mar thoradh. An coimeas ris an dòigh roimhe, tha an dòigh seo a’ fàs nas fheàrr, leis gu bheil an tionndadh air leth bhon dàta.

An toiseach, cruthaichidh sinn faidhle JSON example.json, mar eisimpleir, faodaidh tu a thoirt bho 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"
			}
		  }
		}
	  }
	}

An uairsin cruthaichidh sinn sgriobt tionndaidh sìmplidh agus sàbhailidh sinn e fon ainm json2yaml.py. Bidh an sgriobt seo a’ toirt a-steach an dà chuid modalan YAML agus JSON Python, agus a’ luchdachadh faidhle JSON a tha sònraichte don neach-cleachdaidh, a’ coileanadh an tionndaidh, agus a’ sgrìobhadh an dàta chun fhaidhle 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()

Sàbhail an sgriobt seo ann an slighe an t-siostaim agus ruith e mar a dh’ fheumar:

$ ~/bin/json2yaml.py example.json

3. Parse mòran agus gu tric

Uaireannan tha e feumail coimhead air duilgheadas bho cheàrn eadar-dhealaichte. Ma tha duilgheadas agad a’ riochdachadh nan dàimhean eadar an dàta agad ann an YAML, faodaidh tu a thionndadh gu sealach gu rudeigin nas eòlaiche.

Mar eisimpleir, ma tha thu comhfhurtail ag obair le liostaichean faclair no JSON, faodaidh tu YAML a thionndadh gu JSON le dìreach dà àithne anns an t-slige Python eadar-ghnìomhach. Canaidh sinn gu bheil faidhle YAML agad mydata.yaml, an uairsin is e seo cò ris a bhiodh e coltach:

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

Gheibh thu mòran eisimpleirean eile air a’ chuspair seo. A bharrachd air an sin, tha mòran de luchd-tionndaidh air-loidhne agus parsers ionadail rim faighinn. Mar sin na bi leisg an dàta ath-chruthachadh nuair nach fhaic thu ach smeuran do-thuigsinn ann.

4. Leugh na specs

A 'tilleadh gu YAML an dèidh fois fhada, tha e feumail tadhal iaml.org agus ath-leughadh na sònrachaidhean (specs). Ma tha duilgheadasan agad le YAML, ach nach d’ fhuair thu timcheall air an t-sònrachadh, tha an t-àm ann an suidheachadh seo a cheartachadh. Tha e iongantach furasta na specs a sgrìobhadh, agus tha na riatanasan co-chòrdadh air an nochdadh le àireamh mhòr de eisimpleirean ann an Caibideil 6.

5. Pseudo-configs

Nuair a bhios tu a’ sgrìobhadh leabhar no artaigil, tha e an-còmhnaidh feumail geàrr-chunntas a dhèanamh an-toiseach, co-dhiù ann an cruth clàr-innse. Tha e an aon rud le YAML. As dualtaiche, tha beachd agad air dè an dàta a dh'fheumar a sgrìobhadh ann am faidhle YAML, ach chan eil thu dha-rìribh a’ tuigsinn mar a cheanglas tu e ri chèile. Mar sin, mus dèan thu snaidheadh ​​​​YAML, tarraing pseudo-config.

Tha pseudo-config coltach ri còd-brèige, far nach fheum thu a bhith draghail mu structar no indentation, dàimhean pàrant-pàiste, dìleab agus neadachadh. Tha e an aon rud an seo: bidh thu a’ tarraing ath-aithrisean den dàta mar a dh’ èiricheas iad nad cheann.

10 ceumannan gu YAML Zen

Pseudo-config a’ liostadh prògramadairean (Martin agus Tabitha) agus na sgilean aca (cànanan prògramaidh: Python, Perl, Pascal agus Lisp, Fortran, Erlang, fa leth).

Às deidh dhut pseudo-config a tharraing air pìos pàipear, dèan sgrùdadh faiceallach air agus, ma tha a h-uile dad ann an òrdugh, cruth e ann an cruth faidhle YAML dligheach.

6. Na Tabs vs Spaces Dilema

Feumaidh tu an dileab fhuasgladh “tabs or spaces?”. Chan ann ann an seagh cruinneil, ach dìreach aig ìre na buidhne agad, no co-dhiù pròiseact. Chan eil e gu diofar a bheil seo a’ toirt a-steach a bhith a’ cleachdadh post-giollachd le sgriobt sed, a’ stèidheachadh luchd-deasachaidh teacsa air innealan luchd-prògramaidh, no a’ faighinn cuidhteasan gu h-iomlan a thaobh gèilleadh teann ri stiùireadh an linter a tha fo chunnart, ach tha a h-uile ball den sgioba agad a tha a-staigh. feumaidh aon dòigh no dòigh eile co-cheangailte ri YAML a bhith a’ cleachdadh àiteachan a-mhàin (mar a tha riatanach le sònrachadh YAML).

Ann an deasaiche teacsa àbhaisteach sam bith, faodaidh tu tabaichean fèin-cheart a rèiteachadh gu àireamh sònraichte de dh’ àiteachan, agus mar sin ar-a-mach prìomh luchd-leantainn tab chan fheum eagal a bhith ort.

Mar a tha fios math aig a h-uile neach-fuath YAML, chan fhaic thu an diofar eadar tabaichean agus àiteachan air an sgrion. Agus nuair nach eil rudeigin ri fhaicinn, mar as trice is e an rud mu dheireadh a bhios daoine a’ cuimhneachadh, às deidh dhaibh a bhith a’ rèiteach, a’ sgrùdadh agus a’ cuir às do gach duilgheadas eile a dh’ fhaodadh a bhith ann. Tha uair a thìde de dh’ ùine a thathar a’ caitheamh a’ lorg lùb clàrachaidh no bloc de dh’àiteachan dìreach a’ sgreuchail gu feum thu gu h-èiginneach poileasaidh a chruthachadh airson cleachdadh aon no tè eile, agus an uairsin cuir an gnìomh seic cruadhtan daingnichte airson gèilleadh ris (mar eisimpleir, tro dubhan Git airson a sparradh tro lòchran).

7. Tha nas lugha nas motha (no barrachd tha nas lugha)

Is toil le cuid de dhaoine sgrìobhadh ann an YAML oir tha e a’ cur cuideam air structar. Aig an aon àm, bidh iad gu gnìomhach a’ cleachdadh indentation gus blocaichean dàta a shoilleireachadh. Is e seòrsa de sgam a tha seo gus atharrais a dhèanamh air cànanan comharrachaidh a bhios a’ cleachdadh crìochan soilleir.

Seo eisimpleir de leithid de structar bho Sgrìobhainnean iomchaidh:

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

Dha cuid, tha an roghainn seo gan cuideachadh le bhith a’ rèiteach structar YAML nan cinn; dha feadhainn eile, air an làimh eile, bidh e gan nàrachadh le tòrr indents neo-riatanach, nam beachd-san.

Ach ma tha thu nad shealbhadair air an sgrìobhainn YAML agus gu bheil uallach ort airson a chumail suas, an uairsin thu fein agus thusa a mhàin Feumaidh mìneachadh mar a chleachdas tu indentation. Ma tha pleadhag mòr air do bhuaireadh, cùm e cho ìosal ‘s as urrainn dhut a rèir sònrachadh YAML. Mar eisimpleir, faodar am faidhle gu h-àrd bho na sgrìobhainnean Ansible ath-sgrìobhadh mar seo gun chall sam bith:

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

8. Cleachd beàrnan

Ma nì thu an-còmhnaidh na h-aon mhearachdan nuair a lìonas tu faidhle YAML, tha e ciallach teamplaid a chuir a-steach mar bheachd. An uairsin an ath thuras faodaidh tu dìreach an teamplaid seo a chopaigeadh agus fìor dhàta a chuir a-steach an sin, mar eisimpleir:

---
# - <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. Cleachd rudeigin eadar-dhealaichte

Mura h-eil bacadh sam bith aig an aplacaid ort, is dòcha gum b’ fhiach an YAML atharrachadh gu cruth eile. Thar ùine, faodaidh faidhlichean rèiteachaidh a dhol thairis orra fhèin agus an uairsin tha e nas fheàrr an tionndadh gu sgriobtaichean sìmplidh ann an Lua no Python.

Is e rud math a th’ ann an YAML a tha mòran dhaoine dèidheil air airson cho beag agus cho sìmplidh ‘s a tha e, ach tha e fada bhon aon inneal san arsenal agad. Mar sin uaireannan faodaidh tu a dhiùltadh. Tha e furasta leabharlannan parsaidh a lorg airson YAML, mar sin ma tha thu a’ tabhann roghainnean imrich furasta, mairidh an luchd-cleachdaidh agad an teip seo gu ìre gun phian.

Mura h-urrainn dhut a dhèanamh às aonais YAML, gabh na 10 molaidhean sin agus faigh thairis air nach toil leat YAML uair is uair!

Source: www.habr.com

Cuir beachd ann