Sote tunapenda Ansible, lakini Ansible ni YAML. Kuna fomati nyingi za faili za usanidi: orodha za maadili, jozi za thamani ya parameta, faili za INI, YAML, JSON, XML na zingine nyingi. Walakini, kwa sababu kadhaa kati ya zote, YAML mara nyingi huchukuliwa kuwa ngumu sana. Hasa, licha ya uchangamfu wake wa kuburudisha na uwezo wa kuvutia wa kufanya kazi na maadili ya tabaka, sintaksia ya YAML inaweza kuudhisha mbinu yake ya ujongezaji kama chatu.
Ikiwa YAML inakukasirisha, unawezaβna unapaswa! - chukua hatua 10 zifuatazo ili kupunguza kufadhaika kwako hadi kiwango kinachokubalika na kupenda YAML. Kama inavyofaa orodha hii, vidokezo vyetu kumi vitahesabiwa kuanzia mwanzo, tutaongeza kutafakari na mazoea ya kiroho kwa mapenzi π
0. Fanya mhariri wako afanye kazi
Haijalishi una kihariri cha maandishi, labda kuna angalau programu-jalizi moja ya kufanya kazi na YAML. Ikiwa huna, itafute na uisakinishe mara moja. Muda unaotumika kutafuta na kusanidi utalipa mara nyingi kila unapohitaji kuhariri YAML.
Kwa mfano, mhariri
Emacs katika hali ya YAML na nafasi za kuonyesha.
Ikiwa kihariri chako unachokipenda hakina modi ya YAML, basi baadhi ya matatizo yanaweza kutatuliwa kwa kufanya kazi na mipangilio. Kwa mfano, kihariri maandishi cha kawaida cha GNOME Gedit haina modi ya YAML, lakini kwa chaguo-msingi inaangazia sintaksia ya YAML na hukuruhusu kusanidi kazi na ujongezaji:
Kuweka indents katika Gedit.
Programu-jalizi
Kwa maneno mengine, tumia muda kujifunza kuhusu kihariri chako unachokipenda. Jua kile ambacho yeye au jumuiya yake ya maendeleo inaweza kutoa kwa kufanya kazi na YAML, na utumie vipengele hivyo. Hakika hautajuta.
1. Tumia linter
Kwa kweli, lugha za programu na lugha za alama hutumia syntax inayoweza kutabirika. Kompyuta ni nzuri katika kutabirika, ndiyo maana dhana ya
Ili kufunga
$ sudo dnf install yamllint
Kisha unaendesha tu yamllint, ukiipitisha faili ya YAML ili kuangalia. Hivi ndivyo inavyoonekana ikiwa utapitisha faili iliyo na kosa kwa linter:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Nambari zilizo upande wa kushoto sio wakati, lakini viwianishi vya kosa: safu na nambari ya safu. Maelezo ya kosa hayawezi kukuambia chochote, lakini unajua ni wapi hasa. Angalia tu mahali hapa kwenye nambari, na uwezekano mkubwa kila kitu kitakuwa wazi.
Wakati yamllint haipati makosa katika faili, hakuna chochote kinachochapishwa kwenye skrini. Ikiwa ukimya kama huo unakuogopesha na unataka maoni zaidi, basi unaweza kuendesha linter na amri ya echo ya masharti kupitia ampersand mbili (&&), kama hii:
$ yamllint perfect.yaml && echo "OK"
OK
Katika POSIX, ampersand maradufu huwaka ikiwa na ikiwa tu amri iliyotangulia itarejesha 0. Na yamllint hurejesha tu idadi ya makosa yaliyopatikana, ndiyo maana muundo huu wote wa masharti hufanya kazi.
2. Andika kwa Python, sio YAML
Ikiwa YAML inakukasirisha sana, usiandike ndani yake, kihalisi. Hutokea kwamba YAML ndio umbizo pekee ambalo programu inaelewa. Lakini hata katika kesi hii, si lazima kuunda faili ya YAML. Andika juu ya kile unachopenda na kisha ubadilishe. Kwa mfano, kuna maktaba kubwa ya Python
Uongofu wa kibinafsi
Katika kesi hii, faili ya data pia ni hati ya Python ambayo hutoa YAML. Njia hii inafaa zaidi kwa seti ndogo za data. Unaandika tu data ya JSON kuwa tofauti ya Python, hutanguliza na maagizo ya kuagiza, na mwisho wa faili ongeza mistari mitatu kutekeleza matokeo.
#!/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
Sasa tunaendesha faili hii kwenye Python na kupata faili 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
Hii ni YAML halali kabisa, lakini yamllint itakuonya kuwa haianzi na -. Kweli, hii inaweza kusahihishwa kwa urahisi kwa mikono au kurekebishwa kidogo kwenye hati ya Python.
Uongofu kupitia hati
Katika kesi hii, tunaandika kwanza katika JSON, na kisha kuendesha kibadilishaji kama hati tofauti ya Python, ambayo hutoa YAML kama pato. Ikilinganishwa na njia ya awali, njia hii ni mizani bora, kwani uongofu ni tofauti na data.
Kwanza, hebu tuunde faili ya JSON example.json, kwa mfano, unaweza kuichukua kutoka
{
"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"
}
}
}
}
}
Kisha tutaunda hati rahisi ya kubadilisha fedha na kuihifadhi chini ya jina json2yaml.py. Hati hii huleta moduli zote za YAML na JSON Python, na hupakia faili ya JSON iliyobainishwa na mtumiaji, hugeuza, na huandika data kwenye faili 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()
Hifadhi hati hii kwenye njia ya mfumo na uiendeshe inavyohitajika:
$ ~/bin/json2yaml.py example.json
3. Changanua sana na mara nyingi
Wakati mwingine ni muhimu kuangalia tatizo kutoka pembe tofauti. Ikiwa unatatizika kuwakilisha uhusiano kati ya data yako katika YAML, unaweza kuibadilisha kwa muda kuwa kitu kinachojulikana zaidi.
Kwa mfano, ikiwa unastarehesha kufanya kazi na orodha za kamusi au JSON, unaweza kubadilisha YAML hadi JSON kwa amri mbili tu kwenye ganda shirikishi la Python. Wacha tuseme una faili ya YAML mydata.yaml, basi hii ndio ingeonekana kama:
$ 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.'}
Unaweza kupata mifano mingine mingi juu ya mada hii. Kwa kuongeza, kuna vigeuzi vingi vya mtandaoni na vichanganuzi vya ndani vinavyopatikana. Kwa hivyo usisite kurekebisha data wakati unaona tu mchanganyiko usioeleweka ndani yake.
4. Soma vipimo
Kurudi kwa YAML baada ya mapumziko marefu, ni muhimu kutembelea
5. Mipangilio ya uwongo
Wakati wa kuandika kitabu au makala, ni muhimu kila mara kwanza kuchora muhtasari wa awali, angalau katika mfumo wa jedwali la yaliyomo. Ni sawa na YAML. Uwezekano mkubwa zaidi, una wazo la data gani inahitaji kuandikwa kwenye faili ya YAML, lakini huelewi jinsi ya kuiunganisha. Kwa hivyo, kabla ya kuchonga YAML, chora usanidi wa uwongo.
Usanidi wa uwongo ni sawa na msimbo wa uwongo, ambapo huna haja ya kuwa na wasiwasi kuhusu muundo au ujongezaji, mahusiano ya mzazi na mtoto, urithi na kuota. Ni sawa hapa: unachora marudio ya data inapotokea kichwani mwako.
Watengenezaji programu wa uorodheshaji wa Pseudo-config (Martin na Tabitha) na ujuzi wao (lugha za programu: Python, Perl, Pascal na Lisp, Fortran, Erlang, mtawalia).
Baada ya kuchora usanidi wa uwongo kwenye kipande cha karatasi, ichanganue kwa uangalifu na, ikiwa kila kitu kiko sawa, ipange katika mfumo wa faili halali ya YAML.
6. Tabo dhidi ya Dilemma ya Nafasi
Itabidi kutatua mtanziko
Katika kihariri chochote cha kawaida cha maandishi, unaweza kusanidi vichupo vya kusahihisha kiotomatiki kwa idadi maalum ya nafasi, ili uasi wa wafuasi muhimu. Tab huna haja ya kuogopa.
Kama vile kila adui wa YAML anajua vyema, huwezi kuona tofauti kati ya vichupo na nafasi kwenye skrini. Na wakati kitu hakionekani, kwa kawaida ni jambo la mwisho ambalo watu hukumbuka, baada ya kupanga, kuangalia na kuondoa matatizo mengine yote yanayowezekana. Saa ya muda inayotumika kutafuta safu ya uwekaji jedwali au kizuizi cha nafasi hupiga kelele kwamba unahitaji haraka kuunda sera ya matumizi ya moja au nyingine, na kisha utekeleze ukaguzi wa madhubuti ulioimarishwa wa kufuata (kwa mfano, kupitia ndoano ya Git ili kuilazimisha kupitia linter).
7. Chini ni zaidi (au zaidi ni kidogo)
Baadhi ya watu hupenda kuandika katika YAML kwa sababu inasisitiza muundo. Wakati huo huo, wao hutumia indentation kikamilifu ili kuonyesha vitalu vya data. Huu ni aina ya ulaghai wa kuiga lugha za alama zinazotumia viambatanisho dhahiri.
Hapa kuna mfano wa muundo kama huo kutoka
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Kwa wengine, chaguo hili huwasaidia kutatua muundo wa YAML katika vichwa vyao; kwa wengine, kinyume chake, huwakasirisha na mengi yasiyo ya lazima, kwa maoni yao, indents.
Lakini ikiwa wewe ni mmiliki wa hati ya YAML na unawajibika kuitunza, basi wewe na wewe tu lazima ifafanue jinsi ya kutumia ujongezaji. Ikiwa umekerwa na pedi kubwa, ihifadhi kwa kiwango cha chini iwezekanavyo kulingana na vipimo vya YAML. Kwa mfano, faili iliyo hapo juu kutoka kwa hati Zinazoweza kuandikwa tena kama hii bila hasara yoyote:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Tumia nafasi zilizo wazi
Ukirudia makosa yale yale kila mara unapojaza faili ya YAML, ni jambo la busara kuingiza kiolezo ndani yake kama maoni. Kisha wakati ujao unaweza kunakili kiolezo hiki na kuingiza data halisi hapo, kwa mfano:
---
# - <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. Tumia kitu tofauti
Ikiwa programu haina kizuizi kwako, basi inaweza kufaa kubadilisha YAML hadi umbizo tofauti. Baada ya muda, faili za usanidi zinaweza kujikuza na kisha ni bora kuzibadilisha kuwa hati rahisi katika Lua au Python.
YAML ni kitu kizuri ambacho watu wengi hupenda kwa uchache na urahisi wake, lakini ni mbali na zana pekee kwenye arsenal yako. Kwa hivyo wakati mwingine unaweza kukataa. Maktaba za uchanganuzi ni rahisi kupata za YAML, kwa hivyo ikiwa utatoa chaguo rahisi za uhamiaji, watumiaji wako watastahimili kushindwa huku bila maumivu.
Ikiwa huwezi kufanya bila YAML, basi chukua vidokezo hivi 10 na ushinde kutopenda YAML mara moja!
Chanzo: mapenzi.com