Izinyathelo eziyi-10 ukuya ku-YAML Zen

Sonke siyayithanda i-Ansible, kodwa i-Ansible yi-YAML. Kunamafomethi amaningi wamafayela okumisa: izinhlu zamanani, amapheya enani lepharamitha, amafayela e-INI, i-YAML, i-JSON, i-XML namanye amaningi. Kodwa-ke, ngenxa yezizathu ezimbalwa kuzo zonke, i-YAML ivame ukubhekwa njengenzima kakhulu. Ikakhulukazi, naphezu kwe-minimalism eqabulayo namandla ahlaba umxhwele okusebenza ngamavelu e-hierarchical, i-syntax ye-YAML ingacasula ngendlela yayo efana ne-Python yokuhlehlisa.

Izinyathelo eziyi-10 ukuya ku-YAML Zen

Uma i-YAML ikucasula, ungakwaziβ€”futhi kufanele! - thatha lezi zinyathelo ezingu-10 ezilandelayo ukuze wehlise ukukhungatheka kwakho kube sezingeni elamukelekayo futhi uthandane ne-YAML. Njengoba kufanele lolu hlu, izeluleko zethu eziyishumi zizobalwa kusukela ekuqaleni, sizokwengeza ukuzindla nemikhuba engokomoya ngokuthanda kwakho πŸ˜‰

0. Yenza umhleli wakho asebenze

Akunandaba ukuthi unamuphi umhleli wombhalo, cishe kukhona i-plugin eyodwa yokusebenza ne-YAML. Uma ungenayo, yithole futhi uyifake ngokushesha. Isikhathi esichithwe ukusesha nokusetha sizokhokha izikhathi eziningi ngaso sonke isikhathi lapho kufanele uhlele i-YAML.

Isibonelo, umhleli I-athomu isekela i-YAML ngokuzenzakalelayo, kodwa ku-GNU Emacs kuzodingeka ufake amaphakheji engeziwe, isibonelo, imodi ye-yaml.

Izinyathelo eziyi-10 ukuya ku-YAML Zen

Ama-Emacs kumodi ye-YAML nezikhala zokubonisa.

Uma isihleli osithandayo singenayo imodi ye-YAML, khona-ke ezinye zezinkinga zingaxazululwa ngokusebenza nezilungiselelo. Isibonelo, isihleli sombhalo se-GNOME esijwayelekile i-Gedit ayinayo imodi ye-YAML, kodwa ngokuzenzakalelayo igqamisa i-syntax ye-YAML futhi ikuvumela ukuthi ulungiselele umsebenzi ngokuhlehlisa:

Izinyathelo eziyi-10 ukuya ku-YAML Zen

Ukusetha ama-indenti ku-Gedit.

I-plugin izindawo zokudonsa ku-Gedit, ibonisa izikhala njengamachashazi, isusa ukungaqondakali ngamaleveli wokuhlehlisa.

Ngamanye amazwi, chitha isikhathi ufunda ngomhleli wakho owuthandayo. Thola ukuthi yena noma umphakathi wakhe othuthukayo unganikela ngani ekusebenzeni ne-YAML, futhi usebenzise lezo zici. Nakanjani ngeke uzisole.

1. Sebenzisa i-linter

Ngokufanelekile, izilimi zokuhlela nezilimi zokumaka zisebenzisa i-syntax ebikezelwayo. Amakhompiyutha ayakwazi ukubikezela, yingakho umqondo wokuthi linter. Uma eminyakeni engama-40 yokuba khona kwayo idlule kuwe futhi ungasebenzisi i-linter ye-YAML, sekuyisikhathi sokuzama i-yamllint.

Faka yamllint Ungasebenzisa isiphathi sephakheji se-Linux esijwayelekile. Ngokwesibonelo, ku I-Red Hat Enterprise Linux 8 noma Fedora kwenziwa kanje:

$ sudo dnf install yamllint

Bese uvele usebenzise i-yamllint, uyidlulisele ifayela le-YAML ukuze ulihlole. Lokhu kubukeka kanjani uma udlulisela ifayela elinephutha ku-linter:

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

Izinombolo ezingakwesokunxele akuzona isikhathi, kodwa izixhumanisi zephutha: umugqa nenombolo yekholomu. Incazelo yephutha ingase ingakutsheli lutho, kodwa wazi kahle ukuthi ikuphi. Bheka nje le ndawo kukhodi, futhi cishe yonke into izocaca.

Uma i-yamllint ingatholi phutha kufayela, akukho lutho oluphrintwa esikrinini. Uma ukuthula okunjalo kukwethusa futhi ufuna impendulo eyengeziwe, ungaqhuba i-linter ngomyalo we-echo onemibandela nge-ampersand ephindwe kabili (&&), kanje:

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

Ku-POSIX, i-ampersand ephindwe kabili ivutha uma futhi kuphela uma umyalo owanduleleyo ubuyisela u-0. Futhi i-yamllint ivele ibuyisele inani lamaphutha atholiwe, yingakho konke lokhu kwakhiwa okunemibandela kusebenza.

2. Bhala ngePython, hhayi i-YAML

Uma i-YAML ikucasula ngempela, ungavele ubhale kuyo, ngokwezwi nezwi. Kuyenzeka ukuthi i-YAML iwukuphela kwefomethi eqondwa uhlelo lokusebenza. Kodwa nakulokhu, akudingekile ukudala ifayela le-YAML. Bhala kulokho okuthandayo bese uyakuguqula. Isibonelo, kunomtapo wezincwadi omkhulu wePython i-pyyaml kanye nezindlela ezimbili zokuguqula: ukuziguqulela kanye nokuguqula ngemibhalo.

Ukuziguqula

Kulokhu, ifayela ledatha liphinde libe iskripthi sePython esikhiqiza i-YAML. Le ndlela ifaneleka kakhulu kumasethi wedatha amancane. Umane ubhale idatha ye-JSON kokuguquguqukayo kwePython, uyendulela ngomyalelo wokungenisa, futhi ekugcineni kwefayela wengeze imigqa emithathu ukuze usebenzise okukhiphayo.

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

Manje sisebenzisa leli fayela ku-Python futhi sithola ifayela le-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

Lena i-YAML evumelekile ngokuphelele, kodwa i-yamllint izokuxwayisa ukuthi ayiqali ngokuthi -. Hhayi-ke, lokhu kungalungiswa kalula ngesandla noma kuguqulwe kancane kumbhalo wePython.

Ukuguqulwa ngemibhalo

Kulokhu, siqale sibhale ku-JSON, bese sisebenzisa isiguquli njengombhalo ohlukile wePython, okhiqiza i-YAML njengokuphumayo. Uma kuqhathaniswa nendlela yangaphambilini, le ndlela ilinganisa kangcono, njengoba ukuguqulwa kuhlukile kudatha.

Okokuqala, ake sidale ifayela le-JSON elithi example.json, isibonelo, ongalithatha kulo 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"
			}
		  }
		}
	  }
	}

Ngemuva kwalokho sizokwakha umbhalo wokuguqula kalula futhi usilondoloze ngaphansi kwegama elithi json2yaml.py. Lesi script singenisa womabili amamojula e-YAML ne-JSON Python, futhi silayisha ifayela le-JSON elishiwo umsebenzisi, senza ukuguqulwa, futhi sibhala idatha kufayela le-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()

Londoloza lesi skripthi endleleni yesistimu futhi uyiqalise njengoba kudingeka:

$ ~/bin/json2yaml.py example.json

3. Hlaziya kakhulu futhi kaningi

Kwesinye isikhathi kuyasiza ukubheka inkinga ngelinye iso. Uma unenkinga yokumela ubudlelwano phakathi kwedatha yakho ku-YAML, ungayiguqula okwesikhashana ibe into eyaziwa kakhulu.

Isibonelo, uma ukhululekile ukusebenza ngohlu lwesichazamazwi noma i-JSON, ungakwazi ukuguqula i-YAML iye ku-JSON ngemiyalo emibili nje kugobolondo lePython elisebenzisanayo. Ake sithi unefayela le-YAML elithi mydata.yaml, bese libukeka kanje:

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

Ungathola ezinye izibonelo eziningi kulesi sihloko. Ngaphezu kwalokho, kuneziguquli eziningi eziku-inthanethi nezihlungi zendawo ezitholakalayo. Ngakho-ke ungangabazi ukufometha kabusha idatha uma ubona ingxubevange engaqondakali kuyo.

4. Funda imininingwane

Ukubuyela ku-YAML ngemva kwekhefu elide, kuyasiza ukuvakashela yaml.org bese ufunda kabusha imininingwane (imininingwane). Uma unobunzima nge-YAML, kodwa ungakafiki ekucacisweni, sekuyisikhathi sokulungisa lesi simo. Imininingwane ibhalwe ngendlela emangalisayo, futhi izidingo ze-syntax ziboniswa ngenani elikhulu lezibonelo ku Isahluko 6.

5. I-Pseudo-configs

Lapho ubhala incwadi noma i-athikili, kuhlale kuwusizo ukuqala ukudweba uhlaka olwandulelayo, okungenani ngendlela yethebula lokuqukethwe. Kuyafana nange-YAML. Kungenzeka ukuthi unombono wokuthi iyiphi idatha edinga ukubhalwa efayeleni le-YAML, kodwa awuqondi ngempela ukuthi ungayixhuma kanjani. Ngakho-ke, ngaphambi kokubaza i-YAML, dweba i-pseudo-config.

I-Pseudo-config ifana nekhodi mbumbulu, lapho ungadingeki ukhathazeke ngesakhiwo noma ukuhlehlisa, ubudlelwano bomzali nengane, ifa kanye nokuzalela. Kuyafana lapha: udweba ukuphindwaphindwa kwedatha njengoba kuvela ekhanda lakho.

Izinyathelo eziyi-10 ukuya ku-YAML Zen

Abahleli bohlu lwe-Pseudo-config (uMartin noTabitha) namakhono abo (izilimi zokuhlela: iPython, iPerl, iPascal neLisp, iFortran, i-Erlang, ngokulandelana).

Ngemva kokudweba i-pseudo-config ephepheni, ihlaziye ngokucophelela futhi, uma yonke into ihlelekile, ifomethe ngendlela yefayela elivumelekile le-YAML.

6. Amathebhu vs. Inkinga Yezikhala

Kuzodingeka uxazulule le nkinga "amathebhu noma izikhala?". Hhayi ngomqondo womhlaba wonke, kodwa kuphela ezingeni lenhlangano yakho, noma okungenani iphrojekthi. Akunandaba ukuthi lokhu kuhlanganisa ukusebenzisa ukucubungula ngemuva kweskripthi se-sed, ukumisa abahleli bombhalo emishinini yabahleli, noma ukuthatha amaresidi okuhambisana ngokuqinile nemiyalelo ye-linter ngaphansi kosongo lokuxoshwa, kodwa wonke amalungu ethimba lakho indlela eyodwa noma enye ehlobene ne-YAML kufanele isebenzise izikhala kuphela (njengoba kudingwa yincazelo ye-YAML).

Kunoma isiphi isihleli sombhalo esivamile, ungamisa amathebhu azilungise ngokuzenzakalelayo enanini elishiwo lezikhala, ukuze kuhlubuke abalandeli abakhulu. Ithebhu akudingekile ukuba wesabe.

Njengoba wonke umuntu ozonda we-YAML azi kahle, awukwazi ukubona umehluko phakathi kwamathebhu nezikhala esikrinini. Futhi lapho okuthile kungabonakali, ngokuvamile kuba yinto yokugcina abantu abayikhumbulayo, ngemva kokuba sebeyilungisile, bahlola futhi baqeda zonke ezinye izinkinga ezingase zibe khona. Ihora lesikhathi elichithwe kuthungathwa ijika lethebula noma ibhulokhi lezikhala livele likhale ngokuthi udinga ngokushesha ukudala inqubomgomo ezosetshenziswa eyodwa noma enye, bese usebenzisa isheke eliqinisiwe lokukhonkolo ukuze lihambisane nayo (isibonelo, ngokusebenzisa i-Git hook ukuyiphoqa nge-linter).

7. Okuncane kuningi (noma ngaphezulu kuncane)

Abanye abantu bayathanda ukubhala nge-YAML ngoba igcizelela ukwakheka. Ngesikhathi esifanayo, basebenzisa ukuhlehlisa ukuze bagqamise amabhulokhi wedatha. Lolu uhlobo lomkhonyovu wokulingisa izilimi zemakhaphu ezisebenzisa i-delimiters esobala.

Nasi isibonelo sesakhiwo esinjalo esivela Amadokhumenti adingekayo:

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

Kwabanye, le nketho ibasiza ukuthi bahlele ukwakheka kwe-YAML emakhanda abo; kwabanye, ngokuphambene nalokho, ibacasula ngokuningi okungadingekile, ngokombono wabo, ama-indent.

Kodwa uma ungumnikazi wedokhumenti ye-YAML futhi unesibopho sokuyigcina, khona-ke wena kanye nawe kuphela kufanele ichaze indlela yokusebenzisa i-indentation. Uma ucasulwa amaphedi amakhulu, kugcine kuncane ngangokunokwenzeka ngokuya ngencazelo ye-YAML. Isibonelo, ifayela elingenhla elivela kumadokhumenti e-Ansible lingaphinda libhalwe kanje ngaphandle kokulahlekelwa:

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

8. Sebenzisa izikhala

Uma uphindaphinda amaphutha afanayo njalo lapho ugcwalisa ifayela le-YAML, kunengqondo ukufaka isifanekiso kulo njengamazwana. Ngokuzayo ungamane ukopishe lesi sifanekiso bese ufaka idatha yangempela lapho, isibonelo:

---
# - <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. Sebenzisa okuhlukile

Uma uhlelo lokusebenza lungakubambeli mkhuba, kungase kudingeke ukuthi uguqule i-YAML ibe yifomethi ehlukile. Ngokuhamba kwesikhathi, amafayela okucupha angakhula ngokwawo futhi kungcono ukuwaguqula abe imibhalo elula ku-Lua noma iPython.

I-YAML iyinto enhle abantu abaningi abayithandayo ngobuncane bayo nobulula, kodwa ikude nethuluzi okuwukuphela kwalo ku-arsenal yakho. Ngakho ngezinye izikhathi ungayenqaba. Imitapo yolwazi yokuhlaziya itholakala kalula ku-YAML, ngakho-ke uma unikeza izinketho zokuthutha ezilula, abasebenzisi bakho bazosinda kulokhu kwehluleka ngokuqhathaniswa ngokulingana nobuhlungu.

Uma ungeke ukwazi ukwenza ngaphandle kwe-YAML, thatha lawa macebiso ayi-10 futhi unqobe ukungathandi kwakho i-YAML unomphela!

Source: www.habr.com

Engeza amazwana