10 nga taahiraa ki te YAML Zen

E aroha ana tatou katoa ki a Ansible, engari ko Ansible te YAML. He maha nga whakatakotoranga mo nga konae whirihoranga: nga rarangi uara, takirua tawhā-uara, nga konae INI, YAML, JSON, XML me te maha atu. Heoi, he maha nga take mai i era katoa, ka kiia he uaua rawa te YAML. Ina koa, ahakoa te iti o te whakamaarama me te kaha whakamīharo mo te mahi me nga uara aroākapa, ka hoha te wetereo YAML me tana ahua Python-rite ki te nuku.

10 nga taahiraa ki te YAML Zen

Mena ka whakapataritari a YAML i a koe, ka taea e koe—a me tika koe! – tangohia nga mahi 10 e whai ake nei hei whakaiti i to pouri ki te taumata e manakohia ana, ka aroha ki a YAML. E tika ana mo tenei rarangi, ka tatauhia a maatau tohutohu tekau mai i te wahanga, ka taapirihia te whakaaroaro me nga mahi wairua i runga i te hiahia 😉

0. Kia mahi to etita

Ahakoa he aha te etita tuhinga kei a koe, he kotahi pea te mono mo te mahi me YAML. Ki te kore koe e whai tetahi, kimihia me te whakauru tonu. Ko te wa e pau ana ki te rapu me te whakarite ka utua nga wa maha i nga wa katoa ka whakatika koe i te YAML.

Hei tauira, ētita Atom tautoko ana i te YAML ma te taunoa, engari mo GNU Emacs me whakauru e koe etahi atu kete, hei tauira, aratau-yaml.

10 nga taahiraa ki te YAML Zen

Emacs i te aratau YAML me te whakaatu i nga waahi.

Mena karekau he aratau YAML to etita tino pai, na etahi o nga raru ka taea te whakatau ma te mahi me nga tautuhinga. Hei tauira, karekau he aratau YAML te ētita kuputuhi GNOME paerewa a Gedit, engari ma te taunoa ka miramirahia te wetereo YAML ka taea e koe te whirihora i nga mahi me nga nuku:

10 nga taahiraa ki te YAML Zen

Tautuhi nuku ki Gedit.

He mono mokowākohi mo Gedit, ka whakaatu i nga mokowhiti hei ira, ka whakakore i nga rangirua me nga taumata nuku.

Arā, whakapau wā ki te ako mō tō ētita tino pai. Rapua he aha tana, tana hapori whanaketanga ranei hei tuku mo te mahi me YAML, ka whakamahi i aua ahuatanga. Kare rawa koe e pouri.

1. Whakamahia he whiti

Ko te tikanga, ko nga reo whakahōtaka me nga reo tohu e whakamahi ana i te wetereo matapae. He pai nga rorohiko ki te matapae, na reira te kaupapa o pukapuka. Mena i roto i nga tau 40 o tona oranga kua pahemo atu i a koe kaore ano koe e whakamahi i te YAML linter, kua tae ki te wa ki te whakamatau i te yamllint.

Tāuta yamllint Ka taea e koe te whakamahi i te kaiwhakahaere putea Linux paerewa. Hei tauira, in Red Hat Enterprise Linux 8 ranei Fedora kua oti te mahi penei:

$ sudo dnf install yamllint

Na ka rere noa koe i te yamllint, ka tukuna te konae YAML hei tirotiro. Ko te ahua tenei ki te tuku koe i tetahi konae me te hapa ki te rarangi:

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

Ko nga tau kei te taha maui ehara i te wa, engari ko nga taunga o te hapa: te rarangi me te tau pou. Ko te whakaahuatanga o te hapa kaore pea e korero ki a koe, engari kei te mohio koe kei hea. Titiro noa ki tenei waahi i roto i te waehere, ka tino marama nga mea katoa.

Ki te kore e kitea e yamllint he hapa i roto i tetahi konae, kaore he mea ka taia ki te mata. Mena ka mataku koe i te wahangu ka hiahia koe ki etahi atu urupare, katahi ka taea e koe te whakahaere i te riipene me te whakahau echo conditional ma te rua ampersand (&&), penei:

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

I roto i te POSIX, ka ahi te ampersand rua mena ka hoki mai te whakahau o mua ki te 0. Ka whakahokia noa e yamllint te maha o nga hapa i kitea, na reira ka mahi katoa tenei hanganga here.

2. Tuhia ki te Python, kaua ki te YAML

Mena ka tino pouri koe a YAML, kaua e tuhi ki roto, mooni. Ka tupu ko YAML anake te whakatakotoranga e marama ana te tono. Engari ahakoa i tenei keehi, kaore e tika ki te hanga i tetahi konae YAML. Tuhia ki runga i taau e pai ai ka huri. Hei tauira, he whare pukapuka nui mo Python pyyaml me nga tikanga hurihanga e rua: te huri-whaiaro me te hurihanga ma nga tuhinga.

Te hurihanga whaiaro

I tenei keehi, ko te konae raraunga he tuhinga Python e whakaputa ana i te YAML. He pai rawa atu tenei tikanga mo nga huinga raraunga iti. Ka tuhi noa koe i nga raraunga JSON ki roto i te taurangi Python, ka korerohia me te tohutohu kawemai, a ki te mutunga o te konae ka taapirihia nga raina e toru hei whakatinana i te putanga.

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

Inaianei ka whakahaerehia e matou tenei konae ki te Python ka whiwhi i te konae 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

He YAML tino tika tenei, engari ka whakatupato a yamllint ki a koe e kore e timata ki te -. Ana, ka ngawari te whakatika a-ringa, te whakarereke paku ranei i roto i te tuhinga Python.

Te hurihanga ma nga tuhinga

I tenei keehi, ka tuhi tuatahi matou ki a JSON, ka whakahaere i te kaitahuri hei tuhinga Python motuhake, e whakaputa ana i te YAML hei putanga. Ina whakaritea ki te tikanga o mua, he pai ake te pauna o tenei tikanga, no te mea he wehe ke te huringa mai i nga raraunga.

Tuatahi, me hanga he kōnae JSON example.json, hei tauira, ka taea e koe te tango mai 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"
			}
		  }
		}
	  }
	}

Na ka hanga e matou he tuhinga kaitahuri ngawari ka tiakina i raro i te ingoa json2yaml.py. Ko tenei tuhinga ka kawemai i nga waahanga YAML me JSON Python, ka utaina he konae JSON kua tohua e te kaiwhakamahi, ka mahi i te hurihanga, ka tuhi i nga raraunga ki te konae 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()

Tiakina tenei tuhinga ki te ara punaha ka whakahaere ina hiahiatia:

$ ~/bin/json2yaml.py example.json

3. Porohia kia maha, kia maha

I etahi wa ka pai te titiro ki tetahi raruraru mai i tetahi koki rereke. Mena kei te raru koe ki te whakaatu i nga hononga i waenga i o raraunga i roto i te YAML, ka taea e koe te huri mo te wa poto ki tetahi mea mohio ake.

Hei tauira, ki te pai koe ki te mahi me nga rarangi papakupu, JSON ranei, ka taea e koe te huri i te YAML ki te JSON me nga whakahau e rua noa i roto i te anga Python tauwhitiwhiti. Me kii kei a koe he konae YAML mydata.yaml, ka penei te ahua:

$ 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 kitea e koe etahi atu tauira mo tenei kaupapa. I tua atu, he maha nga kaitahuri ipurangi me nga parser rohe e waatea ana. No reira kaua koe e whakaroa ki te whakahōputu i nga raraunga ka kite koe i te whakahiatotanga kore e marama ki roto.

4. Panuitia nga korero

Ka hoki ki YAML i muri i te okiokinga roa, he pai ki te toro yaml.org me te panui ano i nga korero (nga korero). Mena he uaua ki a koe mo te YAML, engari kaore koe i tae ki nga korero, kua tae ki te wa ki te whakatika i tenei ahuatanga. He tino ngawari te tuhi i nga tohu, a ka whakaatuhia nga whakaritenga wetereo me te maha o nga tauira i roto Wāhanga 6.

5. Nga whirihora pseudo

I te wa e tuhi ana i te pukapuka, i te tuhinga korero ranei, he pai tonu te tuhi i tetahi whakahuahua tuatahi, i te iti rawa ki te ahua o te ripanga ihirangi. He pera ano me YAML. Ko te mea pea, kei a koe te whakaaro he aha nga raraunga e tika ana kia tuhia ki te konae YAML, engari kaore koe e tino mohio ki te hono atu ki a raatau ano. Na reira, i mua i te whakairo YAML, tuhia he pseudo-config.

He rite te pseudo-config ki te pseudo-code, karekau koe e manukanuka ki te hanganga, ki te nuku ranei, ki te whanaungatanga matua-tamariki, tuku iho me te kohanga. He rite ano ki konei: ka tuhia e koe nga taapiri o nga raraunga ka puta ake i to mahunga.

10 nga taahiraa ki te YAML Zen

Pseudo-config whakarārangi hötaka (Martin me Tabitha) me o raua pukenga (reo hotaka: Python, Perl, Pascal me Lisp, Fortran, Erlang, ia).

Whai muri i te tuhi pseudo-config ki runga i tetahi pepa, ata tirotirohia, a, ki te pai nga mea katoa, whakahōputuhia ki te ahua o te konae YAML whaimana.

6. Nga Ripa me nga Mokowā Matawaenga

Me whakaoti e koe te matawaenga "ripa, mokowhiti ranei?". Ehara i te tikanga o te ao, engari i te taumata o to whakahaere, i te iti rawa ranei o te kaupapa. Kare he aha mena ko te whakamahi i muri i te tukatuka me te tuhi tuhi, te whakatu i nga kaiwhakatika tuhinga ki nga miihini a te hunga hötaka, me te tango i nga rīhiti a te katoa o te ū ki nga tohutohu a te papa i raro i te riri o te pananga, engari ko nga mema katoa o to roopu kei roto Ko tetahi huarahi, tetahi atu ranei e pa ana ki te YAML me whakamahi mokowhiti anake (i runga i te whakaritenga a te YAML).

I roto i tetahi ētita kuputuhi noa, ka taea e koe te whirihora i nga ripa tika-aunoa ki te maha o nga waahi kua tohua, na reira ko te tutu o te hunga whai matua. Tapapa e kore koe e wehi.

I te mea e mohio pai ana nga kaikino YAML katoa, kaore koe e kite i te rereketanga o nga ripa me nga waahi kei runga i te mata. A, ki te kore e kitea tetahi mea, ko te mea whakamutunga ka maharahia e te tangata, i muri i ta raatau whakariterite, tirotirohia me te whakakore i nga raru katoa. Ko te haora o te wa e rapu ana mo te anau ripanga, poraka mokowhiti ranei, ka tangi noa koe me tere koe ki te hanga kaupapa here mo te whakamahi i tetahi, tetahi atu ranei, katahi ka whakatinanahia he tirotiro raima whakakaha mo te ū ki taua mea (hei tauira, ma te he matau Git ki te tohe ki roto i te riu).

7. He iti ake (he iti ake ranei)

He pai ki etahi taangata ki te tuhi i roto i te YAML na te mea e whakanui ana i te hanganga. I te wa ano, ka kaha te whakamahi i te nuku hei whakanui i nga poraka o nga raraunga. He momo tinihanga tenei ki te peehi i nga reo tohu e whakamahi ana i nga tohu tohu.

Anei tetahi tauira o taua hanganga mai Tuhinga ka taea:

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

Mo etahi, ko tenei waahanga ka awhina i a raatau ki te whakariterite i te hanganga YAML ki o raatau mahunga; mo etahi atu, engari, ka whakapataritari i a raatau me te maha o nga mea kaore e tika ana, ki o raatau whakaaro.

Engari ki te mea ko koe te rangatira o te tuhinga YAML me te kawenga mo te pupuri, na ko koe me koe anake me tautuhi me pehea te whakamahi nuku. Mena kei te hoha koe ki te kapi nui, kia mau ki te iti rawa e taea ana e ai ki te tohu YAML. Hei tauira, ko te konae kei runga ake mai i te tuhinga Ansible ka taea te tuhi ano penei me te kore e ngaro:

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

8. Whakamahia nga waahi

Mena ka whakahoki ano koe i nga hapa i te wa e whakakiia ana te konae YAML, he mea tika ki te whakauru i tetahi tauira ki roto hei korero. I muri mai ka taea e koe te kape noa i tenei tauira ka whakauru i nga raraunga tuuturu ki reira, hei tauira:

---
# - <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. Whakamahia he mea rereke

Mena karekau he herenga o te tono ki runga i a koe, katahi ka pai ke te whakarereke i te YAML ki tetahi whakatakotoranga rereke. Ka roa te wa, ka nui ake nga konae whirihoranga, katahi ka pai ake te huri ki nga tuhinga ngawari ki te Lua, ki te Python ranei.

He mea pai a YAML e arohaina ana e te tini o nga tangata mo tona iti me te ngawari, engari he tawhiti noa atu i te taputapu anake i roto i to taonga. Na i etahi wa ka taea e koe te whakakore. He ngawari te kimi whare pukapuka parsing mo YAML, na mena ka tukuna e koe nga whiringa hekenga ngawari, ka ora tonu nga kaiwhakamahi i tenei rahungatanga.

Mena kaore e taea e koe te mahi me te kore YAML, katahi ka mau ki enei tohutohu 10 ka hinga i to kore pai ki a YAML mo te katoa!

Source: will.com

Tāpiri i te kōrero