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ä.
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
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:
Sisennysten asettaminen Geditissä.
Plugin
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
perustaa
$ 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
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
{
"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
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.
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
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
# 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