Tonse timakonda Ansible, koma Ansible ndi YAML. Pali mitundu yambiri yamafayilo osinthira: mindandanda yamakhalidwe, ma parameter-value pairs, mafayilo a INI, YAML, JSON, XML ndi ena ambiri. Komabe, pazifukwa zingapo mwa zonsezi, YAML nthawi zambiri imakhala yovuta kwambiri. Makamaka, ngakhale imatsitsimula minimalism komanso kuthekera kochititsa chidwi kogwira ntchito ndi mikhalidwe yotsogola, mawu a YAML amatha kukhala okwiyitsa ndi njira yake ya Python ngati indentation.
Ngati YAML ikukwiyitsani, mutha - ndipo muyenera! - tengani njira 10 zotsatirazi kuti muchepetse kukhumudwa kwanu kufika pamlingo wovomerezeka ndikuyamba kukondana ndi YAML. Monga kuyenerana ndi mndandandawu, maupangiri athu khumi adzawerengedwa kuyambira pachiyambi, tidzawonjezera kusinkhasinkha ndi machitidwe auzimu momwe tingafune π
0. Pangani mkonzi wanu kugwira ntchito
Ziribe kanthu kuti muli ndi zolemba zotani, mwina pali pulogalamu yowonjezera imodzi yogwirira ntchito ndi YAML. Ngati mulibe, pezani ndikuyiyika nthawi yomweyo. Nthawi yomwe mumasaka ndikukhazikitsa imalipira kangapo nthawi iliyonse mukasintha YAML.
Mwachitsanzo, mkonzi
Emacs mu YAML mode ndi malo owonetsera.
Ngati mkonzi yemwe mumakonda alibe mawonekedwe a YAML, ndiye kuti zovuta zina zitha kuthetsedwa pogwira ntchito ndi zosintha. Mwachitsanzo, Gedit yokhazikika ya GNOME ilibe mawonekedwe a YAML, koma mwachisawawa imawunikira mawu a YAML ndikukulolani kuti musinthe ntchito ndi ma indentations:
Kukhazikitsa ma indents mu Gedit.
Pulogalamu yowonjezera
Mwanjira ina, patulani nthawi yophunzira za mkonzi wanu womwe mumakonda. Dziwani zomwe iye kapena gulu lake lachitukuko angapereke pogwira ntchito ndi YAML, ndikugwiritsa ntchito izi. Inu ndithudi simudzanong'oneza bondo.
1. Gwiritsani ntchito linter
Momwemo, zilankhulo zamapulogalamu ndi zilankhulo zolembera zimagwiritsa ntchito mawu odziwikiratu. Makompyuta ndi abwino kulosera, ndichifukwa chake lingaliro la
Ikani
$ sudo dnf install yamllint
Kenako mumangoyendetsa yamllint, ndikudutsa fayilo ya YAML kuti muwone. Izi ndi zomwe zimawoneka ngati mutapereka fayilo yokhala ndi cholakwika ku linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Manambala kumanzere si nthawi, koma makonzedwe a zolakwika: mzere ndi nambala ya mzere. Kufotokozera kwa cholakwikacho sikungakuuzeni chilichonse, koma mukudziwa komwe kuli. Ingoyang'anani malo awa mu code, ndipo mwinamwake zonse zidzamveka bwino.
Yamllint ikapeza palibe cholakwika mufayilo, palibe chomwe chimasindikizidwa pazenera. Ngati kukhala chete koteroko kukuwopsyezani ndipo mukufuna kuyankhanso pang'ono, ndiye kuti mutha kuyendetsa linter ndi lamulo lokhazikika la echo kudzera pawiri ampersand (&&), monga chonchi:
$ yamllint perfect.yaml && echo "OK"
OK
Mu POSIX, ma ampersand amawotcha ngati ndipo pokhapokha ngati lamulo lapitalo libweza 0. Ndipo yamllint imangobweza kuchuluka kwa zolakwika zomwe zapezeka, chifukwa chake kumanga kokhazikikaku kumagwira ntchito.
2. Lembani mu Python, osati YAML
Ngati YAML ikukwiyitsani, musalembe mmenemo, kwenikweni. Zimachitika kuti YAML ndiye mtundu wokhawo womwe pulogalamuyo imamvetsetsa. Koma ngakhale zili choncho, sikofunikira kupanga fayilo ya YAML. Lembani zomwe mumakonda ndikutembenuza. Mwachitsanzo, pali laibulale yayikulu ya Python
Kutembenuka mtima
Pankhaniyi, fayilo ya data ndi Python script yomwe imapanga YAML. Njirayi ndiyoyenera kwambiri pamagulu ang'onoang'ono a data. Mumangolemba deta ya JSON mu mtundu wa Python, yambitsani ndi malangizo otumizira, ndipo kumapeto kwa fayilo onjezerani mizere itatu kuti mugwiritse ntchito zomwe zatuluka.
#!/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
Tsopano tikuyendetsa fayiloyi ku Python ndikupeza fayilo ya 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
Izi ndizovomerezeka za YAML, koma yamllint ikukuchenjezani kuti sizikuyamba ndi -. Chabwino, izi zitha kukonzedwa mosavuta pamanja kapena kusinthidwa pang'ono mu Python script.
Kutembenuka kudzera m'malemba
Pankhaniyi, timalemba koyamba mu JSON, kenako ndikuyendetsa chosinthira ngati cholembera cha Python, chomwe chimatulutsa YAML ngati zotuluka. Poyerekeza ndi njira yapitayi, njira iyi imakula bwino, popeza kutembenuka kumasiyana ndi deta.
Choyamba, tiyeni tipange fayilo ya JSON example.json, mwachitsanzo, mutha kuichotsa
{
"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"
}
}
}
}
}
Kenako tipanga chosinthira chosavuta ndikuchisunga pansi pa dzina json2yaml.py. Zolembazi zimalowetsamo ma module a YAML ndi JSON Python, ndikuyika fayilo ya JSON yodziwika ndi ogwiritsa ntchito, imatembenuza, ndikulemba datayo ku fayilo ya 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()
Sungani script iyi mumayendedwe adongosolo ndikuyendetsa ngati pakufunika:
$ ~/bin/json2yaml.py example.json
3. Phunzirani zambiri komanso pafupipafupi
Nthawi zina zimakhala zothandiza kuyang'ana vuto kumbali ina. Ngati mukuvutika kuyimira maubale pakati pa data yanu mu YAML, mutha kuyisintha kwakanthawi kuti ikhale yodziwika bwino.
Mwachitsanzo, ngati ndinu omasuka kugwira ntchito ndi ndandanda wa mtanthauzira mawu kapena JSON, mutha kusintha YAML kukhala JSON ndi malamulo awiri okha mu chipolopolo cha Python. Tiyerekeze kuti muli ndi fayilo ya YAML mydata.yaml, ndiye izi ndi momwe zingawonekere:
$ 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.'}
Mutha kupeza zitsanzo zina zambiri pamutuwu. Kuphatikiza apo, pali otembenuza ambiri pa intaneti ndi ma parser am'deralo omwe alipo. Chifukwa chake musazengereze kukonzanso deta mukangowona kusamvetsetsana kosamvetsetseka mmenemo.
4. Werengani zofotokozera
Kubwerera ku YAML patapita nthawi yopuma, ndizothandiza kukaona
5. Pseudo-configs
Polemba buku kapena nkhani, zimakhala zothandiza nthawi zonse jambulani autilaini yoyambira, makamaka mumndandanda wazomwe zili mkati. Ndizofanana ndi YAML. Mwinamwake, muli ndi lingaliro la zomwe deta iyenera kulembedwa mu fayilo ya YAML, koma simukumvetsa momwe mungalumikizire wina ndi mzake. Chifukwa chake, musanamembe YAML, jambulani pseudo-config.
Pseudo-config ndi yofanana ndi pseudo-code, pomwe simuyenera kuda nkhawa ndi kapangidwe kake kapena indentation, maubale a makolo ndi mwana, cholowa ndi zisa. Zilinso chimodzimodzi apa: mumajambula zobwerezabwereza zomwe zimabwera m'mutu mwanu.
Olemba mapulogalamu a Pseudo-config (Martin ndi Tabitha) ndi luso lawo (zilankhulo zamapulogalamu: Python, Perl, Pascal ndi Lisp, Fortran, Erlang, motsatana).
Pambuyo pojambula pseudo-config papepala, yang'anani mosamala ndipo, ngati zonse zili bwino, imbani ngati fayilo yovomerezeka ya YAML.
6. The Tabs vs. Spaces Dilemma
Muyenera kuthetsa vutolo
Muzolemba zilizonse zodziwika bwino, mutha kusintha ma tabo owongolera okha ku malo angapo, kotero kupanduka kwa otsatira makiyi. Tab simuyenera kuchita mantha.
Monga aliyense wodana ndi YAML amadziwa bwino, simungathe kuwona kusiyana pakati pa ma tabo ndi malo pazenera. Ndipo pamene chinachake sichikuwoneka, nthawi zambiri chimakhala chinthu chomaliza chomwe anthu amakumbukira, atakonza, kufufuza ndi kuthetsa mavuto ena onse omwe angakhalepo. Ola la nthawi yomwe yatha kufunafuna njira yokhotakhota kapena malo angapo amangokuwa kuti mukufunika kupanga ndondomeko yogwiritsira ntchito imodzi kapena inayo, ndiyeno tsatirani cheke chokhazikika cha konkire kuti mugwirizane nazo (mwachitsanzo, mbedza ya Git kuti muyikakamize kudzera pa linter).
7. Zochepa ndi zambiri (kapena zambiri ndi zochepa)
Anthu ena amakonda kulemba mu YAML chifukwa imatsindika kapangidwe kake. Nthawi yomweyo, amagwiritsa ntchito indentation kuti awonetse midadada ya data. Uwu ndi mtundu wachinyengo kutsanzira zilankhulo zomwe zimagwiritsa ntchito mawu ofotokozera.
Nachi chitsanzo cha kapangidwe kotereku kuchokera
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Kwa ena, njirayi imawathandiza kukonza mapangidwe a YAML m'mitu yawo; kwa ena, m'malo mwake, zimawakwiyitsa ndi zambiri zosafunikira, m'malingaliro awo, ma indents.
Koma ngati ndinu eni chikalata cha YAML ndipo muli ndi udindo wochisunga, ndiye inu ndi inu nokha iyenera kufotokozera momwe mungagwiritsire ntchito indentation. Ngati mukukwiyitsidwa ndi ma padding akulu, sungani momwe mungathere malinga ndi mawonekedwe a YAML. Mwachitsanzo, fayilo yomwe ili pamwambapa kuchokera ku zolemba za Ansible ikhoza kulembedwanso motere popanda kutaya kulikonse:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Gwiritsani ntchito zomwe simunatchulepo
Ngati mumabwereza zolakwika zomwezi nthawi zonse mukadzaza fayilo ya YAML, ndizomveka kuyika template mmenemo ngati ndemanga. Kenako nthawi ina mutha kungotengera template iyi ndikuyika zenizeni pamenepo, mwachitsanzo:
---
# - <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. Gwiritsani ntchito zina
Ngati pulogalamuyo ilibe chotchinga pa inu, ndiye kuti kungakhale koyenera kusintha YAML kukhala mtundu wina. M'kupita kwa nthawi, mafayilo osinthika amatha kudziposa okha ndipo ndi bwino kuwasintha kukhala zolemba zosavuta mu Lua kapena Python.
YAML ndichinthu chabwino chomwe anthu ambiri amakonda chifukwa cha minimalism yake komanso kuphweka kwake, koma ili kutali ndi chida chokhacho chomwe chili mu zida zanu. Choncho nthawi zina mukhoza kukana. Malaibulale ophatikizira ndiosavuta kupeza a YAML, chifukwa chake ngati mupereka njira zosavuta zosamukira, ogwiritsa ntchito anu apulumuka kulepheraku mosavutikira.
Ngati simungathe kuchita popanda YAML, tengani malangizo 10 awa ndikugonjetsa kusakonda kwanu kwa YAML kamodzi!
Source: www.habr.com