10 sammu YAML zenini

Me kĂ”ik armastame Ansible't, kuid Ansible on YAML. Konfiguratsioonifailide jaoks on olemas palju formaate: vÀÀrtuste loendid, paarid „parameeter-vÀÀrtus”, INI-failid, YAML, JSON, XML ja palju teisi. Kuid mitmel pĂ”hjusel peetakse YAML-i sageli eriti keeruliseks. EelkĂ”ige, hoolimata selle vĂ€rskendavast minimalismist ja muljetavaldavatest vĂ”imalustest hierarhiliste vÀÀrtustega töötamisel, vĂ”ib YAML-i sĂŒntaks oma Pythonilaadse lĂ€henemise tĂ”ttu taandele olla tĂŒlikas.

10 sammu YAML zenini

Kui YAML ajab teid nĂ€rvi, saate – ja peaksite! – astuma jĂ€rgmised 10 sammu, et oma Ă€rritust talutavasse tasemesse alandada ja YAML-i armastama hakata. Nagu tĂ”elisele loetelule kohane, numbreerime meie kĂŒmme nĂ”uannet nullist, mediteerimise ja vaimsete praktikate lisamine on vabatahtlik 😉

0. Sundige oma redaktorit töötama

Ei ole tĂ€htis, milline tekstiredaktor teil on – tĂ”enĂ€oliselt on sellele vĂ€hemalt ĂŒks plugin YAML-i töötluseks. Kui teil sellist ei ole, leidke ja installige see kohe. Aeg, mis kulub otsimisele ja seadistamisele, tasub end mitmekordselt Ă€ra iga kord, kui peate YAML-i redigeerima.

NÀiteks toimetaja Atom toetab YAML-i vaikimisi, kuid GNU Emacs'i jaoks tuleb installida tÀiendavad paketid, nÀiteks yaml-mode.

10 sammu YAML zenini

Emacsi YAML-reĆŸiimis ja tĂŒhikute kuvamisel.

Kui teie lemmikredaktoris ei ole YAML-reĆŸiimi, saab osa probleemidest lahendada seadistustega töötades. NĂ€iteks GNOME'i vaikimisi tekstiredaktor Gedit ei toeta YAML-reĆŸiimi, kuid tavalised YAML-i sĂŒntaksi esiletĂ”stmine ja tĂŒhikute seadistamine on seda vĂ”imaldanud:

10 sammu YAML zenini

Geditis tĂŒhikute seadistamine.

Ja plugin drawspaces Geditile kuvab tĂŒhikud punktidena, kĂ”rvaldades ebaselgused taande tasemete osas.

TeisisĂ”nu, vĂ”tke aega oma lemmikredaktori uurimiseks. Uurige, mida see ise vĂ”i selle arendusĂŒritus pakub YAML-iga töötamiseks, ja kasutage neid vĂ”imalusi. Te ei kahetse seda.

1. Kasutage lintrit

Ideaalis kasutavad programmeerimiskeeled ja mĂ€rgistuskeeled etteennustatavat sĂŒntaksit. Arvutid saavad etteennustatavuse hĂ€sti hakkama, seetĂ”ttu tekkis juba 1978. aastal kontseptsioon lintrist. Kui see 40 aasta jooksul teid mööda on lĂ€inud ja te siiani YAML-lintrit ei kasuta, on Õige aeg proovida yamllinti.

Paigaldada yamllint seda saab kasutada Linuxi vaikimisi pakihalduri kaudu. NÀiteks Red Hat Enterprise Linux 8 vÔi Fedora see tehakse nii:

$ sudo dnf install yamllint

K seejÀrel lihtsalt kÀivitate yamllint, edastades talle veekontrollimiseks YAML-faili. NÀete, milline see vÀlja nÀeb, kui edastate lintimisele vale faili:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     viga    sĂŒntaksiviga: kaardistamise vÀÀrtused ei ole siin lubatud
23:11     viga    lisaruumid  (trailing-spaces)

Vasakul asuvad numbrid ei ole ajad, vaid vea koordinaadid: rida ja veeru number. Veakirjeldus vÔib teile mitte midagi öelda, kuid teate tÀpselt, kus see asub. Vaadake lihtsalt seda kohta koodis ja tÔenÀoliselt on kÔik selge.

Kui yamllint ei leia failis vigu, ei kuvata ekraanile midagi. Kui selline vaikimine hirmutab ja soovite natuke rohkem tagasisidet, siis saate lintimist kÀivitada tingimusliku kÀsklusega echo topelt-amperandiga (&&), nii:

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

POSIX-is töötab topelt-amperand ainult siis, kui eelnev kÀsk tagastab 0. Ja yamllint tagastab just leitud vigade arvu, seetÔttu see tingimuslik konstruktsioon töötab.

2. Kirjutage Pythonis, mitte YAML-is

Kui YAML tÔeliselt hÀirib, Àrge kirjutage sellel, sÔnasÔnaliselt. Olukordades, kus YAML on ainus formaat, mis rakenduse poolt tuntud, ei pea te sellegipoolest YAML-faili looma. Kirjutage selles, mis teile meeldib, ja seejÀrel konverteerige. NÀiteks Pythonile on suurepÀrane teek pyyaml ja kaks viisi konverteerimiseks: automaatne konverteerimine ja konverteerimine skriptide kaudu.

Automaatne konverteerimine

Sel juhul on andmefail ĂŒhtlasi ka Python-skript, mis genereerib YAML. See meetod sobib kĂ”ige paremini vĂ€ikeste andmehulkade jaoks. Kirjutate lihtsalt JSON-andmed Pythonis muutujasse, eeldate seda import-mĂ€rgisega ning lisate faili lĂ”ppu kolm rida vĂ€ljundi teostamiseks.

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

KĂ€ivitame nĂŒĂŒd selle faili Pythonis ja vĂ€ljundiks saame faili output.yaml:

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: meta-mÀrgistus keel, mida kasutatakse selliste mÀrgistuskeelte loomiseks nagu DocBook.
		GlossSee: mÀrgistus
		GlossTerm: Üldine standardiseeritud mĂ€rgistuskeel
		ID: SGML
		SortAs: SGML
	title: S
  title: nÀidis sÔnastik

See on tÀiesti korrektne YAML, kuid yamllint annab hoiatuse, et see ei alga -. Mis siis, seda saab kergesti kÀsitsi parandada vÔi Python-skripti veidi kohandada.

Skriptide kaudu konverteerimine

Selles olukorras kirjutame esmalt JSON-is ja seejÀrel kÀivitame konverterina eraldi Python-skripti, mis vÀljastab YAML-i. See meetod on vÔrreldes eelneva meetodiga paremini skaleeritav, kuna andmete konverteerimine on eraldatud.

Alguses loome JSON-faili example.json; nÀiteks vÔite selle vÔtta aadressilt json.org:

{
	"glossary": {
	  "title": "nÀidisglossaar",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Standardiseeritud ĂŒldine mĂ€rgistamise keel",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "MetamÀrgistuskeel, mida kasutatakse selliste mÀrgistamiskeelte loomiseks nagu DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "mÀrgistamine"
			}
		  }
		}
	  }
	}

SeejĂ€rel loome lihtsa konverteerimis-skripti ja salvestame selle nimega json2yaml.py. See skript importib mĂ”lemad moodulid — YAML ja JSON Pythonis ning laadib kasutaja mÀÀratud JSON-faili, viib lĂ€bi konverteerimise ja kirjutab andmed faili 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()

Salvesta see skript sĂŒsteemi teekonda ja kĂ€ivita vastavalt vajadusele:

$ ~/bin/json2yaml.py example.json

3. Parsige tihti ja palju

MĂ”nikord on probleemile hea vaadata teisest kĂŒljest. Kui on raske ette kujutada andmete seoseid YAML-is, vĂ”ite need ajutiselt konverteerida millegi tuttavama vastu.

NÀiteks, kui teile meeldib töötada sÔnastike loendite vÔi JSON-iga, siis saab YAML-i muuta JSON-iks vaid kahe kÀsuga Python'i interaktiivses shell'is. Oletame, et teil on YAML-fail mydata.yaml, nii et vaadake, kuidas see vÀlja nÀeb:

$ 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 Road', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Hea artikkel. VÔiks olla parem.'}

Selle teema kohta on saadaval palju muid nĂ€iteid. Lisaks on olemas palju veebipĂ”hiseid konvertereid ja kohalikke parsereid. Seega Ă€rge kartke andmete ĂŒmberformaatimist, kui nĂ€ete neid vaid segadusena.

4. Loe spetsifikatsioone

Kui naasete pĂ€rast pikka pausi YAML-i juurde, on kasulik kĂŒlastada yaml.org ja lugeda spetsifikatsioone. Kui teil on YAML-iga raskusi, kuid spetsifikatsioonideni ei ole jĂ”udnud, siis on aeg see olukord parandada. Spetsifikatsioonid on ĂŒllatavalt selgelt kirjutatud ja sĂŒntaksi nĂ”udeid illustreeritakse hulga nĂ€idetega PeatĂŒkis 6.

5. Pseudokonfiguratsioonid

Raamatute vÔi artiklite kirjutamisel on alati kasulik kÔigepealt koostada eelnev plaan, vÀhemalt sisukorra kujul. Nii on ka YAML-i puhul. TÔenÀoliselt kujutate ette, millised andmed tuleb YAML-faili salvestada, kuid ei saa tÀpselt aru, kuidas neid omavahel seostada. SeetÔttu joonistage YAML-i koostamise enne vÀlja pseudokonfiguratsioon.

Pseudokonfiguratsioon sarnaneb pseudokoodiga, kus ei pea muretsema struktuuri vĂ”i sisu, «vanem-laps» suhete, pĂ€rimise ja pesastatuse ĂŒle. Sel juhul joonistate andmete iteratsioonid nii, nagu need teie peas ilmnevad.

10 sammu YAML zenini

Pseudokonfiguratsioon, kus on loetletud programmeerijad (Martin ja Tabitha) ja nende oskused (programmeerimiskeeled: Python, Perl, Pascal ja Lisp, Fortran, Erlang, vastavalt).

Pseudokonfiguratsiooni paberile joonistades analĂŒĂŒsige seda hoolikalt ja kui kĂ”ik on korras, vormistage see kehtiva YAML-failina.

6. Dilemma «tĂŒhikut vĂ”i tabulatsiooni»

Te peate otsustama dilemmas «tĂŒhikut vĂ”i tabulatsiooni?». Mitte globaalses mĂ”ttes, vaid ainult teie organisatsiooni tasandil vĂ”i vĂ€hemalt projekti tasandil. Ei ole oluline, kas selleks kasutatakse sed-skripti, programmide tekstiredaktorite seadistamist vĂ”i ainult selleks, et kasutada nĂ”uete jĂ€rgimise rĂ”hutamiseks ultimatume, et kĂ”ik teie meeskonna liikmed, kes tegelevad YAML-iga, peavad kindlasti kasutama ainult tĂŒhikuid (nagu YAML-i spetsifikatsioon nĂ”uab).

Igas normaalses tekstiredaktoris saab seadistada automaatse tabulatsiooni asendamise mÀÀratud arvu tĂŒhikutega, seega ei ole vaja karta kapriisse tabulatsiooni pooldajaid. Tab pole millegi pĂ€rast muretseda.

Nagu iga YAML-i vihkaja hĂ€sti teab, ei paista ekraanil tabulatsiooni ja tĂŒhikute vahel vahet. Ja kui midagi ei paista, meenutatakse seda tavaliselt viimases jĂ€rjekorras, peale seda, kui on vĂ€lja peetud, kontrollitud ja kĂ”rvaldatud kĂ”ik teised vĂ”imalikud probleemid. Tunni aeg, mis kulutatakse vale tabulatsiooni vĂ”i tĂŒhikute ploki leidmiseks, kutsub hĂ€dasti esile vajalikkuse luua poliitika selle kasutamise osas ning seejĂ€rel rakendada selle jĂ€rgimise stoilist kontrolli (nt Git-hook'i kaudu, et sundida linters lĂ€bi vaatama).

7. Parem vĂ€hem, aga paremini (vĂ”i rohkem – see on vĂ€hem)

MÔned inimesed armastavad kirjutada YAML-is, kuna see toob esile struktuuri. Nad kasutavad aktiivselt sisestusi, et eristada andmebloke. See on omamoodi petmine, et jÀljendada, nagu markeerimiskeel, kus kasutatakse selgeid eraldajaid.

Siin on sellise struktuursuse nÀide Ansible'i dokumentatsioonist:

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

MÔnele inimesele aitab selline variandistruktuur YAML-i peas paremini seada, teisi aga Àrritab see liigsete, nende arvates, sisestustega.

Kuid kui olete YAML-dokumendi omanik ja vastutate selle ĂŒle, siis teie ja ainult teie peate mÀÀrama, kuidas kasutada sisestusi. Kui suured sisestused teid Ă€rritavad, siis viige need miinimumini, mis on vĂ”imalikult vĂ€ike YAML-i spetsifikatsiooni kohaselt. NĂ€iteks vĂ”ib ĂŒlaltoodud fail Ansible'i dokumentatsioonist kirjutada ĂŒmber jĂ€rgmiselt:

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

8. Kasutage mallide

Kui tÀidate YAML-faili ja kordate pidevalt samu vigu, on mÔistlik lisada sinna malli nÀidis kommentaarina. Siis jÀrgmine kord saate lihtsalt see mall kopeerida ja sinna reaalsed andmed sisestada, nÀiteks:

---
# - <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. Kasutage midagi muud

Kui rakendus ei hoia teid enda kĂŒljes, siis vĂ”ib-olla tasub YAML asendada mĂ”ne teise formaadiga. Aja jooksul vĂ”ivad konfiguratsioonifailid muutuda ja siis on parem need lihtsalt lihtsateks Lua vĂ”i Python skriptideks ĂŒmber kujundada.

YAML on suurepÀrane asi, mida paljud hindavad minimalistlikkuse ja lihtsuse tÔttu, kuid see pole kaugeltki ainus tööriist teie arsenalis. Seega mÔnikord vÔib sellest loobuda. YAML-i jaoks on lihtne leida parsimisraamatukogusid, seega kui pakute mugavaid migratsioonivÔimalusi, taluvad teie kasutajad selle loobumist suhteliselt valulikult.

Kuid kui YAML-ist ei pÀÀse, siis vÔtke kasutusele need 10 nÔuannet ja vÔitke oma vastumeelsus YAML-i vastu kord ja kÔik!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster