10 hapa drejt YAML Zen

Ne të gjithë e duam Ansible, por Ansible është YAML. Ka shumë formate për skedarët e konfigurimit: lista vlerash, çifte parametrash-vlerë, skedarë INI, YAML, JSON, XML dhe shumë të tjerë. Sidoqoftë, për disa arsye nga të gjitha, YAML shpesh konsiderohet veçanërisht e vështirë. Në veçanti, megjithë minimalizmin e saj freskues dhe aftësitë mbresëlënëse për të punuar me vlera hierarkike, sintaksa YAML mund të jetë e bezdisshme me qasjen e saj të ngjashme me Python ndaj dhëmbëzimit.

10 hapa drejt YAML Zen

Nëse YAML ju zemëron, mundeni - dhe duhet! – Merrni 10 hapat e mëposhtëm për të ulur zhgënjimin tuaj në një nivel të pranueshëm dhe për t'u dashuruar me YAML. Siç i ka hije kësaj liste, dhjetë këshillat tona do të numërohen nga e para, ne do të shtojmë meditimin dhe praktikat shpirtërore sipas dëshirës 😉

0. Bëni redaktorin tuaj të funksionojë

Nuk ka rëndësi se cilin redaktues teksti keni, ndoshta ekziston të paktën një shtojcë 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ë shpërblehet shumë herë sa herë që ju duhet të redaktoni YAML.

Për shembull, redaktor Atom mbështet YAML si parazgjedhje, por për GNU Emacs do t'ju duhet të instaloni paketa shtesë, për shembull, yaml-mode.

10 hapa drejt YAML Zen

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

Nëse redaktori juaj i preferuar nuk ka një modalitet YAML, atëherë disa nga problemet mund të zgjidhen duke punuar me cilësimet. Për shembull, redaktuesi standard i tekstit GNOME Gedit nuk ka një modalitet YAML, por si parazgjedhje ai thekson sintaksën YAML dhe ju lejon të konfiguroni punën me dhëmbëzime:

10 hapa drejt YAML Zen

Vendosja e dhëmbëve në Gedit.

Një shtojcë hapësirat e vizatimit për Gedit, shfaq hapësirat si pika, duke eliminuar paqartësitë me nivelet e dhëmbëzimit.

Me fjalë të tjera, kaloni kohë duke mësuar rreth redaktorit tuaj të preferuar. Zbuloni se çfarë ofron ai ose komuniteti i tij i zhvillimit për të punuar me YAML dhe përdorni ato veçori. Ju patjetër nuk do të pendoheni.

1. Përdorni një liter

Në mënyrë ideale, gjuhët e programimit dhe gjuhët e shënjimit përdorin sintaksë të parashikueshme. Kompjuterët janë të mirë në parashikueshmëri, kjo është arsyeja pse koncepti i litera. Nëse në 40 vitet e ekzistencës së tij ju ka kaluar dhe ju ende nuk përdorni një linter YAML, atëherë është koha të provoni yamllint.

vendos yamllint Ju mund të përdorni menaxherin standard të paketave Linux. Për shembull, në Red Hat Enterprise Linux 8 ose Fedora kjo është bërë si kjo:

$ sudo dnf install yamllint

Pastaj thjesht ekzekutoni yamllint, duke i kaluar skedarin YAML për ta kontrolluar. Kjo është se si duket nëse kaloni një skedar me një gabim në linter:

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

Numrat në të majtë nuk janë koha, por koordinatat e gabimit: numri i rreshtit dhe i kolonës. Përshkrimi i gabimit mund të mos ju thotë asgjë, por ju e dini saktësisht se ku është. Thjesht shikoni këtë vend në kod dhe ka shumë të ngjarë që gjithçka do të bëhet e qartë.

Kur yamllint nuk gjen gabime në një skedar, asgjë nuk printohet në ekran. Nëse një heshtje e tillë ju frikëson dhe dëshironi pak më shumë reagime, atëherë mund ta përdorni linterin me komandën e kushtëzuar echo përmes një ampersand të dyfishtë (&&), si kjo:

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

Në POSIX, një ampersand i dyfishtë aktivizohet nëse dhe vetëm nëse komanda e mëparshme kthen 0. Dhe yamllint thjesht kthen numrin e gabimeve të gjetura, prandaj funksionon i gjithë ky konstrukt i kushtëzuar.

2. Shkruani në Python, jo YAML

Nëse YAML vërtet ju zemëron, thjesht mos shkruani në të, fjalë për fjalë. Ndodh që YAML është i vetmi format që aplikacioni kupton. Por edhe në këtë rast, nuk është e nevojshme të krijohet një skedar YAML. Shkruani atë që ju pëlqen dhe më pas konvertoni. Për shembull, ekziston një bibliotekë e madhe për Python pyyaml dhe dy metoda konvertimi: vetë-konvertimi dhe konvertimi përmes skripteve.

Vetë-konvertimi

Në këtë rast, skedari i të dhënave është gjithashtu një skript Python që gjeneron YAML. Kjo metodë është më e përshtatshme për grupe të vogla të dhënash. Ju thjesht shkruani të dhënat JSON në një variabël Python, e parathoni atë me një direktivë importi dhe në fund të skedarit shtoni tre rreshta për të zbatuar 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 e ekzekutojmë këtë skedar në Python dhe marrim skedarin 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

Kjo është plotësisht e vlefshme YAML, por yamllint do t'ju paralajmërojë se nuk fillon me -. Epo, kjo mund të korrigjohet lehtësisht me dorë ose të modifikohet pak në skriptin Python.

Konvertimi përmes skripteve

Në këtë rast, ne fillimisht shkruajmë në JSON, dhe më pas ekzekutojmë konvertuesin si një skript të veçantë Python, i cili prodhon YAML si dalje. Krahasuar me metodën e mëparshme, kjo metodë shkallëzohet më mirë, pasi konvertimi është i ndarë nga të dhënat.

Së pari, le të krijojmë një skedar JSON example.json, për shembull, nga mund ta merrni 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"
			}
		  }
		}
	  }
	}

Më pas do të krijojmë një skript të thjeshtë konvertues dhe do ta ruajmë nën emrin json2yaml.py. Ky skript importon modulet YAML dhe JSON Python dhe ngarkon një skedar JSON të specifikuar 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()

Ruaje këtë skript në shtegun e sistemit dhe ekzekuto atë sipas nevojës:

$ ~/bin/json2yaml.py example.json

3. Analizoni shumë dhe shpesh

Ndonjëherë është e dobishme të shikosh një problem nga një këndvështrim tjetër. Nëse keni probleme për të përfaqësuar marrëdhëniet midis të dhënave tuaja në YAML, mund t'i transformoni përkohësisht në diçka më të njohur.

Për shembull, nëse jeni të kënaqur duke punuar me listat e fjalorëve ose JSON, mund ta konvertoni YAML në JSON me vetëm dy komanda në guaskën interaktive të Python. Le të themi se keni një skedar YAML mydata.yaml, atëherë kjo do të duket si:

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

Ju mund të gjeni shumë shembuj të tjerë për këtë temë. Përveç kësaj, ka shumë konvertues në internet dhe analizues lokalë në dispozicion. Pra, mos hezitoni të riformatoni të dhënat kur shihni vetëm një ngatërresë të pakuptueshme në to.

4. Lexoni specifikimet

Duke u kthyer në YAML pas një pushimi të gjatë, është e dobishme të vizitoni yaml.org dhe rilexoni specifikimet (specifikimet). Nëse keni vështirësi me YAML, por nuk i keni arritur specifikimet, atëherë është koha për të korrigjuar këtë situatë. Specifikimet janë çuditërisht të lehta për t'u shkruar, dhe kërkesat sintaksore ilustrohen me një numër të madh shembujsh në Kapitulli 6.

5. Pseudo-konfigurime

Kur shkruani një libër ose artikull, është gjithmonë e dobishme që fillimisht të skiconi një skicë paraprake, të paktën në formën e një tabele të përmbajtjes. Është e njëjta gjë me YAML. Me shumë mundësi, ju keni një ide se cilat të dhëna duhet të shkruhen në një skedar YAML, por nuk e kuptoni vërtet se si t'i lidhni ato me njëri-tjetrin. Prandaj, përpara se të skalitni YAML, vizatoni një pseudo-konfigurim.

Pseudo-konfigurimi është i ngjashëm me pseudo-kodin, ku nuk duhet të shqetësoheni për strukturën ose dhëmbëzimin, marrëdhëniet prind-fëmijë, trashëgiminë dhe folenë. Është e njëjta gjë këtu: ju vizatoni përsëritjet e të dhënave kur dalin në kokën tuaj.

10 hapa drejt YAML Zen

Programuesit e listimit të pseudo-konfigurimit (Martin dhe Tabitha) dhe aftësitë e tyre (gjuhët e programimit: Python, Perl, Pascal dhe Lisp, Fortran, Erlang, respektivisht).

Pasi të vizatoni një pseudo-konfigurim në një copë letër, analizoni me kujdes dhe, nëse gjithçka është në rregull, formatoni atë në formën e një skedari të vlefshëm YAML.

6. Dilema e skedave kundër hapësirave

Ju do të duhet të zgjidhni dilemën "Skedat apo hapësirat?". Jo në një kuptim global, por vetëm në nivelin e organizatës suaj, ose të paktën një projekti. Nuk ka rëndësi nëse kjo përfshin përdorimin e pas-përpunimit me një skript sed, vendosjen e redaktuesve të tekstit në makinat e programuesve ose marrjen universale të faturave të pajtueshmërisë së rreptë me udhëzimet e linterit nën kërcënimin e shkarkimit, por të gjithë anëtarët e ekipit tuaj që në në një mënyrë ose në një tjetër që lidhet me YAML duhet të përdorë vetëm hapësira (siç kërkohet nga specifikimi YAML).

Në çdo redaktues teksti normal, mund të konfiguroni skedat e korrigjuara automatikisht në një numër të caktuar hapësirash, kështu që rebelimi i aderuesve kryesorë Tab nuk duhet të kesh frikë.

Siç e di mirë çdo urrejtës i YAML, ju nuk mund të shihni ndryshimin midis skedave dhe hapësirave në ekran. Dhe kur diçka nuk është e dukshme, zakonisht është gjëja e fundit që njerëzit kujtojnë, pasi të kenë zgjidhur, kontrolluar dhe eliminuar të gjitha problemet e tjera të mundshme. Një orë kohë e kaluar duke kërkuar për një kurbë tabelimi ose një bllok hapësirash thjesht bërtet se ju duhet urgjentisht për të krijuar një politikë për përdorimin e njërës ose tjetrës dhe më pas të zbatoni një kontroll të betonit të përforcuar për pajtueshmërinë me të (për shembull, përmes një grep Git për ta detyruar atë përmes një linteri).

7. Më pak është më shumë (ose më shumë është më pak)

Disa njerëzve u pëlqen të shkruajnë në YAML sepse thekson strukturën. Në të njëjtën kohë, ata përdorin në mënyrë aktive dhëmbëzimin për të theksuar blloqet e të dhënave. Ky është një lloj mashtrimi për të imituar gjuhët e shënjimit që përdorin kufizues të qartë.

Këtu është një shembull i një strukture të tillë nga Dokumentacion i përgjegjshëm:

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

Për disa, ky opsion i ndihmon ata të zgjidhin strukturën YAML në kokën e tyre; për të tjerët, përkundrazi, i irriton ata me shumë dhëmbëza të panevojshme, sipas mendimit të tyre.

Por nëse ju jeni pronari i dokumentit YAML dhe jeni përgjegjës për mirëmbajtjen e tij, atëherë ti dhe vetem ti duhet të përcaktojë se si të përdoret indentacioni. Nëse jeni të mërzitur nga mbushja e madhe, mbajeni atë në minimumin e mundshëm sipas specifikimeve 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 boshllëqe

Nëse vazhdimisht përsëritni të njëjtat gabime kur plotësoni një skedar YAML, ka kuptim të futni një shabllon në të si koment. Pastaj herën tjetër thjesht mund të kopjoni këtë shabllon dhe të futni të dhëna reale atje, për shembull:

---
# - <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. Përdorni diçka ndryshe

Nëse aplikacioni nuk ka një mbytje për ju, atëherë mund të ia vlen të ndryshoni YAML në një format tjetër. Me kalimin e kohës, skedarët e konfigurimit mund të tejkalojnë vetveten dhe më pas është më mirë t'i konvertoni ato në skripta të thjeshtë në Lua ose Python.

YAML është një gjë e mrekullueshme që shumë njerëz e duan për minimalizmin dhe thjeshtësinë e saj, por është larg nga mjeti i vetëm në arsenalin tuaj. Kështu që ndonjëherë ju mund ta refuzoni atë. Bibliotekat analizuese janë të lehta për t'u gjetur për YAML, kështu që nëse ofroni opsione të lehta migrimi, përdoruesit tuaj do t'i mbijetojnë këtij dështimi relativisht pa dhimbje.

Nëse nuk mund të bëni pa YAML, atëherë merrni këto 10 këshilla dhe kapërceni mospëlqimin tuaj për YAML njëherë e përgjithmonë!

Burimi: www.habr.com

Shto një koment