Kitang tanan nahigugma sa Ansible, apan ang Ansible kay YAML. Adunay daghang mga format alang sa mga file sa pag-configure: mga lista sa mga kantidad, mga pares nga kantidad sa parameter, mga file sa INI, YAML, JSON, XML ug daghan pa. Bisan pa, alang sa daghang mga hinungdan sa tanan niini, ang YAML kanunay giisip nga labi ka lisud. Sa partikular, bisan pa sa makapalagsik nga minimalism ug makapahingangha nga mga kapabilidad sa pagtrabaho uban ang hierarchical values, ang YAML syntax mahimong makalagot sa iyang Python-like nga pamaagi sa indentation.
Kung ang YAML makapasuko kanimo, mahimo nimo-ug kinahanglan nimo! – buhata ang mosunud nga 10 nga mga lakang aron makunhuran ang imong kapakyasan sa usa ka madawat nga lebel ug mahigugma sa YAML. Ingon nga angay niini nga lista, ang among napulo ka mga tip maihap gikan sa wala, among idugang ang pagpamalandong ug espirituhanong mga buhat sa gusto 😉
0. Himua ang imong editor nga molihok
Dili igsapayan kung unsa ang imong editor sa teksto, tingali adunay labing menos usa ka plugin alang sa pagtrabaho kauban ang YAML. Kung wala kay usa, pangitaa ug i-install kini dayon. Ang oras nga gigugol sa pagpangita ug pag-set up magbayad sa daghang mga higayon sa matag higayon nga kinahanglan nimo nga i-edit ang YAML.
Pananglitan, editor
Emacs sa YAML mode ug nagpakita sa mga luna.
Kung ang imong paborito nga editor wala’y YAML mode, nan ang pipila sa mga problema mahimong masulbad pinaagi sa pagtrabaho sa mga setting. Pananglitan, ang standard GNOME text editor nga Gedit walay YAML mode, apan sa default kini nagpasiugda sa YAML syntax ug nagtugot kanimo sa pag-configure sa trabaho nga adunay mga indentasyon:
Pagbutang sa mga indent sa Gedit.
Usa ka plugin
Sa laing pagkasulti, paggahin og panahon sa pagkat-on mahitungod sa imong paborito nga editor. Hibal-i kung unsa ang gitanyag niya o sa iyang komunidad sa pagpalambo alang sa pagtrabaho kauban ang YAML, ug gamita ang mga bahin. Seguradong dili ka magmahay.
1. Gamit ug linter
Sa tinuud, ang mga programming language ug markup nga mga pinulongan naggamit sa matag-an nga syntax. Ang mga kompyuter maayo sa predictability, mao nga ang konsepto sa
Pag-instalar
$ sudo dnf install yamllint
Unya nagpadagan ka lang sa yamllint, gipasa kini sa YAML file aron susihon. Kini ang hitsura kung imong gipasa ang usa ka file nga adunay sayup sa linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Ang mga numero sa wala dili ang oras, apan ang mga koordinasyon sa sayup: numero sa linya ug kolum. Ang paghulagway sa sayup mahimong dili isulti kanimo bisan unsa, apan nahibal-an nimo kung diin kini. Tan-awa lang kini nga lugar sa code, ug lagmit ang tanan mahimong klaro.
Kung wala’y nakit-an nga mga sayup ang yamllint sa usa ka file, wala’y giimprinta sa screen. Kung ang ingon nga kahilom makahadlok kanimo ug gusto nimo ang usa ka gamay nga feedback, nan mahimo nimong ipadagan ang linter gamit ang conditional echo command pinaagi sa doble nga ampersand (&&), sama niini:
$ yamllint perfect.yaml && echo "OK"
OK
Sa POSIX, ang usa ka doble nga ampersand nagdilaab kung ug kung ang nag-una nga mando mobalik 0. Ug ang yamllint nagbalik lang sa gidaghanon sa mga sayup nga nakit-an, mao nga kini nga tibuuk nga kondisyon nga pagtukod molihok.
2. Isulat sa Python, dili YAML
Kung ang YAML makapasuko kanimo, ayaw lang pagsulat niini, sa literal. Nahitabo nga ang YAML mao ra ang format nga nasabtan sa aplikasyon. Apan bisan sa kini nga kaso, dili kinahanglan nga maghimo usa ka YAML file. Isulat ang imong gusto ug dayon i-convert. Pananglitan, adunay usa ka maayo nga librarya alang sa Python
Pagkakabig sa kaugalingon
Sa kini nga kaso, ang data file usa usab ka script sa Python nga nagpatunghag YAML. Kini nga pamaagi labing angay alang sa gagmay nga mga set sa datos. Isulat ra nimo ang data sa JSON sa usa ka variable sa Python, pasiuna kini sa usa ka direktiba sa pag-import, ug sa katapusan sa file pagdugang tulo ka linya aron ipatuman ang 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
Karon among gipadagan kini nga file sa Python ug makuha ang output.yaml file:
$ 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
Kini hingpit nga balido nga YAML, apan ang yamllint magpasidaan kanimo nga dili kini magsugod sa -. Aw, kini dali nga matul-id sa mano-mano o gamay nga pagbag-o sa script sa Python.
Pagkakabig pinaagi sa mga script
Sa kini nga kaso, una namong isulat sa JSON, ug dayon ipadagan ang converter isip usa ka bulag nga script sa Python, nga nagpatunghag YAML isip output. Kung itandi sa miaging pamaagi, kini nga pamaagi mas maayo nga timbangan, tungod kay ang pagkakabig lahi sa datos.
Una, maghimo kita og JSON file example.json, pananglitan, mahimo nimo kini kuhaon
{
"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"
}
}
}
}
}
Dayon maghimo kami og usa ka yano nga converter script ug i-save kini ubos sa ngalan nga json2yaml.py. Kini nga script nag-import sa duha ka YAML ug JSON Python modules, ug nag-load sa usa ka user-specified JSON file, nagpahigayon sa conversion, ug misulat sa data ngadto sa output.yaml file.
#!/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()
I-save kini nga script sa agianan sa sistema ug padagana kini kung gikinahanglan:
$ ~/bin/json2yaml.py example.json
3. Pag-parse og daghan ug kanunay
Usahay mapuslanon ang pagtan-aw sa usa ka problema gikan sa lainlaing anggulo. Kung naproblema ka sa pagrepresentar sa mga relasyon tali sa imong data sa YAML, mahimo nimo kining temporaryo nga usbon ngadto sa mas pamilyar.
Pananglitan, kung komportable ka nga magtrabaho sa mga lista sa diksyonaryo o JSON, mahimo nimong i-convert ang YAML ngadto sa JSON nga adunay duha lang ka mga sugo sa interactive nga Python shell. Ingnon ta nga naa kay YAML file mydata.yaml, unya mao ni ang hitsura niini:
$ 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.'}
Makita nimo ang daghang uban pang mga pananglitan bahin niini nga hilisgutan. Dugang pa, adunay daghang mga online converter ug lokal nga parser nga magamit. Busa ayaw pagpanuko sa pag-reformat sa datos kung makakita ka lang og dili masabtan nga pagkahugno niini.
4. Basaha ang mga detalye
Pagbalik sa YAML pagkahuman sa taas nga pahulay, mapuslanon ang pagbisita
5. Pseudo-configs
Kung nagsulat usa ka libro o artikulo, kanunay nga mapuslanon ang una nga pag-sketch sa usa ka pasiuna nga outline, labing menos sa porma sa usa ka talaan sa mga sulud. Parehas ra sa YAML. Lagmit, aduna kay ideya kon unsa nga datos ang kinahanglang isulat ngadto sa YAML file, apan dili nimo masabtan kon unsaon kini pagkonektar sa usag usa. Busa, sa dili pa mag-sculpting sa YAML, pagdrowing og pseudo-config.
Ang pseudo-config susama sa pseudo-code, diin dili ka kinahanglan mabalaka bahin sa istruktura o indentation, relasyon sa ginikanan-anak, kabilin ug pagpuga. Parehas kini dinhi: nagdibuho ka nga mga pag-uli sa datos samtang kini mitungha sa imong ulo.
Pseudo-config list programmers (Martin ug Tabitha) ug ang ilang mga kahanas (programming language: Python, Perl, Pascal ug Lisp, Fortran, Erlang, matag usa).
Human sa pagdrowing og pseudo-config sa usa ka piraso nga papel, pag-analisar pag-ayo ug, kung ang tanan naa sa kahusay, i-format kini sa porma sa usa ka balido nga YAML file.
6. Ang Tabs vs. Spaces Dilemma
Kinahanglan nimong sulbaron ang dilemma
Sa bisan unsang normal nga editor sa teksto, mahimo nimong i-configure ang mga tab nga auto-correct sa usa ka piho nga gidaghanon sa mga wanang, mao nga ang pagrebelde sa mga yawe nga nagsunod. Tab dili ka angay mahadlok.
Ingon nga nahibal-an pag-ayo sa matag nagdumot sa YAML, dili nimo makita ang kalainan tali sa mga tab ug mga espasyo sa screen. Ug kung dili makita ang usa ka butang, kasagaran kini ang katapusan nga butang nga mahinumduman sa mga tawo, pagkahuman nga ilang nahan-ay, gisusi ug giwagtang ang tanan nga posible nga mga problema. Usa ka oras nga oras nga gigugol sa pagpangita alang sa usa ka kurba sa tabulasyon o usa ka bloke sa mga wanang nagsinggit nga kinahanglan nimo dayon nga maghimo usa ka palisiya alang sa paggamit sa usa o sa lain, ug dayon ipatuman ang usa ka gipalig-on nga konkreto nga pagsusi alang sa pagsunod niini (pananglitan, pinaagi sa usa ka Git hook aron pugson kini pinaagi sa usa ka linter).
7. Dili kaayo mas daghan (o mas daghan ang dili kaayo)
Ang ubang mga tawo ganahan nga magsulat sa YAML tungod kay kini nagpasiugda sa istruktura. Sa samang higayon, sila aktibong naggamit sa indentation aron i-highlight ang mga bloke sa datos. Kini usa ka matang sa pangilad aron masundog ang mga markup nga mga pinulongan nga naggamit ug klaro nga mga delimiter.
Ania ang usa ka pananglitan sa ingon nga istruktura gikan sa
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Alang sa pipila, kini nga kapilian makatabang kanila sa paghan-ay sa istruktura sa YAML sa ilang mga ulo; alang sa uban, sa kasukwahi, kini makapasuko kanila sa daghang wala kinahanglana, sa ilang opinyon, mga indent.
Apan kung ikaw ang tag-iya sa dokumento sa YAML ug responsable sa pagpadayon niini, nan ikaw ug ikaw ra kinahanglan ipasabut kung giunsa paggamit ang indentation. Kung nasuko ka sa dako nga padding, ipadayon kini sa labing gamay nga posible sumala sa detalye sa YAML. Pananglitan, ang labaw nga file gikan sa Ansible nga dokumentasyon mahimong isulat pag-usab sama niini nga walay pagkawala:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Gamita ang mga blangko
Kung kanunay nimo nga gisubli ang parehas nga mga sayup sa pagpuno sa usa ka file sa YAML, makatarunganon nga magsulud usa ka template niini ingon usa ka komento. Unya sa sunod mahimo nimong kopyahon kini nga template ug isulod ang tinuod nga datos didto, pananglitan:
---
# - <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. Gamit ug lain
Kung ang aplikasyon wala’y stranglehold kanimo, nan mahimo’g angay nga usbon ang YAML sa usa ka lahi nga format. Sa paglabay sa panahon, ang mga file sa pag-configure mahimong modako sa ilang kaugalingon ug unya mas maayo nga i-convert kini sa yano nga mga script sa Lua o Python.
Ang YAML usa ka maayo nga butang nga gihigugma sa daghang mga tawo tungod sa minimalism ug kayano niini, apan kini layo sa bugtong himan sa imong arsenal. Busa usahay makabalibad ka niini. Ang pag-parse sa mga librarya sayon nga pangitaon alang sa YAML, busa kung nagtanyag ka og sayon nga mga kapilian sa paglalin, ang imong mga tiggamit makalahutay niini nga kapakyasan nga medyo walay sakit.
Kung dili nimo mahimo kung wala ang YAML, unya kuhaa kini nga mga tip sa 10 ug buntoga ang imong dili gusto sa YAML sa makausa ug alang sa tanan!
Source: www.habr.com