10 askelta YAML Zeniin

Me kaikki rakastamme Ansiblea, mutta Ansible on YAML. Asetustiedostoille on monia muotoja: arvoluettelot, parametri-arvo-parit, INI-tiedostot, YAML, JSON, XML ja monet muut. YAML:ää pidetään kuitenkin usein erityisen vaikeana useista syistä. Huolimatta virkistävästä minimalismista ja vaikuttavista hierarkkisten arvojen kanssa työskentelymahdollisuuksistaan ​​huolimatta YAML-syntaksi voi olla ärsyttävää sen Python-tyyppisellä sisennysmenetelmällä.

10 askelta YAML Zeniin

Jos YAML suututtaa sinut, voit – ja sinun pitäisi! – Suorita seuraavat 10 vaihetta vähentääksesi turhautumistasi hyväksyttävälle tasolle ja rakastuaksesi YAML:ään. Kuten tälle listalle kuuluu, kymmenen vinkkiämme numeroidaan tyhjästä, lisäämme meditaatiota ja henkisiä harjoituksia mieleisekseen 😉

0. Laita editori toimimaan

Sillä ei ole väliä, mikä tekstieditori sinulla on, YAML:n kanssa työskentelemiseen on luultavasti ainakin yksi laajennus. Jos sinulla ei ole sellaista, etsi ja asenna se välittömästi. Hakuun ja määritykseen käytetty aika maksaa itsensä takaisin monta kertaa, kun joudut muokkaamaan YAML:a.

Esimerkiksi editori Atomi tukee oletuksena YAML:ia, mutta GNU Emacsille sinun on asennettava lisäpaketteja, esim. yaml-tila.

10 askelta YAML Zeniin

Emacs YAML-tilassa ja näyttää välilyöntejä.

Jos suosikkieditorillasi ei ole YAML-tilaa, osa ongelmista voidaan ratkaista työskentelemällä asetusten kanssa. Esimerkiksi tavallisessa GNOME-tekstieditorissa Gedit ei ole YAML-tilaa, mutta se korostaa oletusarvoisesti YAML-syntaksia ja antaa sinun määrittää työn sisennysten kanssa:

10 askelta YAML Zeniin

Sisennysten asettaminen Geditissä.

Plugin vetotiloja Gedit näyttää välilyönnit pisteinä, mikä poistaa epäselvyydet sisennystasoilla.

Toisin sanoen, käytä aikaa oppiaksesi suosikkieditoristasi. Ota selvää, mitä hänellä tai hänen kehitysyhteisöllään on tarjota työskennelläksesi YAML:n kanssa, ja käytä näitä ominaisuuksia. Et varmasti tule katumaan sitä.

1. Käytä linteriä

Ihannetapauksessa ohjelmointikielet ja merkintäkielet käyttävät ennustettavaa syntaksia. Tietokoneet ovat hyviä ennustettavuudessa, minkä vuoksi käsite lintera. Jos se on 40 vuoden olemassaolonsa aikana mennyt ohitse etkä edelleenkään käytä YAML-linteriä, on aika kokeilla yamllintia.

perustaa yamllint Voit käyttää tavallista Linux-paketinhallintaa. Esimerkiksi sisään Red Hat Enterprise Linux 8 tai Fedora se on tehty näin:

$ sudo dnf install yamllint

Sitten suoritat yamllint ja välität sen YAML-tiedoston tarkistaaksesi. Tältä se näyttää, jos välität tiedoston, jossa on virhe, linteriin:

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

Vasemmalla olevat numerot eivät ole aikaa, vaan virheen koordinaatteja: rivin ja sarakkeen numero. Virheen kuvaus ei välttämättä kerro mitään, mutta tiedät tarkalleen missä se on. Katso vain tätä paikkaa koodissa, ja todennäköisesti kaikki tulee selväksi.

Kun yamllint ei löydä tiedostosta virheitä, näytölle ei tulosteta mitään. Jos tällainen hiljaisuus pelottaa sinua ja haluat hieman enemmän palautetta, voit ajaa linterin ehdollisen kaikukomennolla kaksois-et-merkin (&&) kautta, kuten näin:

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

POSIXissa kaksois-et-merkki käynnistyy jos ja vain jos edellinen komento palauttaa 0:n. Ja yamllint palauttaa vain löydettyjen virheiden määrän, minkä vuoksi koko ehdollinen rakenne toimii.

2. Kirjoita Pythonilla, ei YAML:lla

Jos YAML todella suututtaa sinut, älä vain kirjoita siihen kirjaimellisesti. Sattuu niin, että YAML on ainoa muoto, jonka sovellus ymmärtää. Mutta tässäkään tapauksessa ei ole tarpeen luoda YAML-tiedostoa. Kirjoita mistä pidät ja muunna sitten. Esimerkiksi Pythonille on loistava kirjasto pyyaml ja kaksi muunnosmenetelmää: itsemuunnos ja muunnos skriptien avulla.

Itsemuunnos

Tässä tapauksessa datatiedosto on myös Python-skripti, joka luo YAML:n. Tämä menetelmä sopii parhaiten pienille tietojoukoille. Kirjoitat vain JSON-tiedot Python-muuttujaan, esität sen tuontidirektiivillä ja lisäät tiedoston loppuun kolme riviä tulosteen toteuttamiseksi.

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

Nyt suoritamme tämän tiedoston Pythonissa ja saamme output.yaml-tiedoston:

$ 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

Tämä on täysin kelvollinen YAML, mutta yamllint varoittaa, että se ei ala -. No, tämä voidaan helposti korjata manuaalisesti tai muokata hieman Python-skriptillä.

Muuntaminen skriptien avulla

Tässä tapauksessa kirjoitamme ensin JSON-kielellä ja suoritamme sitten muuntimen erillisenä Python-komentosarjana, joka tuottaa YAML:n tulosteena. Edelliseen menetelmään verrattuna tämä menetelmä skaalautuu paremmin, koska muunnos on erillinen tiedosta.

Luodaan ensin JSON-tiedosto example.json, josta voit esimerkiksi ottaa sen 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"
			}
		  }
		}
	  }
	}

Sitten luomme yksinkertaisen muuntimen komentosarjan ja tallennamme sen nimellä json2yaml.py. Tämä komentosarja tuo sekä YAML- että JSON Python -moduulit ja lataa käyttäjän määrittämän JSON-tiedoston, suorittaa muunnoksen ja kirjoittaa tiedot output.yaml-tiedostoon.

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

Tallenna tämä komentosarja järjestelmäpolkuun ja suorita se tarvittaessa:

$ ~/bin/json2yaml.py example.json

3. Jäsennä paljon ja usein

Joskus on hyödyllistä tarkastella ongelmaa eri näkökulmasta. Jos sinulla on vaikeuksia edustaa tietojesi välisiä suhteita YAML:ssa, voit väliaikaisesti muuttaa sen tutummaksi.

Jos esimerkiksi olet mukava työskennellä sanakirjaluetteloiden tai JSON-tiedostojen kanssa, voit muuntaa YAML:n JSONiksi vain kahdella komennolla interaktiivisessa Python-kuoressa. Oletetaan, että sinulla on YAML-tiedosto mydata.yaml, niin se näyttää tältä:

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

Löydät monia muita esimerkkejä tästä aiheesta. Lisäksi saatavilla on monia online-muuntimia ja paikallisia jäsentimiä. Älä siis epäröi muotoilla tietoja uudelleen, kun näet siinä vain käsittämättömän sotkun.

4. Lue tekniset tiedot

Palatakseni YAML:iin pitkän tauon jälkeen, on hyödyllistä vierailla yaml.org ja lue tekniset tiedot (spesifikaatiot) uudelleen. Jos sinulla on vaikeuksia YAML:n kanssa, mutta et ole päässyt määrittelyyn, on aika korjata tämä tilanne. Tekniset tiedot ovat yllättävän helppoja kirjoittaa, ja syntaksivaatimukset on havainnollistettu lukuisilla esimerkeillä Luku 6.

5. Pseudo-asetukset

Kirjaa tai artikkelia kirjoitettaessa kannattaa aina ensin hahmotella alustava linjaus, ainakin sisällysluettelon muodossa. Sama on YAML:n kanssa. Todennäköisesti sinulla on käsitys siitä, mitä tietoja on kirjoitettava YAML-tiedostoon, mutta et oikein ymmärrä kuinka yhdistää se toisiinsa. Siksi, ennen kuin muotoilet YAML:n, piirrä pseudo-konfiguraatio.

Pseudo-config on samanlainen kuin pseudokoodi, jossa sinun ei tarvitse huolehtia rakenteesta tai sisennyksestä, vanhempien ja lasten välisistä suhteista, periytymisestä ja sisäkkäisyydestä. Se on sama täällä: piirrät iteraatioita tiedoista, kun ne syntyvät päässäsi.

10 askelta YAML Zeniin

Pseudo-konfiguraatioluettelo ohjelmoijat (Martin ja Tabitha) ja heidän taitonsa (ohjelmointikielet: Python, Perl, Pascal ja Lisp, Fortran, Erlang, vastaavasti).

Kun olet piirtänyt pseudokonfiguraation paperille, analysoi se huolellisesti ja jos kaikki on kunnossa, muotoile se kelvolliseen YAML-tiedostoon.

6. Välilehdet vs. välilyönnit -ongelma

Sinun on ratkaistava dilemma "sarkaimet vai välilyönnit?". Ei globaalissa mielessä, vaan vain organisaatiosi tai ainakin projektin tasolla. Sillä ei ole väliä, onko kyseessä jälkikäsittely sed-komentosarjan kanssa, tekstieditorien asentaminen ohjelmoijien koneille tai yleinen kuittien ottaminen tiukasta linterin ohjeiden noudattamisesta irtisanomisen uhalla, vaan kaikki tiimisi jäsenet, jotka YAML:iin liittyvien tavalla tai toisella on käytettävä vain välilyöntejä (YAML-määrityksen edellyttämällä tavalla).

Missä tahansa tavallisessa tekstieditorissa voit määrittää automaattisesti korjaavat sarkaimet tietylle määrälle välilyöntejä, jotta keskeisten kannattajien kapina Kieleke sinun ei tarvitse pelätä.

Kuten jokainen YAML-vihaaja tietää hyvin, et näe eroa sarkainten ja välilyöntien välillä näytöllä. Ja kun jokin ei ole näkyvissä, se on yleensä viimeinen asia, jonka ihmiset muistavat, kun he ovat selvittäneet, tarkistaneet ja poistaneet kaikki muut mahdolliset ongelmat. Tunti aikaa, joka kuluu taulukkokäyrän tai välilohkon etsimiseen, huutaa yksinkertaisesti, että sinun on pikaisesti luotava käytäntö jommankumman tai toisen käytölle ja sitten suoritettava teräsbetonitarkastus sen noudattamisen suhteen (esim. Git-koukku pakottaaksesi sen linterin läpi).

7. Vähemmän on enemmän (tai enemmän on vähemmän)

Jotkut ihmiset haluavat kirjoittaa YAML-kielellä, koska se korostaa rakennetta. Samaan aikaan he käyttävät aktiivisesti sisennystä tietolohkojen korostamiseen. Tämä on eräänlainen huijaus, jolla jäljitellään selkeitä erottimia käyttäviä merkintäkieliä.

Tässä on esimerkki tällaisesta rakenteesta Asiallinen dokumentaatio:

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

Joillekin tämä vaihtoehto auttaa heitä selvittämään YAML-rakenteen päässään, toisia päinvastoin se ärsyttää heitä monilla heidän mielestään tarpeettomilla sisennyksillä.

Mutta jos olet YAML-asiakirjan omistaja ja olet vastuussa sen ylläpidosta, niin sinä ja vain sinä täytyy määrittää, kuinka sisennystä käytetään. Jos suuret pehmusteet ärsyttävät sinua, pidä se mahdollisimman pienenä YAML-spesifikaation mukaan. Esimerkiksi yllä oleva Ansible-dokumentaation tiedosto voidaan kirjoittaa uudelleen seuraavasti ilman menetyksiä:

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

8. Käytä aihioita

Jos toistat jatkuvasti samoja virheitä täyttäessäsi YAML-tiedostoa, on järkevää lisätä siihen malli kommenttina. Seuraavalla kerralla voit kopioida tämän mallin ja syöttää siihen todellisia tietoja, esimerkiksi:

---
# - <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. Käytä jotain muuta

Jos sovelluksella ei ole kuristusta, kannattaa ehkä vaihtaa YAML toiseen muotoon. Ajan myötä määritystiedostot voivat kasvaa itsensä ulkopuolelle, ja sitten on parempi muuntaa ne yksinkertaisiksi skripteiksi Luassa tai Pythonissa.

YAML on hieno asia, jota monet rakastavat sen minimalismista ja yksinkertaisuudesta, mutta se ei ole kaukana ainoa työkalu arsenaalissasi. Joten joskus voit kieltäytyä siitä. Jäsennyskirjastot on helppo löytää YAML:lle, joten jos tarjoat helppoja siirtovaihtoehtoja, käyttäjäsi selviävät tästä epäonnistumisesta suhteellisen kivuttomasti.

Jos et tule toimeen ilman YAML:a, ota nämä 10 vinkkiä ja voita YAML-inhosi lopullisesti!

Lähde: will.com

Lisää kommentti