Meile kõigile meeldib Ansible, kuid Ansible on YAML. Konfiguratsioonifailide vorminguid on palju: väärtuste loendid, parameetri-väärtuste paarid, INI-failid, YAML, JSON, XML ja paljud teised. Kuid mitmel põhjusel peetakse YAMLi sageli eriti keeruliseks. Hoolimata värskendavast minimalismist ja muljetavaldavatest hierarhiliste väärtustega töötamise võimalustest võib YAML-i süntaks olla tüütu oma Pythoni-laadse lähenemisega taandele.
Kui YAML teid vihastab, saate seda teha ja peaksite seda tegema! – tehke järgmised 10 sammu, et vähendada oma frustratsiooni vastuvõetava tasemeni ja armuda YAMLi. Nagu sellele nimekirjale kohane, nummerdatakse meie kümme näpunäidet nullist, lisame meelepäraselt meditatsiooni ja vaimseid praktikaid 😉
0. Pange oma toimetaja tööle
Pole tähtis, milline tekstiredaktor teil on, tõenäoliselt on YAML-iga töötamiseks vähemalt üks pistikprogramm. Kui teil seda pole, otsige see üles ja installige see kohe. Otsimisele ja seadistamisele kulunud aeg tasub end kordades ära iga kord, kui peate YAMLi redigeerima.
Näiteks toimetaja
Emacs YAML-režiimis ja tühikute kuvamine.
Kui teie lemmikredaktoril pole YAML-režiimi, saab mõnda probleemi lahendada seadetega töötades. Näiteks standardsel GNOME-i tekstiredaktoril Gedit ei ole YAML-i režiimi, kuid vaikimisi tõstab see esile YAML-i süntaksi ja võimaldab seadistada tööd taandega:
Taandite määramine Geditis.
Pistikprogramm
Teisisõnu kulutage aega oma lemmiktoimetaja tundmaõppimiseks. Uurige, mida tal või tema arenduskogukonnal on YAML-iga töötamiseks pakkuda, ja kasutage neid funktsioone. Te ei kahetse seda kindlasti.
1. Kasutage linterit
Ideaalis kasutavad programmeerimiskeeled ja märgistuskeeled prognoositavat süntaksit. Arvutid on hästi ennustatavad, mistõttu on kontseptsioon
Installi
$ sudo dnf install yamllint
Seejärel käivitage lihtsalt yamllint, edastades selle kontrollimiseks YAML-faili. See näeb välja selline, kui edastate linterile veaga faili:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Vasakpoolsed numbrid ei ole kellaaeg, vaid vea koordinaadid: rea ja veeru number. Vea kirjeldus ei pruugi teile midagi öelda, kuid teate täpselt, kus see on. Lihtsalt vaadake seda kohta koodis ja tõenäoliselt saab kõik selgeks.
Kui yamllint failis vigu ei leia, ei prindita ekraanile midagi. Kui selline vaikus teid hirmutab ja soovite veidi rohkem tagasisidet, saate linteri käivitada tingimusliku kaja käsuga topelt-A (&&) abil, näiteks järgmiselt:
$ yamllint perfect.yaml && echo "OK"
OK
POSIXis käivitub topelt-A siis ja ainult siis, kui eelnev käsk tagastab 0. Ja yamllint tagastab lihtsalt leitud vigade arvu, mistõttu kogu see tingimuslik konstruktsioon töötab.
2. Kirjutage Pythonis, mitte YAML-is
Kui YAML teid tõesti vihastab, siis ärge kirjutage sellesse sõna otseses mõttes. Juhtub, et YAML on ainus vorming, mida rakendus mõistab. Kuid isegi sel juhul pole YAML-faili vaja luua. Kirjutage sellele, mis teile meeldib, ja seejärel teisendage. Näiteks on Pythoni jaoks suurepärane raamatukogu
Enesemuutmine
Sellisel juhul on andmefailiks ka Pythoni skript, mis genereerib YAML-i. See meetod sobib kõige paremini väikeste andmekogumite jaoks. Kirjutate lihtsalt JSON-andmed Pythoni muutujasse, sisestate selle eeskätt impordidirektiivi ja lisate faili lõppu kolm rida väljundi rakendamiseks.
#!/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
Nüüd käivitame selle faili Pythonis ja 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: 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
See on täiesti kehtiv YAML, kuid yamllint hoiatab teid, et see ei alga tähega -. Noh, seda saab hõlpsasti käsitsi parandada või Pythoni skriptis pisut muuta.
Teisendamine skriptide kaudu
Sel juhul kirjutame esmalt JSON-is ja seejärel käivitame konverteri eraldi Pythoni skriptina, mis toodab väljundina YAML-i. Võrreldes eelmise meetodiga, skaleerib see meetod paremini, kuna teisendamine toimub andmetest eraldi.
Kõigepealt loome näiteks JSON-faili example.json, millest saate selle võtta
{
"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"
}
}
}
}
}
Seejärel loome lihtsa konverteriskripti ja salvestame selle nimega json2yaml.py. See skript impordib nii YAML kui ka JSON Pythoni moodulid ning laadib kasutaja määratud JSON-faili, teostab teisenduse 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()
Salvestage see skript süsteemiteele ja käivitage see vastavalt vajadusele:
$ ~/bin/json2yaml.py example.json
3. Parsi palju ja sageli
Mõnikord on kasulik vaadata probleemi teise nurga alt. Kui teil on probleeme andmete vaheliste suhete esitamisega YAML-is, saate need ajutiselt muuta millekski tuttavamaks.
Näiteks kui teile sobib sõnastikuloendite või JSON-iga töötamine, saate YAML-i JSON-iks teisendada vaid kahe käsuga interaktiivses Pythoni kestas. Oletame, et teil on YAML-fail mydata.yaml, siis näeb see välja järgmine:
$ 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.'}
Sellel teemal leiate palju muid näiteid. Lisaks on saadaval palju võrgumuundureid ja kohalikke parsereid. Nii et ärge kartke andmeid ümber vormindada, kui näete nendes vaid arusaamatut segadust.
4. Lugege tehnilisi andmeid
Pärast pikka pausi YAMLi naastes on kasulik külastada
5. Pseudokonfiguratsioonid
Raamatut või artiklit kirjutades on alati kasulik esmalt visandada esialgne konspekt, vähemalt sisukorra kujul. Sama on YAML-iga. Tõenäoliselt on teil ettekujutus sellest, millised andmed tuleb YAML-faili kirjutada, kuid te ei saa tegelikult aru, kuidas neid omavahel ühendada. Seetõttu joonistage enne YAMLi kujundamist pseudokonfiguratsioon.
Pseudokonfiguratsioon sarnaneb pseudokoodiga, kus te ei pea muretsema struktuuri ega taande, vanema-lapse suhete, pärimise ja pesastumise pärast. Siin on sama: joonistate andmete iteratsiooni nii, nagu need teie peas tekivad.
Pseudokonfiguratsioonide loendis programmeerijad (Martin ja Tabitha) ja nende oskused (programmeerimiskeeled vastavalt Python, Perl, Pascal ja Lisp, Fortran, Erlang).
Pärast pseudokonfiguratsiooni paberile joonistamist analüüsige seda hoolikalt ja kui kõik on korras, vormindage see kehtiva YAML-failina.
6. Tabs vs. spaces dilemma
Peate dilemma lahendama
Igas tavalises tekstiredaktoris saate automaatse parandamise tabeldusmärke seadistada teatud arvule tühikutele, nii et peamised järgijad mässavad Tab sa ei pea kartma.
Nagu iga YAMLi vihkaja teab, ei näe te ekraanil vahekaartide ja tühikute vahel vahet. Ja kui midagi pole näha, on see tavaliselt viimane asi, mida inimesed mäletavad pärast seda, kui nad on kõik muud võimalikud probleemid läbi sorteerinud, kontrollinud ja kõrvaldanud. Tund aega, mis kulub tabelikõvera või tühikute ploki otsimisele, karjub lihtsalt, et peate kiiresti looma ühe või teise kasutamise poliitika ja seejärel rakendama raudbetoonist selle järgimise kontrolli (näiteks Giti konks, et suruda see läbi linteri).
7. Vähem on rohkem (või rohkem on vähem)
Mõnele inimesele meeldib kirjutada YAML-is, kuna see rõhutab struktuuri. Samal ajal kasutavad nad andmeplokkide esiletõstmiseks aktiivselt taanet. See on omamoodi pettus, mille eesmärk on jäljendada selgesõnalisi eraldajaid kasutavaid märgistuskeeli.
Siin on näide sellisest struktuurist
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Mõne jaoks aitab see valik YAML-i struktuuri oma peas selgeks teha, teisi, vastupidi, ärritab see palju nende arvates tarbetuid taane.
Aga kui olete YAML-dokumendi omanik ja vastutate selle hooldamise eest, siis sina ja ainult sina peab määratlema taande kasutamise. Kui teid häirib suur polster, hoidke seda vastavalt YAML-i spetsifikatsioonidele võimalikult vähe. Näiteks ülaltoodud faili Ansible dokumentatsioonist saab ilma kadudeta ümber kirjutada 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 tühikuid
Kui kordate YAML-faili täites pidevalt samu vigu, on mõttekas lisada sellesse mall kommentaarina. Järgmisel korral saate selle malli lihtsalt kopeerida ja sisestada sinna reaalsed andmed, 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. Kasuta midagi muud
Kui rakendusel pole kägistust, tasub YAML-i vormingusse muuta. Aja jooksul võivad konfiguratsioonifailid endast välja kasvada ja siis on parem need Lua või Pythoni lihtsateks skriptideks teisendada.
YAML on suurepärane asi, mida paljud armastavad oma minimalismi ja lihtsuse pärast, kuid see pole kaugeltki ainus tööriist teie arsenalis. Nii et mõnikord võite sellest keelduda. Parsimise teeke on YAML-i jaoks lihtne leida, nii et kui pakute lihtsaid migreerimisvalikuid, elavad teie kasutajad selle tõrke suhteliselt valutult üle.
Kui te ei saa ilma YAMLita hakkama, kasutage neid 10 näpunäidet ja saage lõplikult üle oma vastumeelsus YAMLi vastu!
Allikas: www.habr.com