Aloha mākou a pau iā Ansible, akā ʻo Ansible ʻo YAML. Nui nā ʻano no nā faila hoʻonohonoho: nā papa inoa o nā waiwai, nā pālua-waiwai, nā faila INI, YAML, JSON, XML a me nā mea ʻē aʻe he nui. Eia nō naʻe, no nā kumu he nui o lākou a pau, manaʻo pinepine ʻia ʻo YAML he paʻakikī. ʻOiai, ʻoiai ʻo kona minimalism hōʻoluʻolu a me nā mana hoihoi no ka hana ʻana me nā waiwai hierarchical, hiki i ka YAML syntax ke hoʻonāukiuki me kāna ʻano Python-like i ka indentation.
Inā huhū ʻo YAML iā ʻoe, hiki iā ʻoe - a pono ʻoe! - e hana i nā ʻanuʻu 10 aʻe e hōʻemi i kou huhū i kahi pae ʻae a aloha iā YAML. E like me ke kūpono o kēia papa inoa, e helu ʻia kā mākou ʻōlelo aʻoaʻo he ʻumi mai ka wā ʻōpala, e hoʻohui mākou i ka noʻonoʻo a me nā hana ʻuhane ma ka makemake 😉
0. E hana i kāu mea hoʻoponopono
ʻAʻole pili ka mea hoʻoponopono kikokikona i loaʻa iā ʻoe, aia paha ma kahi o hoʻokahi plugin no ka hana ʻana me YAML. Inā ʻaʻohe āu, e ʻimi a hoʻokomo koke iā ia. ʻO ka manawa e ʻimi ai a hoʻonohonoho e uku i nā manawa he nui i kēlā me kēia manawa āu e hoʻoponopono ai iā YAML.
Eia kekahi laʻana, hoʻoponopono
Emacs ma ke ʻano YAML a hōʻike i nā wahi.
Inā ʻaʻohe YAML mode kāu mea hoʻoponopono punahele, a laila hiki ke hoʻoponopono ʻia kekahi o nā pilikia ma ka hana ʻana me nā hoʻonohonoho. No ka laʻana, ʻaʻohe ʻano YAML ka hoʻoponopono kikokikona GNOME maʻamau ʻo Gedit, akā ma ke ʻano maʻamau, hōʻike ia i ka syntax YAML a hiki iā ʻoe ke hoʻonohonoho i ka hana me nā indentations:
Hoʻonohonoho i nā indents ma Gedit.
He pākuʻi
ʻO ia hoʻi, e hoʻolilo i ka manawa e aʻo ai e pili ana i kāu mea hoʻoponopono punahele. E ʻike i ka mea a kāna kaiāulu hoʻomohala e hāʻawi ai no ka hana pū me YAML, a hoʻohana i kēlā mau hiʻohiʻona. ʻAʻole ʻoe e mihi.
1. E hoʻohana i kahi linter
Ma ke kūpono, hoʻohana nā ʻōlelo papahana a me nā ʻōlelo markup i ka syntax hiki ke wānana. Maikaʻi nā kamepiula i ka wānana, ʻo ia ke kumu o ka manaʻo o
Hoʻohui
$ sudo dnf install yamllint
A laila holo wale ʻoe i ka yamllint, e hāʻawi iā ia i ka faila YAML e nānā. Penei ke ʻano inā hāʻawi ʻoe i kahi faila me ka hewa i ka linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
ʻO nā helu ma ka hema ʻaʻole ia ka manawa, akā ʻo nā hoʻonohonoho o ka hewa: helu lālani a me ke kolamu. ʻAʻole paha e haʻi aku ka wehewehe ʻana o ka hewa iā ʻoe, akā ʻike pono ʻoe i hea ia. E nānā wale i kēia wahi i loko o ke code, a e maopopo ana nā mea a pau.
Ke ʻike ʻole ʻo yamllint i nā hewa i loko o kahi faila, ʻaʻohe mea i paʻi ʻia i ka pale. Inā hoʻoweliweli kēia ʻano leo iā ʻoe a makemake ʻoe i kahi manaʻo hou aʻe, a laila hiki iā ʻoe ke holo i ka linter me ke kauoha echo conditional ma o ka ampersand pālua (&&), e like me kēia:
$ yamllint perfect.yaml && echo "OK"
OK
I ka POSIX, e puhi ana ka lua ampersand ina a ina e hoi mai ke kauoha mua i ka 0. A e hoihoi wale mai ana o yamllint i ka helu o na hewa i loaa, no ia mea ke hana nei keia kukulu conditional a pau.
2. Kākau ma Python, ʻaʻole YAML
Inā hoʻonāukiuki maoli ʻo YAML iā ʻoe, mai kākau i loko, ʻoiaʻiʻo. ʻO YAML wale nō ke ʻano i hoʻomaopopo ʻia e ka noi. Akā i kēia hihia, ʻaʻole pono e hana i kahi faila YAML. E kākau i kāu makemake a laila e hoʻololi. No ka laʻana, aia kahi waihona nui no Python
Ka hoohuli ana iho
I kēia hihia, ʻo ka faila data he palapala Python e hoʻopuka ai iā YAML. Ua kūpono kēia ʻano hana no nā ʻikepili liʻiliʻi. Kākau wale ʻoe i ka ʻikepili JSON i loko o kahi ʻano Python, e hoʻomaka me kahi kuhikuhi import, a ma ka hope o ka faila e hoʻohui i ʻekolu laina e hoʻokō i ka hopena.
#!/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
I kēia manawa, holo mākou i kēia faila ma Python a loaʻa ka faila 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 kūpono kēia, akā e ao aku ʻo yamllint iā ʻoe ʻaʻole ia e hoʻomaka me -. ʻAe, hiki ke hoʻoponopono maʻalahi me ka lima a hoʻololi iki paha i ka palapala Python.
Hoʻololi ʻia ma o nā palapala
I kēia hihia, kākau mua mākou ma JSON, a laila holo i ka mea hoʻololi ma ke ʻano he palapala Python ʻokoʻa, e hana ana i ka YAML ma ke ʻano he puka. Ke hoʻohālikelike ʻia i ke ʻano ma mua, ʻoi aku ka maikaʻi o kēia ala, no ka mea, ua kaʻawale ka hoʻololi ʻana mai ka ʻikepili.
ʻO ka mea mua, e hana mākou i kahi faila JSON example.json, no ka laʻana, hiki iā ʻoe ke lawe 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"
}
}
}
}
}
A laila e hana mākou i kahi palapala hoʻololi maʻalahi a mālama iā ia ma lalo o ka inoa json2yaml.py. Hoʻokomo kēia palapala i nā modula YAML a me JSON Python, a hoʻouka i kahi faila JSON i kuhikuhi ʻia e ka mea hoʻohana, hana i ka hoʻololi ʻana, a kākau i ka ʻikepili i ka faila 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()
E mālama i kēia palapala ma ke ala ʻōnaehana a holo i ka mea e pono ai:
$ ~/bin/json2yaml.py example.json
3. E hoʻopaʻa nui a pinepine
I kekahi manawa he mea pono ke nānā i kahi pilikia mai kahi ʻaoʻao ʻē aʻe. Inā pilikia ʻoe i ka hōʻike ʻana i nā pilina ma waena o kāu ʻikepili ma YAML, hiki iā ʻoe ke hoʻololi iā ia i kahi mea i kamaʻāina.
No ka laʻana, inā ʻoluʻolu ʻoe i ka hana ʻana me ka papa inoa puke wehewehe ʻōlelo a i ʻole JSON, hiki iā ʻoe ke hoʻololi iā YAML i JSON me ʻelua mau kauoha i loko o ka pūpū Python interactive. E ʻōlelo mākou he faila YAML mydata.yaml kāu, a laila ʻo ia ke ʻano:
$ 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.'}
Hiki iā ʻoe ke ʻike i nā laʻana he nui e pili ana i kēia kumuhana. Eia kekahi, nui nā mea hoʻololi pūnaewele a me nā parser kūloko i loaʻa. No laila, mai kānalua e hoʻololi hou i ka ʻikepili inā ʻike ʻoe i kahi jumble hiki ʻole ke hoʻomaopopo ʻia i loko.
4. E heluhelu i nā kikoʻī
Ke hoʻi nei i YAML ma hope o ka hoʻomaha lōʻihi, pono ke kipa
5. Pseudo-configs
Ke kākau ʻana i puke a ʻatikala paha, pono mau ke kahakaha mua ʻana i kahi papa kuhikuhi mua, ma ka liʻiliʻi loa ma ke ʻano o ka papa ʻike. Ua like ia me YAML. Loaʻa paha, loaʻa iā ʻoe kahi manaʻo o ka ʻikepili e pono e kākau ʻia i kahi faila YAML, akā ʻaʻole maopopo ʻoe pehea e hoʻopili ai kekahi i kekahi. No laila, ma mua o ke kālai ʻana iā YAML, e kaha kiʻi i kahi pseudo-config.
Ua like ka Pseudo-config me ka pseudo-code, kahi ʻaʻole pono ʻoe e hopohopo e pili ana i ka hoʻolālā a i ʻole ka indentation, ka pilina makua-keiki, ka hoʻoilina a me ka nesting. Ua like ia ma ʻaneʻi: ke kahakiʻi nei ʻoe i nā ʻikepili o ka ʻikepili i ko lākou ala ʻana i kou poʻo.
Pseudo-config papa inoa papahana (Martin a me Tabitha) a me kā lākou mau mākau (nā ʻōlelo papahana: Python, Perl, Pascal a me Lisp, Fortran, Erlang, kēlā me kēia).
Ma hope o ke kahakiʻi ʻana i kahi pseudo-config ma kahi ʻāpana pepa, e noʻonoʻo pono iā ia a, inā pololei nā mea a pau, e hoʻopili iā ia ma ke ʻano o kahi faila YAML kūpono.
6. ʻO nā Tabs vs. Spaces Dilemma
Pono ʻoe e hoʻoponopono i ka pilikia
Ma nā mea hoʻoponopono kikokikona maʻamau, hiki iā ʻoe ke hoʻonohonoho i nā ʻaoʻao pololei pololei i kahi helu o nā hakahaka, no laila ke kipi ʻana o nā mea pili nui. Kuhi ʻAʻole pono ʻoe e makaʻu.
E like me ka ʻike pono ʻana o kēlā me kēia YAML inaina, ʻaʻole hiki iā ʻoe ke ʻike i ka ʻokoʻa ma waena o nā tab a me nā hakahaka ma ka pale. A i ʻike ʻole ʻia kekahi mea, ʻo ia ka mea maʻamau e hoʻomanaʻo ai ka poʻe, ma hope o ka hoʻokaʻawale ʻana, nānā a hoʻopau i nā pilikia ʻē aʻe. Hoʻokahi hola o ka manawa i hoʻohana ʻia e ʻimi ai i kahi pihi papahelu a i ʻole kahi poloka o nā hakahaka e hoʻōho wale ana ʻoe e pono koke ʻoe e hana i kahi kulekele no ka hoʻohana ʻana i kekahi a i ʻole kekahi, a laila e hoʻokō i kahi loiloi paʻa i hoʻopaʻa ʻia no ka hoʻokō ʻana me ia (no ka laʻana, ma o kahi makau Git e hoʻoikaika iā ia ma ka linter).
7. ʻOi aku ka liʻiliʻi (a ʻoi aku ka liʻiliʻi)
Makemake kekahi poʻe e kākau ma YAML no ka mea e hoʻoikaika ana i ka hoʻolālā. I ka manawa like, hoʻohana ikaika lākou i ka indentation e hōʻike i nā poloka o ka ʻikepili. He ʻano scam kēia e hoʻohālike i nā ʻōlelo markup e hoʻohana ana i nā delimiters.
Eia kekahi laʻana o ia ʻano hana mai
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
No kekahi, kōkua kēia koho iā lākou e hoʻokaʻawale i ka hoʻolālā YAML i ko lākou mau poʻo; no nā poʻe ʻē aʻe, ma kahi ʻē aʻe, hoʻonāukiuki ia iā lākou me ka nui o nā mea pono ʻole, i ko lākou manaʻo, indents.
Akā inā ʻo ʻoe ka mea nona ka palapala YAML a ʻo ʻoe ke kuleana no ka mālama ʻana, a laila ʻo ʻoe a ʻo ʻoe wale nō pono e wehewehe pehea e hoʻohana ai i ka indentation. Inā huhū ʻoe i ka padding nui, e mālama i ka liʻiliʻi loa e like me ka kikoʻī YAML. No ka laʻana, hiki ke kākau hou ʻia ka faila i luna mai ka palapala Ansible e like me kēia me ka ʻole o ka nalowale:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. E hoʻohana i nā hakahaka
Inā hana mau ʻoe i nā hewa like ʻole i ka hoʻopiha ʻana i kahi faila YAML, kūpono ke hoʻokomo ʻana i kahi template ma ke ʻano he manaʻo. A laila hiki iā ʻoe ke kope kope i kēia template a hoʻokomo i ka ʻikepili maoli ma laila, no ka laʻana:
---
# - <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. E hoʻohana i kekahi mea ʻokoʻa
Inā ʻaʻohe paʻa o ka noi iā ʻoe, a laila pono paha e hoʻololi i ka YAML i kahi ʻano ʻē aʻe. I ka wā lōʻihi, hiki i nā faila hoʻonohonoho ke hoʻonui iā lākou iho a laila ʻoi aku ka maikaʻi o ka hoʻololi ʻana iā lākou i mau palapala maʻalahi ma Lua a i ʻole Python.
He mea nui ka YAML i makemake nui ʻia e ka poʻe no kāna minimalism a me ka maʻalahi, akā mamao loa ia mai ka mea hana wale nō i kāu arsenal. No laila i kekahi manawa hiki iā ʻoe ke hōʻole. Maʻalahi ka loaʻa ʻana o nā hale waihona puke parsing no YAML, no laila inā hāʻawi ʻoe i nā koho neʻe maʻalahi, e ola ana kāu mea hoʻohana i kēia hemahema me ka ʻeha ʻole.
Inā ʻaʻole hiki iā ʻoe ke hana me ka ʻole o YAML, a laila e lawe i kēia mau ʻōlelo aʻoaʻo 10 a lanakila i kou makemake ʻole iā YAML i hoʻokahi manawa a no nā mea āpau!
Source: www.habr.com