Mehato e 10 ho YAML Zen

Kaofela re rata Ansible, empa Ansible ke YAML. Ho na le lifomate tse ngata bakeng sa lifaele tsa tlhophiso: manane a boleng, lipara tsa boleng ba parameter, lifaele tsa INI, YAML, JSON, XML le tse ling tse ngata. Leha ho le joalo, ka mabaka a 'maloa ho ona kaofela, YAML hangata e nkuoa e le thata haholo. Haholo-holo, leha e na le minimalism e khathollang le bokhoni bo tsotehang ba ho sebetsa ka litekanyetso tsa maemo a phahameng, syntax ea YAML e ka khopisa ka mokhoa oa eona oa ho kenya letsoho o kang oa Python.

Mehato e 10 ho YAML Zen

Haeba YAML e u khopisa, u ka khona, 'me u lokela ho etsa joalo! - Nka mehato e 10 e latelang ho fokotsa pherekano ea hau ho fihla boemong bo amohelehang 'me u ratane le YAML. Joalo ka ha lethathamo lena le tšoanela, malebela a rona a leshome a tla baloa ho tloha qalong, re tla eketsa ho thuisa le litloaelo tsa moea ka thato 😉

0. Etsa hore mohlophisi oa hau a sebetse

Ha ho na taba hore na u na le mohlophisi oa mongolo ofe, mohlomong ho na le plugin e le 'ngoe ea ho sebetsa le YAML. Haeba ha u na eona, e fumane 'me u e kenye hang-hang. Nako e sebelisitsoeng ho batla le ho e hlophisa e tla lefa makhetlo a mangata nako le nako ha u tlameha ho hlophisa YAML.

Ka mohlala, mohlophisi Atom e ts'ehetsa YAML ka boiketsetso, empa bakeng sa GNU Emacs o tla tlameha ho kenya liphutheloana tse ling, mohlala, yaml-mokhoa.

Mehato e 10 ho YAML Zen

Li-Emacs ka mokhoa oa YAML le libaka tse bonts'ang.

Haeba mohlophisi oa hau eo u mo ratang a se na mokhoa oa YAML, mathata a mang a ka rarolloa ka ho sebetsa le li-setting. Mohlala, sengoloa se tloaelehileng sa GNOME Gedit ha se na mokhoa oa YAML, empa ka ho sa feleng se totobatsa syntax ea YAML mme e u lumella ho hlophisa mosebetsi ka li-indentations:

Mehato e 10 ho YAML Zen

Ho beha li-indent ho Gedit.

A plugin libaka tsa ho hula bakeng sa Gedit, e bonts'a libaka e le matheba, e tlosa liphapang tse nang le maemo a ho indentation.

Ka mantsoe a mang, qeta nako u ithuta ka mohlophisi eo u mo ratang. Fumana seo eena kapa sechaba sa habo sa nts'etsopele se fanang ka sona bakeng sa ho sebetsa le YAML, 'me u sebelise likarolo tseo. Ka sebele u ke ke ua ikoahlaea.

1. Sebelisa linter

Ka nepo, lipuo tsa mananeo le lipuo tsa markup li sebelisa syntax e ka boleloang esale pele. Lik'homphieutha li ntle ka ho tseba esale pele, ke ka lebaka leo mohopolo oa litera. Haeba lilemong tse 40 tsa ho ba teng ha eona e fetile 'me u ntse u sa sebelise linter ea YAML, joale ke nako ea ho leka yamllint.

Kenya lamllint U ka sebelisa mookameli oa sephutheloana se tloaelehileng sa Linux. Ka mohlala, ka Linux ea Red Hat Enterprise 8 kapa Fedora e entsoe tjena:

$ sudo dnf install yamllint

Ebe o matha yamllint, o e fetisetsa faele ea YAML ho e hlahloba. Sena ke kamoo se shebahalang kateng ha u fetisetsa faele e nang le phoso ho linter:

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

Linomoro tse ka letsohong le letšehali ha se nako, empa ke likhokahano tsa phoso: mola le nomoro ea mohala. Tlhaloso ea phoso e ka 'na ea se ke ea u bolella letho, empa u tseba hantle hore na e hokae. Sheba feela sebaka sena ka khoutu, 'me mohlomong ntho e' ngoe le e 'ngoe e tla hlaka.

Ha yamllint e sa fumane liphoso faeleng, ha ho letho le hatisoang skrineng. Haeba khutso e joalo e u tšosa 'me u batla maikutlo a eketsehileng, joale u ka tsamaisa linter ka taelo ea echo e nang le maemo ka li-ampersand tse peli (&&), tse kang ena:

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

Ho POSIX, ampersand e habeli e chesa haeba feela taelo e fetileng e khutlisa 0. 'Me yamllint e khutlisa palo ea liphoso tse fumanoeng, ke ka lebaka leo kaho ena eohle e nang le maemo e sebetsang.

2. Ngola ka Python, eseng YAML

Haeba YAML e hlile e u khopisa, u se ke ua ngola ho eona, ka ho toba. Hoa etsahala hore YAML ke eona feela sebopeho seo sesebelisoa se se utloisisang. Empa le boemong bona, ha ho hlokahale ho theha faele ea YAML. Ngola ho seo u se ratang ebe u se fetola. Mohlala, ho na le laeborari e kholo ea Python pyyaml le mekhoa e 'meli ea ho sokoloha: ho iphetola le ho fetolela ka mangolo.

Boiketsi ba ho sokoloha

Tabeng ena, faele ea data le eona ke script ea Python e hlahisang YAML. Mokhoa ona o loketse ka ho fetisisa bakeng sa lihlopha tse nyenyane tsa data. U ngola feela data ea JSON hore e be mofuta oa Python, u e kenye pele ka taelo ea ho kenya, 'me qetellong ea faele u kenye mela e meraro ho kenya ts'ebetsong sephetho.

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

Joale re tsamaisa faele ena ho Python mme re fumana file ea 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

Ena ke YAML e sebetsang hantle, empa yamllint e tla u lemosa hore ha e qale ka -. Che, sena se ka lokisoa habonolo ka letsoho kapa sa fetoloa hanyane ka har'a script ea Python.

Phetoho ka scripts

Tabeng ena, re qala ho ngola ka JSON, ebe re tsamaisa converter e le sengoloa se arohaneng sa Python, se hlahisang YAML joalo ka tlhahiso. Ha ho bapisoa le mokhoa o fetileng, mokhoa ona o lekanya hamolemo, kaha phetoho e arohane le data.

Taba ea pele, ha re theheng faele ea JSON mohlala.json, mohlala, u ka e nka ho tloha 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"
			}
		  }
		}
	  }
	}

Ebe re theha mongolo o bonolo oa converter ebe o o boloka tlasa lebitso json2yaml.py. Sengoliloeng sena se kenya limojule tsa YAML le JSON Python ka bobeli, 'me se laela faele ea JSON e boletsoeng ke mosebelisi, se etsa phetoho, ebe se ngola lintlha faeleng ea 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()

Boloka sengoloa sena tseleng ea sistimi 'me u e tsamaise ha ho hlokahala:

$ ~/bin/json2yaml.py example.json

3. Hlalosa haholo le hangata

Ka linako tse ling ho molemo ho sheba bothata ka lehlakoreng le leng. Haeba u na le bothata ba ho emela likamano lipakeng tsa data ea hau ho YAML, u ka e fetola ka nakoana hore e be ntho e tloaelehileng.

Mohlala, haeba o phutholohile ho sebetsa ka manane a dikishinari kapa JSON, o ka fetolela YAML ho JSON ka litaelo tse peli feela ho khetla ea Python e sebetsanang. Ha re re u na le faele ea YAML mydata.yaml, ebe e shebahala tjena:

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

U ka fumana mehlala e meng e mengata sehloohong sena. Ho feta moo, ho na le li-converter tse ngata tsa inthanete le li-parser tsa lehae tse fumanehang. Kahoo u seke oa tsilatsila ho fetola data ha u bona ho sa utloahaleng feela ho eona.

4. Bala litlhaloso

Ho khutlela YAML kamora khefu e telele, ho bohlokoa ho etela yaml.org 'me u bale hape litlhaloso (litlhaloso). Haeba u na le mathata ka YAML, empa ha u so fihle ho tse boletsoeng, joale ke nako ea ho lokisa boemo bona. Litlhaloso li bonolo ka mokhoa o makatsang ho ngola, 'me litlhoko tsa syntax li bontšoa ka palo e kholo ea mehlala ho Khaolo ea 6.

5. Pseudo-configs

Ha u ngola buka kapa sengoloa, ho molemo ho qala ka ho rala kemiso ea selelekela, bonyane ka mokhoa oa lethathamo la litaba. Hoa tšoana le ka YAML. Mohlomong u na le mohopolo oa hore na data e hloka ho ngoloa joang faeleng ea YAML, empa ha u hlile ha u utloisise hore na u ka e hokahanya joang. Ka hona, pele u betla YAML, taka setšoantšo sa pseudo-config.

Pseudo-config e tšoana le pseudo-code, moo u sa hlokeng ho tšoenyeha ka sebopeho kapa indentation, likamano tsa motsoali le ngoana, lefa le sehlaha. Hoa tšoana le mona: o hula phetisetso ea data ha e hlaha hloohong ea hau.

Mehato e 10 ho YAML Zen

Baetsi ba lenaneo la Pseudo-config (Martin le Tabitha) le tsebo ea bona (lipuo tsa lenaneo: Python, Perl, Pascal le Lisp, Fortran, Erlang, ka ho latellana).

Kamora ho taka pseudo-config pampiring, e hlahlobisise ka hloko, 'me, haeba tsohle li lokile, e hlophise ka mokhoa oa faele e nepahetseng ea YAML.

6. The Tabs vs. Spaces Dilemma

U tla tlameha ho rarolla bothata "li-tab kapa libaka?". Eseng ka kutloisiso ea lefats'e, empa feela boemong ba mokhatlo oa hau, kapa bonyane morero. Ha ho na taba hore na sena se kenyelletsa ho sebelisa ts'ebetso ea morao-rao ka sed script, ho theha bahlophisi ba mongolo mochining oa baetsi ba mananeo, kapa ho nka lirisiti tsa ho latela ka tieo litaelo tsa linter tlas'a tšokelo ea ho lelekoa, empa litho tsohle tsa sehlopha sa hau tsela e 'ngoe kapa e' ngoe e amanang le YAML e tlameha ho sebelisa libaka feela (joalo ka ha ho hlokoa ke lintlha tsa YAML).

Ho mohlophisi ofe kapa ofe o tloaelehileng oa mongolo, o ka hlophisa li-tab tse itokisang ho ea ho palo e itseng ea libaka, kahoo bofetoheli ba batšehetsi ba bohlokoa. tab ya ha o a tlameha ho tshoha.

Joalo ka ha motho e mong le e mong ea hloileng YAML a tseba hantle, ha o bone phapang lipakeng tsa li-tab le libaka skrineng. 'Me ha ntho e sa bonahaleng, hangata ke ntho ea ho qetela eo batho ba e hopolang, ka mor'a hore ba e lokise, ba e hlahlobe le ho felisa mathata a mang kaofela a ka hlahang. Hora ea nako e sebelisitsoeng ho batla lekhalo la tabulation kapa sebaka sa libaka li hoeletsa feela hore u hloka ho theha leano la ts'ebeliso ea e 'ngoe kapa e' ngoe, ebe u kenya ts'ebetso ea cheke ea konkreite e matlafalitsoeng bakeng sa ho e latela (mohlala, hoko ea Git ho e qobella ka lehare).

7. Nyenyane ke ho feta (kapa ho feta ke tlase)

Batho ba bang ba rata ho ngola ka YAML hobane e totobatsa sebopeho. Ka nako e ts'oanang, ba sebelisa indentation ka mafolofolo ho totobatsa li-block tsa data. Ona ke mofuta oa bolotsana oa ho etsisa lipuo tsa markup tse sebelisang li-delimiters tse hlakileng.

Mona ke mohlala oa sebopeho se joalo se tsoang ho Litokomane tse utloahalang:

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

Bakeng sa ba bang, khetho ena e ba thusa ho hlophisa sebopeho sa YAML lihloohong tsa bona; ho ba bang, ho fapana le hoo, e ba khopisa ka lintho tse ngata tse sa hlokahaleng, ka maikutlo a bona, li-indents.

Empa haeba u mong'a tokomane ea YAML 'me u na le boikarabello ba ho e boloka, joale uena feela e tlameha ho hlalosa mokhoa oa ho sebelisa indentation. Haeba u khopisitsoe ke padding e kholo, e boloke bonyane ho latela lintlha tsa YAML. Mohlala, faele e kaholimo ho tsoa litokomaneng tsa Ansible e ka ngoloa bocha ka tsela ena ntle le tahlehelo:

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

8. Sebelisa likheo

Haeba u lula u pheta liphoso tse tšoanang ha u tlatsa faele ea YAML, hoa utloahala ho kenya template ho eona joalo ka maikutlo. Ebe nakong e tlang o ka kopitsa template ena feela mme o kenya data ea nnete moo, mohlala:

---
# - <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. Sebelisa ntho e fapaneng

Haeba ts'ebeliso ha e na letho ho uena, ho ka ba molemo ho fetola YAML ho sebopeho se fapaneng. Ha nako e ntse e ea, lifaele tsa tlhophiso li ka ikhula, ebe ho molemo ho li fetolela hore e be mangolo a bonolo a Lua kapa Python.

YAML ke ntho e ntle eo batho ba bangata ba e ratang bakeng sa minimalism le bonolo ba eona, empa ho hole le sesebelisoa se le seng se pokellong ea hau ea lihlomo. Kahoo ka linako tse ling u ka e hana. Ho bonolo ho fumana lilaebrari tsa YAML, kahoo haeba u fana ka likhetho tse bonolo tsa ho falla, basebelisi ba hau ba tla pholoha ho hloleha hona ntle le bohloko.

Haeba u sa khone ho etsa ntle le YAML, nka malebela ana a 10 'me u hlole ho se rate ha YAML hang!

Source: www.habr.com

Eketsa ka tlhaloso