Tutti amemu Ansible, ma Ansible hè YAML. Ci sò parechji formati per i schedarii di cunfigurazione: listi di valori, paràmetri-valori, file INI, YAML, JSON, XML è assai altri. In ogni casu, per parechje ragioni fora di tutti, YAML hè spessu cunsideratu particularmente difficiule. In particulare, malgradu u so minimalismu rinfrescante è e capacità impressiunanti per travaglià cù i valori gerarchichi, a sintassi YAML pò esse fastidiosa cù u so approcciu Python-like à l'indentazione.
Se YAML ti piscia, pudete - è duvete! - pigliate i seguenti 10 passi per riduce a vostra frustrazione à un livellu accettabile è innamurà di YAML. Cume si cunvene à sta lista, i nostri dece cunsiglii seranu numerati da zero, aghjunghjemu meditazioni è pratiche spirituali à vuluntà 😉
0. Fate u vostru editore travaglià
Ùn importa micca quale editore di testu avete, ci hè probabilmente almenu un plugin per travaglià cù YAML. Se ùn avete micca unu, truvate è installate immediatamente. U tempu passatu à circà è a stallazione hà da pagà parechje volte ogni volta chì avete da edità YAML.
Per esempiu, editore
Emacs in modu YAML è mostra spazii.
Se u vostru editore preferitu ùn hà micca un modu YAML, allora alcuni di i prublemi ponu esse risolti travagliendu cù i paràmetri. Per esempiu, l'editore di testu standard di GNOME Gedit ùn hà micca un modu YAML, ma per automaticamente mette in risaltu a sintassi YAML è vi permette di cunfigurà u travagliu cù indentazioni:
Impostazione di indentazioni in Gedit.
Un plugin
In altre parolle, passanu u tempu à amparà nantu à u vostru editore preferitu. Scuprite ciò chì ellu o a so cumunità di sviluppu hà da offre per travaglià cù YAML, è utilizate queste funzioni. Di sicuru, ùn ti dispiace micca.
1. Aduprate un linter
Ideale, i linguaggi di prugrammazione è i linguaggi di marcatura utilizanu sintassi prevedibile. L'urdinatori sò boni à prevedibilità, per quessa chì u cuncettu di
Installà
$ sudo dnf install yamllint
Allora simpricimenti eseguite yamllint, passendu u schedariu YAML per verificà. Questu hè ciò chì pare si passa un schedariu cù un errore à linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
I numeri à manca ùn sò micca u tempu, ma i coordenate di l'errore: u numeru di fila è colonna. A descrizzione di l'errore ùn pò micca dì nunda, ma sapete esattamente induve hè. Basta à vede stu locu in u codice, è più prubabilmente tuttu diventerà chjaru.
Quandu yamllint ùn trova micca errore in un schedariu, nunda ùn hè stampatu à u screnu. Se un tali silenziu ti fa paura è vulete un pocu di più feedback, allora pudete eseguisce u linter cù u cumandamentu di ecu cundizionale via un doppiu ampersand (&&), cum'è questu:
$ yamllint perfect.yaml && echo "OK"
OK
In POSIX, un doppiu ampersand spara se è solu s'ellu u cumandamentu precedente torna 0. È yamllint torna solu u numeru d'errori truvati, chì hè per quessa chì tutta a custruzzione cundizionale travaglia.
2. Scrivite in Python, micca YAML
Se YAML ti piscia veramente, ùn scrivite micca, literalmente. Succece chì YAML hè u solu furmatu chì l'applicazione capisce. Ma ancu in questu casu, ùn hè micca necessariu di creà un schedariu YAML. Scrivite nantu à ciò chì ti piace è poi cunvertisce. Per esempiu, ci hè una grande biblioteca per Python
Autoconversione
In questu casu, u schedariu di dati hè ancu un script Python chì genera YAML. Stu metudu hè megliu adattatu per i picculi gruppi di dati. Simply scrivite i dati JSON in una variabile Python, preface cù una direttiva d'importazione, è à a fine di u schedariu aghjunghje trè linee per implementà l'output.
#!/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
Avà eseguimu stu schedariu in Python è uttene u schedariu 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
Questu hè YAML perfettamente validu, ma yamllint vi avviserà chì ùn principia micca cù -. Ebbè, questu pò esse facilmente correttu manualmente o ligeramente mudificatu in u script Python.
Cunversione via scripts
In questu casu, prima scrivemu in JSON, è poi eseguite u cunvertitore cum'è un script Python separatu, chì pruduce YAML cum'è output. Comparatu à u metudu precedente, stu metudu scala megliu, postu chì a cunversione hè separata da i dati.
Prima, creamu un schedariu JSON example.json, per esempiu, pudete piglià da
{
"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"
}
}
}
}
}
Allora creeremu un script di cunvertitore simplice è salvà sottu u nome json2yaml.py. Stu script importa i moduli YAML è JSON Python, è carica un schedariu JSON specificatu da l'utilizatore, esegue a cunversione, è scrive i dati à u schedariu 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()
Salvà stu script in u percorsu di u sistema è eseguite cum'è necessariu:
$ ~/bin/json2yaml.py example.json
3. Parse assai è spessu
Calchì volta hè utile à guardà un prublema da un altru angulu. Sè avete prublemi à rapprisintà e relazioni trà i vostri dati in YAML, pudete trasfurmà temporaneamente in qualcosa di più familiar.
Per esempiu, sè vo site còmode di travaglià cù listi di dizziunariu o JSON, pudete cunvertisce YAML à JSON cù solu dui cumandamenti in a cunchiglia interattiva di Python. Diciamu chì avete un schedariu YAML mydata.yaml, allora questu hè ciò chì parerebbe:
$ 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.'}
Pudete truvà parechje altre esempi nantu à questu tema. Inoltre, ci sò parechji cunvertitori in linea è parsers lucali dispunibili. Allora ùn esitò à riformattà i dati quandu vi vede solu un mischju incomprensibile in questu.
4. Leghjite e specifiche
Riturnà à YAML dopu una longa pausa, hè utile per visità
5. Pseudo-configs
Quandu scrivite un libru o un articulu, hè sempre utile à prima sketch out un schema preliminare, almenu in a forma di una tabella di cuntenutu. Hè u listessu cù YAML. Hè assai prubabile, avete una idea di quale dati deve esse scritti in un schedariu YAML, ma ùn avete micca veramente capitu cumu cunnetta cù l'altri. Dunque, prima di sculptà YAML, disegnate una pseudo-config.
Pseudo-config hè simile à pseudo-codice, induve ùn avete micca da preoccupassi di struttura o indentazione, relazioni genitori-figlioli, eredi è nidificazione. Hè listessa quì: disegnà iterazioni di e dati cumu si sviluppanu in a vostra testa.
Pseudo-config lista di programatori (Martin è Tabitha) è e so cumpetenze (lingue di prugrammazione: Python, Perl, Pascal è Lisp, Fortran, Erlang, rispettivamente).
Dopu avè disegnatu una pseudo-configurazione nantu à un pezzu di carta, analizà cù cura è, se tuttu hè in ordine, formate in a forma di un schedariu YAML validu.
6. U Tabs vs Spaces Dilemma
Avete da risolve u dilema
In ogni editore di testu normale, pudete cunfigurà tabulazioni auto-corrette à un numeru specificu di spazii, cusì a rivolta di aderenti chjave. Tabulature ùn avete micca a paura.
Cum'è ogni hater YAML sapi bè, ùn pudete micca vede a diffarenza trà tabulazioni è spazii nantu à u screnu. È quandu qualcosa ùn hè micca visibile, hè di solitu l'ultimu ciò chì a ghjente si ricorda, dopu avè risoltu, verificatu è eliminatu tutti l'altri prublemi pussibuli. Una ora di tempu spentu per circà una curva di tabulazione o un bloccu di spazii simpricimenti grida chì avete bisognu urgente di creà una pulitica per l'usu di l'una o l'altru, è poi implementà un cuntrollu di béton armatu per u rispettu di questu (per esempiu, attraversu un ganciu Git per furzà à traversu un linter).
7. Meno hè più (o più hè menu)
Certi pirsuni piace à scrive in YAML perchè enfatiza a struttura. À u listessu tempu, usanu attivamente l'indentazione per evidenziare blocchi di dati. Questa hè una spezia di scam per imità e lingue di marcatura chì utilizanu delimitatori espliciti.
Quì hè un esempiu di tali struttura da
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Per alcuni, sta opzione li aiuta à risolve a struttura YAML in i so capi; per altri, à u cuntrariu, li irrita cù assai indici innecessarii, in u so parè.
Ma s'è vo site u pruprietariu di u documentu YAML è sò rispunsevuli di mantene, allora voi è solu voi deve definisce cumu utilizà l'indentazione. Sè vo site fastidiu da grande padding, mantene à u minimu pussibule secondu a specificazione YAML. Per esempiu, u schedariu di sopra da a documentazione Ansible pò esse riscritta cusì senza alcuna perdita:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Aduprà spazii
Se ripetite constantemente i stessi errori quandu cumplete un schedariu YAML, hè sensu per inserisce un mudellu in questu cum'è cumentu. Allora a prossima volta pudete simpricimenti copià stu mudellu è inserisce dati reali, per esempiu:
---
# - <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. Aduprate qualcosa di differente
Se l'applicazione ùn hà micca un stranglehold nantu à voi, allora puderia vale a pena cambià u YAML à un furmatu diversu. À u tempu, i schedarii di cunfigurazione ponu superà elli stessi è allora hè megliu cunvertisce in script simplici in Lua o Python.
YAML hè una grande cosa chì assai persone amanu per u so minimalismu è simplicità, ma hè luntanu da l'unicu strumentu in u vostru arsenale. Allora qualchì volta pudete ricusà. E biblioteche di analisi sò faciuli di truvà per YAML, dunque se offre opzioni di migrazione facili, i vostri utenti sopravviveranu à questu fallimentu relativamente indolore.
Se ùn pudete micca fà senza YAML, allora pigliate questi 10 cunsiglii è superà a vostra disgrazia di YAML una volta per tutte!
Source: www.habr.com