10 hapa drejt YAMl-zens

Të gjithë ne i duam Ansible, por Ansible është YAML. Ekzistojnë shumë formate për skedarët e konfigurimit: lista vlerash, çiftet "parametër-vlerë", skedarët INI, YAML, JSON, XML dhe shumë të tjera. Megjithatë, për disa arsye, nga të gjitha këto, YAML shpesh konsiderohet veçanërisht i vështirë. Sidomos, pavarësisht nga minimalizmi i tij freskues dhe mundësitë e dukshme për punë me vlera hierarkike, sintaksa e YAML-it mund të jetë e mërzitshme për shkak të qasjes së saj në lidhje me hapësirat, që ngjan me Python-in.

10 hapa drejt YAMl-zens

NĂ«se YAML ju irriton, mund dhe duhet! – tĂ« merrni 10 hapat e mĂ«poshtĂ«m pĂ«r tĂ« ulur irritimin tuaj nĂ« njĂ« nivel tĂ« pranueshĂ«m dhe pĂ«r tĂ« dashuruar YAML-in. Siç e kĂ«rkon njĂ« listĂ« e vĂ«rtetĂ«, dhjetĂ«she e kĂ«shillave tona do tĂ« numĂ«rohet nga zero, meditimi dhe praktikat shpirtĂ«rore shtohen sipas dĂ«shirĂ«s 😉

0. Bëni që redaktori juaj të punojë

Nuk ka rĂ«ndĂ«si se cili Ă«shtĂ« redaktori juaj i tekstit – me siguri ekziston sĂ« paku njĂ« plagin pĂ«r tĂ« punuar me YAML. NĂ«se nuk keni njĂ« tĂ« tillĂ«, gjeni dhe instaloni menjĂ«herĂ«. Koha e kaluar pĂ«r tĂ« kĂ«rkuar dhe konfiguruar do t'ju kompensohet çdo herĂ« qĂ« duhet tĂ« redaktoni YAML.

Për shembull, redaktori Atom mbështet YAML si parazgjedhje, ndërsa për GNU Emacs duhen instaluar paketa shtesë, siç është yaml-mode.

10 hapa drejt YAMl-zens

Emacs në modalitetin YAML dhe shfaqja e hapësirave.

Nëse redaktori juaj i preferuar nuk ka modalitetin YAML, disa probleme mund të zgjidhen duke punuar me cilësimet. Për shembull, redaktori Gedit, i parazgjedhur për GNOME, nuk ka modalitetin YAML, por automatikisht shfaq sintaksën YAML dhe lejon të konfigurohet puna me hapësirat:

10 hapa drejt YAMl-zens

Cilësimi i hapësirave në Gedit.

Dhe plagini drawspaces për Gedit shfaq hapësirat si pika, duke eliminuar paqartësitë me nivelin e hapësirave.

Me fjalë të tjera, kaloni pak kohë duke mësuar redaktorin tuaj të preferuar. Zbuloni se çfarë ofron ai vetë ose komuniteti i zhvillimit për punën me YAML dhe përdorni këto mundësi. Ju do të jeni me të vërtetë të kënaqur për këtë.

1. Përdorni linter (linter)

Idealisht, gjuhët e programimit dhe ato të shënjimit përdorin sintaksë të parashikueshme. Kompjuterët e trajtojnë mirë parashikueshmërinë, prandaj që nga viti 1978, është shpikur koncepti i linters. Nëse gjatë 40 viteve të ekzistencës së saj ajo ka kaluar pranë jush dhe ende nuk po përdorni një YAML-linter, tani është koha për ta provuar yamllint.

Instalo yamllint mund të instaloni me menaxherin e paketave si parazgjedhje në Linux. Për shembull, në Red Hat Enterprise Linux 8 ose Fedora kështu bëhet:

$ sudo dnf install yamllint

Pastaj thjesht nisni yamllint, duke i kaluar atij skedarin YAML për t'u kontrolluar. Ja si duket nëse i kaloni linters skedarin me gabim:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    gabim sintaksor: vlerat e hartës nuk lejohet këtu
23:11     error    hapësira në fund  (hapësira-në-fund)

Numrat e majtë nuk janë kohë, por koordinatat e gabimit: numri i rreshtit dhe i kolonës. Përshkrimi i gabimit mund të mos thotë asgjë, por ju e dini saktësisht se ku ndodhet. Thjesht shikoni atë vend në kod dhe, me siguri, gjithçka do të jetë e qartë.

Kur yamllint nuk gjen gabime në skedarin, nuk shfaqet asgjë në ekran. Nëse kjo qetësi ju frikson dhe dëshironi pak më shumë feedback, mund ta nisni lintern me komandën e kushtit echo përmes dy ampresandëve (&&), kështu:

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

Në POSIX, dy ampresandë funksionon atëherë dhe vetëm atëherë kur komanda përpara rikthen 0. Dhe yamllint sapo rikthen numrin e gabimeve të gjetura, prandaj gjithë kjo konstruksion është e funksionueshme.

2. Shkruani në Python, jo në YAML

Nëse ju bezdis vërtet YAML, thjesht mos shkruani në të, në kuptimin e vërtetë. Ndonjëherë, YAML është formati i vetëm që pranohet nga aplikacioni. Por, edhe në këtë rast, nuk është e nevojshme të krijoni një skedar YAML. Shkruani në atë që ju pëlqen dhe pastaj konvertoni. Për shembull, për Python ka një bibliotekë të shkëlqyer pyyaml dhe dy mënyra tërësisht për konvertimin: vetëkonvertimi dhe konvertimi nëpërmjet skenarëve.

Vetëkonvertimi

Në këtë rast, skedari me të dhëna është po ashtu një skenar Python, i cili gjeneron YAML. Ky metodë është më e përshtatshme për grupe të vogla të dhënash. Thjesht shkruani të dhënat JSON në një variabël Python, duke e paraprirë me direktivën import, dhe në fund të skedarit shtoni tri rreshta për të realizuar daljen.

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

Tani nisni këtë skedar në Python dhe në dalje merrni skedarin output.yaml:

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: Një gjuhë meta-markup, e përdorur për të krijuar gjuhë markup si DocBook.
		GlossSee: markup
		GlossTerm: Gjuha Standarde e Kategorizuar e Gjuhës
		ID: SGML
		SortAs: SGML
	title: S
  title: Glossari i shembullit

Ky YAML Ă«shtĂ« absolutisht nĂ« rregull, por yamllint do tĂ« japĂ« njĂ« paralajmĂ«rim se nuk fillon me —. ÇfarĂ« do, kjo mund tĂ« rregullohet lehtĂ«sisht manualisht ose tĂ« modifikohet pak skenari Python.

Konvertimi përmes skenarëve

Në këtë rast, fillimisht shkruajmë në JSON dhe më pas ekzekutojmë një konvertor si një skenë të veçantë Python, e cila jep YAML në dalje. Krahasuar me metodën e mëparshme, ky mënyrë është më e shkallëzueshme, pasi konvertimi është i ndarë nga të dhënat.

Për fillim, krijoni një skedar JSON example.json, për shembull, mund ta merrni atë në json.org:

{
	"glossary": {
	  "title": "glossari i shembujve",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Gjuha e Markup-it të Standardizuar",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "Një meta-gjuha për markup, e përdorur për të krijuar gjuha të markup-it si DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "markup"
			}
		  }
		}
	  }
	}

Më pas, krijoni një skript të thjeshtë konvertues dhe ruajeni me emrin json2yaml.py. Ky skript importon të dy modulet - YAML dhe JSON nga Python, si dhe ngarkon skedarin JSON të caktuar nga përdoruesi, kryen konvertimin dhe shkruan të dhënat në skedarin 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()

Ruani këtë skript në rrugën e sistemit dhe ekzekutoni sipas nevojës:

$ ~/bin/json2yaml.py example.json

3. Parsojini shpesh dhe në shumë mënyra

Ndonjëherë është e dobishme të shikoni një problem nga një këndvështrim tjetër. Nëse keni vështirësi të përshkruani marrëdhëniet mes të dhënave në YAML, mund ta konvertoni përkohësisht atë në diçka më të njohur.

Për shembull, nëse ju pëlqen të punoni me lista fjalori ose me JSON, atëherë YAML mund të konvertohet në JSON vetëm me dy komanda në ndërfaqen interaktive të Python. Supozoni se keni një skedar YAML mydata.yaml, ja si do të dukej:

$ 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': 'Artikulli i mirë. Mund të ishte më mirë.'}

Mund të gjeni një mori shembujsh të tjerë për këtë temë. Për më tepër, ka shumë konvertorë online dhe parsere lokalë. Prandaj, mos ngurroni të riformatizoni të dhënat kur i shihni ato si një përzierje të paqartë.

4. Lexoni specifikimet

Duke u rikthyer pas një pushimi të gjatë te YAML, është e dobishme të vizitoni yaml.org dhe të rishikoni specifikimet. Nëse keni vështirësi me YAML, por nuk keni arritur ende te specifikimet, është koha ta rregulloni këtë situatë. Specificimet janë surprizë shumë lehtë të shkruara, dhe kërkesat e sintaksës ilustrohen me një sasi të madhe shembujsh në Kapitulli 6.

5. Pseudokonfigura

Kur shkruani një libër ose një artikull, gjithmonë është e dobishme të hartoni më parë një plan paraprak, edhe në formë të një përmbajtjeje. Po ashtu ndodh edhe me YAML. Me siguri keni një ide se çfarë të dhënash duhet të regjistroni në skedarin YAML, por ndoshta nuk e kuptoni se si t'i lidhni ato me njëri-tjetrin. Prandaj, para se të krijoni YAML, vizatoni një pesë-dhjetë të konfiguruar.

Pesë-dhjetë e duket si pesë-përkodim, ku nuk keni nevojë të shqetësoheni për strukturën ose hapësirat, për marrëdhëniet "prind-fëmijë", trashëgiminë dhe thellësinë. E njëjta gjë ndodh këtu: ju vizatoni iteracionet e të dhënave siç i keni në mendje.

10 hapa drejt YAMl-zens

Pesë-dhjetë e lidhur me programuesit (Martin dhe Tabitha) dhe aftësitë e tyre (gjuhët e programimit: Python, Perl, Pascal dhe Lisp, Fortran, Erlang, sipas radhës).

Pasi të keni vizatuar pesë-dhjetë në një fletë letre, analizoni atë me kujdes dhe, nëse gjithçka është në rregull, formalizoni atë si një skedar të validuar YAML.

6. Dilema "tabullimi ose hapësirat"

Ju do të keni për të zgjidhur dilemmën "tabullimi ose hapësirat?". Jo në kuptimin global, por vetëm në nivelin e organizatës suaj, ose të paktën të projektit. Nuk ka rëndësi nëse do të përdoret përpunim pas-skripti me sed, konfigurimi i redaktuesve të tekstit në makinat e programuesve, ose mbledhja e nënshkrimeve për përmbushjen e saktë të udhëzimeve të linters nën kërcënimin e shkarkimit, por të gjithë anëtarët e ekipit tuaj që lidhen ndryshe me YAML, patjetër duhet të përdorin vetëm hapësira (siç kërkohet nga specifikimi YAML).

Në çdo redaktues tekstual normal, mund të konfigurohet automatikisht zëvendësimi i tabullimit me një numër të caktuar hapësirash, prandaj nuk ka nevojë të shqetësoheni për rebelimin e përkrahësve të butonit Tab nuk keni asgjë për të frikësuar.

Siç është e njohur për çdo armik të YAML, në ekran nuk është e dukshme ndarja midis tabullimit dhe hapësirave. Dhe kur diçka nuk është e dukshme, zakonisht përmendet në fund të fundit, pas shqyrtimit, kontrollit dhe eliminimit të të gjitha problemeve të tjera të mundshme. Një orë kohe e humbur duke kërkuar për një tabullim të keq ose një bllok hapësirash thjesht i tregon se ju nevojitet urgjentisht të krijoni një politikë të përdorimit të njërës apo tjetrës, dhe pastaj të realizoni një kontroll të fortë për zbatimin e saj (për shembull, përmes një Git-hook për të forcuar kalimin nëpër linters).

7. MĂ« mirĂ« pak por mĂ« mirĂ« (ose mĂ« shumĂ« – kjo Ă«shtĂ« mĂ« pak)

Disa njerëzve iu pëlqen të shkruajnë me YAML, pasi ai thekson strukturën. Ata përdorin aktivisht hapësirat për të veçuar blloqet e të dhënave. Kjo është një lloj mashtrimi për të imituar gjuhët e shënjimit që përdorin ndarës të dukshëm.

Ja një shembull i tillë strukturimi nga dokumentacioni Ansible:

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

Dikujt ky variant i ndihmon të organizojë në mendje strukturën YAML, ndonjë tjetër e irriton me masën e tepërt, sipas mendimit të tyre, të hapësirave.

Por nëse jeni pronari i dokumentit YAML dhe jeni përgjegjës për mbajtjen e tij, atëherë ju dhe vetëm ju duhet të përcaktoni se si të përdorni hapësirat. Nëse ju irritojnë hapësirat e mëdha, reduktoni ato në minimumin e mundshëm sipas specifikimeve të YAML. Për shembull, skedari i mësipërm nga dokumentacioni Ansible mund të rishkruhet kështu pa asnjë humbje:

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

8. Përdorni shabllone

Nëse gjatë plotësimit të skedarit YAML përsërisni vazhdimisht të njëjtat gabime, ka kuptim të vendosni një shabllon-koment në të. Henë t'ikeni kështu, herën tjetër mund të kopjoni thjesht këtë shabllon dhe të futni të dhënat reale aty:

---
# - <emri i zakonshëm>:
#   name: Mbiemri i dhënë
#   job: PUNA
#   skills:
#   - GJUHA
- martin:
  name: Martin D'vloper
  job: Developer
  skills:
  - python
  - perl
  - pascal
- tabitha:
  name: Tabitha Bitumen
  job: Developer
  skills:
  - lisp
  - fortran
  - erlang

9. Përdorni diçka tjetër

Nëse aplikacioni nuk ju mbërthen fort, ndoshta duhet ta ndryshoni YAML me një format tjetër. Me kalimin e kohës, skedarët e konfigurimit mund të tejkalojnë veten dhe atëherë është më mirë t'i transformoni ata në skenarë të thjeshtë në Lua ose Python.

YAML është një gjë e shkëlqyer që shumë njerëz e duan për minimalizmin dhe thjeshtësinë e tij, por kjo nuk është mjeti i vetëm në arsenalin tuaj. Pra, ndonjëherë mund të hiqni dorë nga ai. Për YAML lehtë mund të gjeni biblioteka-parsuese, kështu që, nëse ofroni mundësi të përshtatshme migrimi, përdoruesit tuaj do ta kalojnë këtë heqje dorë relativisht pa dhimbje.

Nëse megjithatë nuk mund të shmangni YAML, atëherë merrni parasysh këto 10 këshilla dhe mposhtni armiqësinë tuaj ndaj YAML një herë e mirë!

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster