E aroha ana tatou katoa ki a Ansible, engari ko Ansible te YAML. He maha nga whakatakotoranga mo nga konae whirihoranga: nga rarangi uara, takirua tawhā-uara, nga konae INI, YAML, JSON, XML me te maha atu. Heoi, he maha nga take mai i era katoa, ka kiia he uaua rawa te YAML. Ina koa, ahakoa te iti o te whakamaarama me te kaha whakamīharo mo te mahi me nga uara aroākapa, ka hoha te wetereo YAML me tana ahua Python-rite ki te nuku.
Mena ka whakapataritari a YAML i a koe, ka taea e koe—a me tika koe! – tangohia nga mahi 10 e whai ake nei hei whakaiti i to pouri ki te taumata e manakohia ana, ka aroha ki a YAML. E tika ana mo tenei rarangi, ka tatauhia a maatau tohutohu tekau mai i te wahanga, ka taapirihia te whakaaroaro me nga mahi wairua i runga i te hiahia 😉
0. Kia mahi to etita
Ahakoa he aha te etita tuhinga kei a koe, he kotahi pea te mono mo te mahi me YAML. Ki te kore koe e whai tetahi, kimihia me te whakauru tonu. Ko te wa e pau ana ki te rapu me te whakarite ka utua nga wa maha i nga wa katoa ka whakatika koe i te YAML.
Hei tauira, ētita
Emacs i te aratau YAML me te whakaatu i nga waahi.
Mena karekau he aratau YAML to etita tino pai, na etahi o nga raru ka taea te whakatau ma te mahi me nga tautuhinga. Hei tauira, karekau he aratau YAML te ētita kuputuhi GNOME paerewa a Gedit, engari ma te taunoa ka miramirahia te wetereo YAML ka taea e koe te whirihora i nga mahi me nga nuku:
Tautuhi nuku ki Gedit.
He mono
Arā, whakapau wā ki te ako mō tō ētita tino pai. Rapua he aha tana, tana hapori whanaketanga ranei hei tuku mo te mahi me YAML, ka whakamahi i aua ahuatanga. Kare rawa koe e pouri.
1. Whakamahia he whiti
Ko te tikanga, ko nga reo whakahōtaka me nga reo tohu e whakamahi ana i te wetereo matapae. He pai nga rorohiko ki te matapae, na reira te kaupapa o
Tāuta
$ sudo dnf install yamllint
Na ka rere noa koe i te yamllint, ka tukuna te konae YAML hei tirotiro. Ko te ahua tenei ki te tuku koe i tetahi konae me te hapa ki te rarangi:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Ko nga tau kei te taha maui ehara i te wa, engari ko nga taunga o te hapa: te rarangi me te tau pou. Ko te whakaahuatanga o te hapa kaore pea e korero ki a koe, engari kei te mohio koe kei hea. Titiro noa ki tenei waahi i roto i te waehere, ka tino marama nga mea katoa.
Ki te kore e kitea e yamllint he hapa i roto i tetahi konae, kaore he mea ka taia ki te mata. Mena ka mataku koe i te wahangu ka hiahia koe ki etahi atu urupare, katahi ka taea e koe te whakahaere i te riipene me te whakahau echo conditional ma te rua ampersand (&&), penei:
$ yamllint perfect.yaml && echo "OK"
OK
I roto i te POSIX, ka ahi te ampersand rua mena ka hoki mai te whakahau o mua ki te 0. Ka whakahokia noa e yamllint te maha o nga hapa i kitea, na reira ka mahi katoa tenei hanganga here.
2. Tuhia ki te Python, kaua ki te YAML
Mena ka tino pouri koe a YAML, kaua e tuhi ki roto, mooni. Ka tupu ko YAML anake te whakatakotoranga e marama ana te tono. Engari ahakoa i tenei keehi, kaore e tika ki te hanga i tetahi konae YAML. Tuhia ki runga i taau e pai ai ka huri. Hei tauira, he whare pukapuka nui mo Python
Te hurihanga whaiaro
I tenei keehi, ko te konae raraunga he tuhinga Python e whakaputa ana i te YAML. He pai rawa atu tenei tikanga mo nga huinga raraunga iti. Ka tuhi noa koe i nga raraunga JSON ki roto i te taurangi Python, ka korerohia me te tohutohu kawemai, a ki te mutunga o te konae ka taapirihia nga raina e toru hei whakatinana i te putanga.
#!/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
Inaianei ka whakahaerehia e matou tenei konae ki te Python ka whiwhi i te konae 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
He YAML tino tika tenei, engari ka whakatupato a yamllint ki a koe e kore e timata ki te -. Ana, ka ngawari te whakatika a-ringa, te whakarereke paku ranei i roto i te tuhinga Python.
Te hurihanga ma nga tuhinga
I tenei keehi, ka tuhi tuatahi matou ki a JSON, ka whakahaere i te kaitahuri hei tuhinga Python motuhake, e whakaputa ana i te YAML hei putanga. Ina whakaritea ki te tikanga o mua, he pai ake te pauna o tenei tikanga, no te mea he wehe ke te huringa mai i nga raraunga.
Tuatahi, me hanga he kōnae JSON example.json, hei tauira, ka taea e koe te tango mai
{
"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"
}
}
}
}
}
Na ka hanga e matou he tuhinga kaitahuri ngawari ka tiakina i raro i te ingoa json2yaml.py. Ko tenei tuhinga ka kawemai i nga waahanga YAML me JSON Python, ka utaina he konae JSON kua tohua e te kaiwhakamahi, ka mahi i te hurihanga, ka tuhi i nga raraunga ki te konae 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()
Tiakina tenei tuhinga ki te ara punaha ka whakahaere ina hiahiatia:
$ ~/bin/json2yaml.py example.json
3. Porohia kia maha, kia maha
I etahi wa ka pai te titiro ki tetahi raruraru mai i tetahi koki rereke. Mena kei te raru koe ki te whakaatu i nga hononga i waenga i o raraunga i roto i te YAML, ka taea e koe te huri mo te wa poto ki tetahi mea mohio ake.
Hei tauira, ki te pai koe ki te mahi me nga rarangi papakupu, JSON ranei, ka taea e koe te huri i te YAML ki te JSON me nga whakahau e rua noa i roto i te anga Python tauwhitiwhiti. Me kii kei a koe he konae YAML mydata.yaml, ka penei te ahua:
$ 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.'}
Ka kitea e koe etahi atu tauira mo tenei kaupapa. I tua atu, he maha nga kaitahuri ipurangi me nga parser rohe e waatea ana. No reira kaua koe e whakaroa ki te whakahōputu i nga raraunga ka kite koe i te whakahiatotanga kore e marama ki roto.
4. Panuitia nga korero
Ka hoki ki YAML i muri i te okiokinga roa, he pai ki te toro
5. Nga whirihora pseudo
I te wa e tuhi ana i te pukapuka, i te tuhinga korero ranei, he pai tonu te tuhi i tetahi whakahuahua tuatahi, i te iti rawa ki te ahua o te ripanga ihirangi. He pera ano me YAML. Ko te mea pea, kei a koe te whakaaro he aha nga raraunga e tika ana kia tuhia ki te konae YAML, engari kaore koe e tino mohio ki te hono atu ki a raatau ano. Na reira, i mua i te whakairo YAML, tuhia he pseudo-config.
He rite te pseudo-config ki te pseudo-code, karekau koe e manukanuka ki te hanganga, ki te nuku ranei, ki te whanaungatanga matua-tamariki, tuku iho me te kohanga. He rite ano ki konei: ka tuhia e koe nga taapiri o nga raraunga ka puta ake i to mahunga.
Pseudo-config whakarārangi hötaka (Martin me Tabitha) me o raua pukenga (reo hotaka: Python, Perl, Pascal me Lisp, Fortran, Erlang, ia).
Whai muri i te tuhi pseudo-config ki runga i tetahi pepa, ata tirotirohia, a, ki te pai nga mea katoa, whakahōputuhia ki te ahua o te konae YAML whaimana.
6. Nga Ripa me nga Mokowā Matawaenga
Me whakaoti e koe te matawaenga
I roto i tetahi ētita kuputuhi noa, ka taea e koe te whirihora i nga ripa tika-aunoa ki te maha o nga waahi kua tohua, na reira ko te tutu o te hunga whai matua. Tapapa e kore koe e wehi.
I te mea e mohio pai ana nga kaikino YAML katoa, kaore koe e kite i te rereketanga o nga ripa me nga waahi kei runga i te mata. A, ki te kore e kitea tetahi mea, ko te mea whakamutunga ka maharahia e te tangata, i muri i ta raatau whakariterite, tirotirohia me te whakakore i nga raru katoa. Ko te haora o te wa e rapu ana mo te anau ripanga, poraka mokowhiti ranei, ka tangi noa koe me tere koe ki te hanga kaupapa here mo te whakamahi i tetahi, tetahi atu ranei, katahi ka whakatinanahia he tirotiro raima whakakaha mo te ū ki taua mea (hei tauira, ma te he matau Git ki te tohe ki roto i te riu).
7. He iti ake (he iti ake ranei)
He pai ki etahi taangata ki te tuhi i roto i te YAML na te mea e whakanui ana i te hanganga. I te wa ano, ka kaha te whakamahi i te nuku hei whakanui i nga poraka o nga raraunga. He momo tinihanga tenei ki te peehi i nga reo tohu e whakamahi ana i nga tohu tohu.
Anei tetahi tauira o taua hanganga mai
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Mo etahi, ko tenei waahanga ka awhina i a raatau ki te whakariterite i te hanganga YAML ki o raatau mahunga; mo etahi atu, engari, ka whakapataritari i a raatau me te maha o nga mea kaore e tika ana, ki o raatau whakaaro.
Engari ki te mea ko koe te rangatira o te tuhinga YAML me te kawenga mo te pupuri, na ko koe me koe anake me tautuhi me pehea te whakamahi nuku. Mena kei te hoha koe ki te kapi nui, kia mau ki te iti rawa e taea ana e ai ki te tohu YAML. Hei tauira, ko te konae kei runga ake mai i te tuhinga Ansible ka taea te tuhi ano penei me te kore e ngaro:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Whakamahia nga waahi
Mena ka whakahoki ano koe i nga hapa i te wa e whakakiia ana te konae YAML, he mea tika ki te whakauru i tetahi tauira ki roto hei korero. I muri mai ka taea e koe te kape noa i tenei tauira ka whakauru i nga raraunga tuuturu ki reira, hei tauira:
---
# - <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. Whakamahia he mea rereke
Mena karekau he herenga o te tono ki runga i a koe, katahi ka pai ke te whakarereke i te YAML ki tetahi whakatakotoranga rereke. Ka roa te wa, ka nui ake nga konae whirihoranga, katahi ka pai ake te huri ki nga tuhinga ngawari ki te Lua, ki te Python ranei.
He mea pai a YAML e arohaina ana e te tini o nga tangata mo tona iti me te ngawari, engari he tawhiti noa atu i te taputapu anake i roto i to taonga. Na i etahi wa ka taea e koe te whakakore. He ngawari te kimi whare pukapuka parsing mo YAML, na mena ka tukuna e koe nga whiringa hekenga ngawari, ka ora tonu nga kaiwhakamahi i tenei rahungatanga.
Mena kaore e taea e koe te mahi me te kore YAML, katahi ka mau ki enei tohutohu 10 ka hinga i to kore pai ki a YAML mo te katoa!
Source: will.com