10 urrats YAML Zen

Denok maite dugu Ansible, baina Ansible YAML da. Konfigurazio fitxategietarako formatu asko daude: balio zerrendak, parametro-balio bikoteak, INI fitxategiak, YAML, JSON, XML eta beste hainbat. Hala ere, horietatik guztietatik hainbat arrazoirengatik, YAML sarritan bereziki zaila da. Bereziki, minimalismo freskagarria eta balio hierarkikoekin lan egiteko gaitasun ikusgarriak izan arren, YAML sintaxia gogaikarria izan daiteke koskaren Python-en antzeko ikuspegiarekin.

10 urrats YAML Zen

YAML-k haserretzen bazaitu, egin dezakezu, eta beharko zenuke! – Hartu 10 urrats hauek zure frustrazioa maila onargarri batera murrizteko eta YAMLrekin maitemintzeko. Zerrenda honi dagokion bezala, gure hamar aholku hutsetik zenbatuko dira, meditazioa eta praktika espiritualak nahieran gehituko ditugu πŸ˜‰

0. Egin zure editorea funtzionatzen

Berdin dio zein testu editore duzun, ziurrenik YAMLrekin lan egiteko plugin bat dago gutxienez. Ez baduzu, aurkitu eta instalatu berehala. Bilatzen eta konfiguratzen emandako denborak hainbat aldiz ordainduko du YAML editatu behar duzun bakoitzean.

Adibidez, editorea Atom YAML onartzen du lehenespenez, baina GNU Emacs-erako pakete gehigarriak instalatu beharko dituzu, adibidez, yaml-modua.

10 urrats YAML Zen

Emacs YAML moduan eta espazioak erakusten.

Zure editore gogokoenak YAML modurik ez badu, arazo batzuk konpon daitezke ezarpenekin lan eginez. Adibidez, Gedit GNOME testu-editore estandarrak ez du YAML modurik, baina lehenespenez YAML sintaxia nabarmentzen du eta koskarekin lana konfiguratzeko aukera ematen du:

10 urrats YAML Zen

Koskak ezartzea Gedit-en.

Plugin bat marraztu espazioak Geditentzat, espazioak puntu gisa bistaratzen ditu, koska-mailekin anbiguotasunak ezabatuz.

Beste era batera esanda, eman denbora zure editore gogokoena ikasten. Ezagutu zer eskaintzen duen bere garapen-komunitateak YAMLrekin lan egiteko eta erabili funtzio horiek. Zalantzarik gabe, ez zara damutuko.

1. Erabili linter bat

Egokiena, programazio lengoaiek eta markatze lengoaiek sintaxia aurreikusgarria erabiltzea. Ordenagailuak onak dira aurreikusgarritasunean, horregatik kontzeptua lintera. Bere existentziaren 40 urteetan zehar gainditu zaitu eta oraindik YAML linter bat erabiltzen ez baduzu, orduan yamllint probatzeko garaia da.

ezarri yamllint Linux pakete kudeatzaile estandarra erabil dezakezu. Adibidez, in Red Hat Enterprise Linux 8 edo Fedora horrela egiten da:

$ sudo dnf install yamllint

Ondoren, yamllint exekutatu besterik ez duzu, YAML fitxategia pasatuz egiaztatzeko. Hau da linterra errore bat duen fitxategi bat pasatzen baduzu:

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

Ezkerreko zenbakiak ez dira ordua, errorearen koordenatuak baizik: errenkada eta zutabe zenbakia. Akatsaren deskribapenak ez dizu ezer esango, baina zehatz-mehatz badakizu non dagoen. Ikusi besterik ez dago toki hau kodean, eta ziurrenik dena argi geratuko da.

Yamllint-ek fitxategi batean akatsik aurkitzen ez duenean, ez da ezer inprimatzen pantailan. Horrelako isiltasunak beldurra ematen bazaitu eta feedback apur bat gehiago nahi baduzu, orduan linter exekutatu dezakezu baldintzazko oihartzunaren komandoarekin ampersand bikoitz baten bidez (&&), honela:

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

POSIX-en, ampersand bikoitza suak ematen du aurreko komandoak 0 itzultzen badu eta bakarrik. Eta yamllint-ek aurkitutako errore-kopurua besterik ez du itzultzen, horregatik baldintzazko eraikuntza oso honek funtzionatzen du.

2. Idatzi Python-en, ez YAML-n

YAML benetan haserretzen bazaitu, ez idatzi bertan, literalki. Gertatzen da YAML dela aplikazioak ulertzen duen formatu bakarra. Baina kasu honetan ere, ez da beharrezkoa YAML fitxategi bat sortzea. Idatzi zer gustatzen zaizun eta gero bihurtu. Adibidez, liburutegi bikaina dago Pythonentzat piyaml eta bi bihurketa metodo: autobihurketa eta scripten bidezko bihurketa.

Autobihurketa

Kasu honetan, datu-fitxategia YAML sortzen duen Python script bat ere bada. Metodo hau datu multzo txikietarako egokiena da. JSON datuak Python aldagai batean idatzi besterik ez duzu, inportazio zuzentarau batekin hitzaurrea egin eta fitxategiaren amaieran hiru lerro gehitu irteera ezartzeko.

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

Orain fitxategi hau Python-en exekutatzen dugu eta output.yaml fitxategia lortuko dugu:

$ 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

Hau guztiz baliozkoa da YAML, baina yamllint-ek ohartaraziko dizu ez dela -rekin hasten. Beno, hau erraz zuzen daiteke eskuz edo apur bat aldatu Python scriptean.

Scripten bidez bihurtzea

Kasu honetan, lehenik JSON idazten dugu, eta gero bihurgailua Python script bereizi gisa exekutatzen dugu, irteera gisa YAML sortzen duena. Aurreko metodoarekin alderatuta, metodo hau hobeto eskalatzen da, bihurketa datuetatik bereizita baitago.

Lehenik eta behin, sor dezagun JSON fitxategia example.json, adibidez, bertatik har dezakezu 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"
			}
		  }
		}
	  }
	}

Ondoren, bihurgailuaren script soil bat sortuko dugu eta json2yaml.py izenarekin gordeko dugu. Script honek YAML eta JSON Python moduluak inportatzen ditu, eta erabiltzaileak zehaztutako JSON fitxategi bat kargatzen du, bihurketa egiten du eta datuak output.yaml fitxategian idazten ditu.

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

Gorde script hau sistemaren bidean eta exekutatu behar duzun moduan:

$ ~/bin/json2yaml.py example.json

3. Asko eta maiz aztertu

Batzuetan erabilgarria da arazo bat beste angelu batetik begiratzea. YAML-n zure datuen arteko erlazioak irudikatzeko arazoak badituzu, aldi baterako ezagunagoa den zerbait bihurtu dezakezu.

Adibidez, hiztegi-zerrendekin edo JSONekin lan egiten eroso bazaude, YAML JSON bihur dezakezu Python shell interaktiboan bi komandorekin. Demagun mydata.yaml YAML fitxategi bat duzula, orduan hau izango litzatekeen itxura:

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

Gai honi buruzko beste adibide asko aurki ditzakezu. Horrez gain, sareko bihurgailu eta tokiko analizatzaile ugari daude eskuragarri. Beraz, ez izan zalantzarik datuak birformateatzeko nahasketa ulertezina besterik ez duzunean.

4. Irakurri zehaztapenak

Atsedenaldi luze baten ondoren YAMLra itzultzean, bisitatzea erabilgarria da yaml.org eta berriro irakurri zehaztapenak (zehaztapenak). YAMLrekin zailtasunak badituzu, baina zehaztapenetara iritsi ez bazara, egoera hau zuzentzeko garaia da. Zehaztapenak idazteko errazak dira, eta sintaxi-eskakizunak adibide ugarirekin azaltzen dira. 6. kapitulua.

5. Sasi-konfigurazioak

Liburu edo artikulu bat idazterakoan, beti da komenigarria lehenik aurretiazko eskema bat egitea, aurkibide moduan behintzat. YAMLrekin berdin gertatzen da. Seguruenik, YAML fitxategi batean zer datu idatzi behar diren jakiteko ideia duzu, baina ez duzu ulertzen nola konektatu elkarren artean. Hori dela eta, YAML zizelkatu aurretik, marraztu sasi-konfigurazio bat.

Pseudo-config sasi-kodearen antzekoa da, non ez duzun egituraz edo koskaz, guraso-seme-alaben harremanez, herentziaz eta habiaraz arduratu beharrik. Hemen ere berdina da: buruan sortzen diren heinean datuen iterazioak marrazten dituzu.

10 urrats YAML Zen

Sasi-konfigurazio zerrendako programatzaileak (Martin eta Tabitha) eta haien trebetasunak (programazio-lengoaiak: Python, Perl, Pascal eta Lisp, Fortran, Erlang, hurrenez hurren).

Sasi-konfigurazio bat paper batean marraztu ondoren, aztertu arretaz eta, dena ondo badago, formateatu baliozko YAML fitxategi baten moduan.

6. Fitxak vs. Espazioen dilema

Dilema konpondu beharko duzu "fitxak edo zuriuneak?". Ez zentzu globalean, baizik eta zure erakundearen mailan, edo gutxienez proiektu baten mailan. Ez du axola horrek sed script batekin postprozesatzea, programatzaileen makinetan testu-editoreak konfiguratzea edo linter-en argibideak zorrotz betetzearen ordainagiriak hartzea den ala ez, kaleratzearen mehatxupean, baina zure taldeko kide guztiak modu batean edo bestean YAMLrekin erlazionatzen diren espazioak soilik erabili behar dira (YAML zehaztapenak eskatzen duen moduan).

Edozein testu-editore arruntetan, zuzenketa automatikoko fitxak konfigura ditzakezu espazio-kopuru zehatz batean, beraz, funtsezko atxikimenduen matxinada. Fitxa ez duzu beldurrik izan behar.

YAML gorrotatzaile guztiek ondo dakienez, ezin duzu pantailako fitxen eta espazioen arteko aldea ikusi. Eta zerbait ikusten ez denean, jendeak gogoratzen duen azken gauza izan ohi da, beste arazo posible guztiak konpondu, egiaztatu eta ezabatu ondoren. Tabulazio-kurba edo espazio-bloke bat bilatzen igarotako ordu batek, bata edo bestea erabiltzeko politika bat sortzeko premiazkoa dela garrasi besterik ez du egiten, eta, ondoren, hormigoi armatuzko egiaztapena ezartzea (adibidez, hori betetzeko. linter baten bidez behartzeko Git amua).

7. Gutxiago gehiago da (edo gehiago gutxiago)

Batzuei gustatzen zaie YAML-n idaztea, egitura azpimarratzen duelako. Aldi berean, aktiboki erabiltzen dute koska datu-blokeak nabarmentzeko. Mugatzaile esplizituak erabiltzen dituzten marka-hizkuntzak imitatzeko iruzur moduko bat da hau.

Hona hemen egitura horren adibide bat Ansible dokumentazioa:

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

Batzuentzat, aukera honek beren buruan YAML egitura ordenatzen laguntzen die; beste batzuentzat, aitzitik, alferrikako koska asko haserretzen ditu, haien ustez.

Baina YAML dokumentuaren jabea bazara eta mantentzeaz arduratzen bazara, orduan zu eta zuk bakarrik koska nola erabili definitu behar du. Betegarri handiek gogaitzen bazaitu, mantendu ahalik eta gutxieneko YAML zehaztapenaren arabera. Adibidez, Ansible dokumentazioko goiko fitxategia honela berridatzi daiteke inolako galerarik gabe:

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

8. Erabili hutsuneak

YAML fitxategi bat betetzerakoan akats berdinak etengabe errepikatzen badituzu, zentzuzkoa da txantiloi bat iruzkin gisa txertatzea. Ondoren, hurrengoan txantiloi hau kopiatu eta han datu errealak sar ditzakezu, adibidez:

---
# - <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. Erabili zerbait desberdina

Aplikazioak ez badu zure gainean itogarririk, baliteke YAML beste formatu batera aldatzea merezi izatea. Denborarekin, konfigurazio-fitxategiak beraiek gainditzen dituzte eta orduan hobe da script soiletan bihurtzea Lua edo Python-en.

YAML jende askok bere minimalismoagatik eta sinpletasunagatik maite duen gauza bikaina da, baina urrun dago zure arsenaleko tresna bakarra. Beraz, batzuetan uko egin diezaiokezu. Analisi-liburutegiak erraz aurki daitezke YAMLrako, beraz, migrazio-aukera errazak eskaintzen badituzu, zure erabiltzaileek hutsegite honetatik nahiko okerrik gabe iraungo dute.

Ezin baduzu YAML gabe egin, har itzazu 10 aholku hauek eta gainditu behingoz YAMLarekiko ez duzun gustukoa!

Iturria: www.habr.com

Gehitu iruzkin berria