Tese tinoda Ansible, asi Ansible is YAML. Kune akawanda mafomati emafaira ekumisikidza: rondedzero yezvakakosha, parameter-value pairi, INI mafaera, YAML, JSON, XML nevamwe vazhinji. Nekudaro, nekuda kwezvikonzero zvakati wandei kubva kune ese, YAML inowanzoonekwa seyakaoma. Kunyanya, kunyangwe inozorodza minimalism uye kugona kunoshamisa kwekushanda nehuchenjeri hwepamusoro, iyo YAML syntax inogona kutsamwisa nePython-senge nzira yekudzika.
Kana YAML ikakushatirisa, unogona-uye unofanira! - tora gumi anotevera matanho ekudzikisa kushushikana kwako kusvika padanho rinogamuchirwa uye kudanana neYAML. Sezvinokodzera runyorwa urwu, matipi edu gumi achaverengerwa kubva kutanga, isu tichawedzera kufungisisa uye maitiro emweya pamadiro π
0. Ita kuti mupepeti wako ashande
Izvo hazvina basa kuti ndeapi mameseji edhita aunawo, panogona kunge paine kamwechete plugin yekushanda neYAML. Kana usina, tsvaga woiisa nekukasika. Iyo nguva inoshandiswa kutsvaga uye kumisikidza inobhadhara kakawanda pese pese paunofanirwa kugadzirisa YAML.
Somuenzaniso, mupepeti
Emacs muYAML modhi uye kuratidza nzvimbo.
Kana yako yaunofarira mupepeti isina YAML modhi, saka mamwe ematambudziko anogona kugadziriswa nekushanda nezvirongwa. Semuenzaniso, yakajairwa GNOME mameseji edhita Gedit haina YAML modhi, asi nekukasira inosimbisa YAML syntax uye inokutendera iwe kugadzirisa basa nemaindents:
Kuisa indents muGedit.
A plugin
Mune mamwe mazwi, pedza nguva uchidzidza nezve yako yaunofarira mupepeti. Tsvaga izvo zvaanopa iye kana nharaunda yake yebudiriro yekushanda neYAML, uye shandisa iwo maficha. Iwe zvechokwadi haungazvidembi.
1. Shandisa linter
Sezvineiwo, mitauro yekuronga uye mitauro yekumaka inoshandisa inofanotaurwa syntax. Makomputa akanaka pakufungidzira, ndosaka pfungwa ye
Isa
$ sudo dnf install yamllint
Ipapo iwe unongomhanya yamllint, uchipfuura iyo YAML faira kuti utarise. Izvi ndizvo zvazvinoita kana ukapfuudza faira rine chikanganiso kune linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Nhamba dziri kuruboshwe haisi iyo nguva, asi zvinorongeka zvechikanganiso: mutsara uye nhamba yekoramu. Tsananguro yekukanganisa inogona kusakuudza chero chinhu, asi iwe unonyatsoziva pairi. Ingotarisa nzvimbo ino mukodhi, uye kazhinji zvese zvichave zvakajeka.
Kana yamllint ikasawana zvikanganiso mufaira, hapana chinodhindwa kuchiratidziro. Kana kunyarara kwakadaro kuchikutyisa uye iwe uchida imwe mhinduro shoma, saka iwe unogona kumhanya linter neinomisikidzwa echo kuraira kuburikidza neaviri ampersand (&&), seizvi:
$ yamllint perfect.yaml && echo "OK"
OK
MuPOSIX, kaviri ampersand moto kana uye chete kana murairo wapfuura ukadzosa 0. Uye yamllint inongodzosa nhamba yezvikanganiso zvakawanikwa, ndosaka ichi chese chivakwa chinoshanda.
2. Nyora muPython, kwete YAML
Kana YAML ichikusvota, usanyore mairi, chaizvo. Izvo zvinoitika kuti YAML ndiyo yega fomati iyo application inonzwisisa. Asi kunyangwe mune iyi kesi, hazvifanirwe kugadzira YAML faira. Nyora pane zvaunoda wozoshandura. Semuenzaniso, kune raibhurari huru yePython
Kuzvishandura
Mune ino kesi, iyo data faira zvakare Python script inogadzira YAML. Iyi nzira inonyatsokodzera madiki data seti. Iwe unongonyora iyo data yeJSON muPython chinja, tungamira iyo neinongedzo yekuraira, uye pakupera kwefaira wedzera mitsara mitatu yekushandisa zvakabuda.
#!/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
Zvino isu tinomhanyisa iyi faira muPython uye totora output.yaml faira:
$ 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
Izvi zvakanyatsoshanda YAML, asi yamllint ichakuyambira kuti haitangi ne-. Zvakanaka, izvi zvinogona kugadziridzwa zviri nyore nemaoko kana kugadziridzwa zvishoma muPython script.
Shanduko kuburikidza nezvinyorwa
Muchiitiko ichi, isu tinotanga kunyora muJSON, tobva tamhanyisa shanduko seyakasiyana Python script, iyo inoburitsa YAML sekubuda. Kuenzaniswa neyakapfuura nzira, iyi nzira inoyera zvirinani, sezvo kutendeuka kwakasiyana kubva kune data.
Kutanga, ngatigadzirei JSON file example.json, semuenzaniso, unogona kuitora kubva
{
"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"
}
}
}
}
}
Zvadaro tichagadzira chinyorwa chakareruka chekushandura uye tochichengeta pasi pezita json2yaml.py. Ichi chinyorwa chinopinza kunze zvese maMOdule eYAML neJSON Python, uye chinotakura faira reJSON rakatsanangurwa nemushandisi, rinoshandura, uye rinonyora data kune yakabuda.yaml faira.
#!/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()
Sevha iyi script munzira yesystem uye imhanye sezvinodiwa:
$ ~/bin/json2yaml.py example.json
3. Rongedza zvakawanda uye kazhinji
Dzimwe nguva zvinobatsira kutarisa dambudziko kubva kune imwe kona. Kana iwe uchinetseka kumiririra hukama pakati pe data rako muYAML, unogona kuishandura kwenguva diki kuita chimwe chinhu chakajairika.
Semuenzaniso, kana uchinge wakasununguka kushanda nemaduramazwi kana JSON, unogona kushandura YAML kuita JSON nemirairo miviri chete mune inopindirana Python shell. Ngatitii une YAML faira mydata.yaml, saka izvi ndizvo zvazvaizoita:
$ 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.'}
Unogona kuwana mimwe mienzaniso yakawanda pane iyi nyaya. Uye zvakare, kune akawanda epamhepo ekushandura uye emunharaunda parsers anowanikwa. Saka usazeza kugadzirisa iyo data kana iwe ukaona chete isinganzwisisike jumble mairi.
4. Verenga zvinotsanangurwa
Kudzokera kuYAML mushure mekuzorora kwenguva refu, zvinobatsira kushanya
5. Pseudo-configs
Paunenge uchinyora bhuku kana chinyorwa, zvinogara zvichibatsira kutanga wadhirowa rondedzero yekutanga, zvirinani muchimiro chetafura yezviri mukati. Zvakafanana neYAML. Zvingangodaro, iwe une pfungwa yei data inoda kunyorwa muYAML faira, asi iwe haunyatso nzwisisa kuti ungaibatanidza sei. Naizvozvo, usati waveza YAML, dhirowa pseudo-config.
Pseudo-config yakafanana nepseudo-code, apo iwe haufanirwe kunetseka nezve chimiro kana indentation, hukama hwevabereki nemwana, nhaka uye nesting. Zvakafanana pano: iwe unodhirowa kudzokororwa kweiyo data sezvainosimuka mumusoro mako.
Pseudo-config listing programmers (Martin naTabitha) uye hunyanzvi hwavo (mitauro yekuronga: Python, Perl, Pascal uye Lisp, Fortran, Erlang, zvichiteerana).
Mushure mekudhirowa pseudo-config pabepa, nyatsoiongorora uye, kana zvese zvakarongeka, zvifomete nenzira yefaira reYAML.
6. The Tabs vs. Spaces Dilemma
Unotofanira kugadzirisa dambudziko racho
Mune chero yakajairwa mavara edhita, unogona kugadzirisa otomatiki-matabo kune yakatarwa nhamba yenzvimbo, saka kumukira kwevateveri vakakosha. Tab haufaniri kutya.
Sezvo wese anovenga YAML anonyatsoziva, haugone kuona mutsauko pakati pematebhu nenzvimbo pachiratidziri. Uye kana chimwe chinhu chisingaoneki, kazhinji ndicho chinhu chekupedzisira chinoyeukwa nevanhu, mushure mekunge varongedza, vaongorora uye nekubvisa mamwe matambudziko ese anobvira. Awa yenguva inopedzerwa uchitsvaga tabulation curve kana block yenzvimbo inongopopota kuti iwe unoda nekukurumidza kugadzira mutemo wekushandisa imwe kana imwe, wobva waisa yakasimbiswa kongiri cheki yekutevedzera nayo (semuenzaniso, kuburikidza Git hook yekuimanikidza kuburikidza ne linter).
7. Zvishoma zvakanyanya (kana zvakanyanya zvishoma)
Vamwe vanhu vanofarira kunyora muYAML nekuti inosimbisa chimiro. Panguva imwecheteyo, ivo vanoshingairira kushandisa indentation kuratidza mabhuraki e data. Iyi irudzi rwechitsotsi kutevedzera mitauro yemakapu inoshandisa zvakajeka delimiters.
Heino muenzaniso wechimiro chakadaro kubva
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Kune vamwe, iyi sarudzo inovabatsira kugadzirisa iyo YAML chimiro mumisoro yavo; kune vamwe, pane kudaro, inovatsamwisa nezvakawanda zvisina basa, mumaonero avo, indents.
Asi kana iwe uri muridzi wegwaro reYAML uye uine basa rekurichengeta, ipapo iwe uye iwe chete inofanira kutsanangura mashandisiro ekushandisa indentation. Kana iwe uchitsamwiswa nehombe padding, ichengetedze kune iyo shoma inogoneka zvinoenderana neiyo YAML yakatarwa. Semuenzaniso, iyo faira iri pamusoro kubva kuAnsible zvinyorwa inogona kunyorwazve seizvi pasina kurasikirwa:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Shandisa ma blanks
Kana iwe uchigara uchidzokorora zvikanganiso zvakafanana paunenge uchizadza YAML faira, zvine musoro kuisa template mairi sekutaura. Zvino nguva inotevera iwe unogona kungokopa iyi template uye woisa chaiyo data ipapo, semuenzaniso:
---
# - <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. Shandisa chimwe chinhu chakasiyana
Kana iyo application isina kukubata pauri, saka zvingave zvakakodzera kuchinja YAML kune imwe fomati. Nekufamba kwenguva, mafaera ekugadzirisa anogona kuzvikurira uye zvino zviri nani kuashandura kuita zvinyorwa zviri nyore muLua kana Python.
YAML chinhu chikuru chinodiwa nevanhu vazhinji nekuda kweminimalism uye nyore, asi iri kure nechoga chishandiso mune yako arsenal. Saka dzimwe nguva unogona kuzviramba. Parsing maraibhurari ari nyore kuwana yeYAML, saka kana iwe ukapa nyore kutama sarudzo, vashandisi vako vanopona nekukundikana uku zvisingarwadze.
Kana iwe usingakwanise kuita pasina YAML, tora aya matipi gumi uye ukunde kusada kwako kweYAML zvachose!
Source: www.habr.com