Tia an'i Ansible daholo isika, fa ny Ansible dia YAML. Misy endrika maro ho an'ny fisie fichier: lisitry ny soatoavina, mpivady sanda parameter, rakitra INI, YAML, JSON, XML sy ny maro hafa. Na izany aza, noho ny antony maromaro amin'izy rehetra, ny YAML dia heverina ho sarotra indrindra. Indrindra indrindra, na dia eo aza ny minimalisma mamelombelona sy ny fahaizany manaitra amin'ny fiasana amin'ny soatoavina ambaratongam-pahefana, ny syntax YAML dia mety hanelingelina amin'ny fomba fiasa mitovy amin'ny Python amin'ny indentation.
Raha mahasosotra anao ny YAML dia azonao atao—ary tokony hataonao izany! - Raiso ireto dingana 10 manaraka ireto mba hampihenana ny fahasorenanao ho amin'ny ambaratonga azo ekena ary ho raiki-pitia amin'ny YAML. Araka ny mahamety an'ity lisitra ity, ny toro-hevitra folo ataontsika dia ho voaisa hatrany am-boalohany, hampiana fisaintsainana sy fanao ara-panahy araka izay tiantsika 😉
0. Ataovy miasa ny mpamoaka lahatsoratrao
Na inona na inona tonian-dahatsoratra anananao, mety misy plugin iray farafahakeliny hiasa amin'ny YAML. Raha tsy manana ianao dia tadiavo ary apetraho avy hatrany. Ny fotoana lany amin'ny fikarohana sy ny fametrahana dia handoa imbetsaka isaky ny mila manova YAML ianao.
Ohatra, editor
Emacs amin'ny fomba YAML ary mampiseho toerana.
Raha tsy manana fomba YAML ny mpanonta tianao indrindra, dia azo vahana ny olana sasany amin'ny fiasana amin'ny toe-javatra. Ohatra, ny tonian-dahatsoratra GNOME mahazatra Gedit dia tsy manana fomba YAML, fa amin'ny alàlan'ny default dia manasongadina syntax YAML izy ary ahafahanao manamboatra asa miaraka amin'ny indentations:
Fametrahana indents ao amin'ny Gedit.
Plugin iray
Иными словами, потратьте время на изучение своего любимого редактора. Выясните, что он сам или его сообщество разработки предлагают для работы с YAML, и используйте эти возможности. Вы точно об этом не пожалеете.
1. Mampiasà linter
Ny tsara indrindra, ny fiteny fandaharana sy ny fiteny marika dia mampiasa syntax azo vinavinaina. Solosaina dia tsara amin'ny predictability, izay no mahatonga ny foto-kevitra ny
mametraka
$ sudo dnf install yamllint
Avy eo dia mihazakazaka yamllint fotsiny ianao, mandalo ny rakitra YAML hojerena. Toy izao ny endriny raha mandefa rakitra misy hadisoana amin'ny linter ianao:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Ny isa eo amin'ny ankavia dia tsy ny fotoana, fa ny fandrindrana ny lesoka: laharana sy tsanganana. Ny famaritana ny fahadisoana dia mety tsy hilaza na inona na inona aminao, fa fantatrao tsara ny toerana misy azy. Jereo fotsiny ity toerana ity ao amin'ny kaody, ary azo inoana fa hazava ny zava-drehetra.
Когда yamllint не находит ошибок в файле, на экран ничего не выводится. Если вас пугает такая тишина и хочется немного больше обратной связи, то можно запускать линтер с условной командой echo через двойной амперсанд (&&), вот так:
$ yamllint perfect.yaml && echo "OK"
OK
Ao amin'ny POSIX, ampersand indroa mirehitra raha toa ka miverina 0 ny baiko teo aloha. Ary i yamllint dia mamerina fotsiny ny isan'ny lesoka hita, ka izany no mahatonga an'ity fananganana fepetra ity.
2. Soraty amin'ny Python fa tsy YAML
Raha tena mahasosotra anao ny YAML dia aza soratana ao, ara-bakiteny. Izany no mitranga fa ny YAML no hany endrika azon'ny fampiharana. Saingy na amin'ity tranga ity aza dia tsy ilaina ny mamorona rakitra YAML. Soraty amin'ny zavatra tianao ary avy eo miova. Ohatra, misy tranomboky lehibe ho an'ny Python
Fiovam-tena
В этом случае файл с данными заодно является и Python-скриптом, который генерирует YAML. Этот способ лучше всего подходит для небольших наборов данных. Вы просто пишите JSON-данные в переменную Python, предваряете это директивой import, а в конце файла добавляете три строчки для реализации вывода.
#!/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
Ankehitriny dia mihazakazaka ity rakitra ity amin'ny Python izahay ary mahazo ny rakitra 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
Ity dia YAML tena manan-kery, fa ny yamllint dia hampitandrina anao fa tsy manomboka amin'ny -. Eny, azo ahitsy mora foana izany na ovaina kely amin'ny script Python.
Fiovam-po amin'ny alàlan'ny script
Amin'ity tranga ity, manoratra amin'ny JSON aloha isika, ary avy eo dia mihazakazaka ny converter ho script Python misaraka, izay mamokatra YAML ho vokatra. Raha ampitahaina amin'ny fomba teo aloha, ity fomba ity dia mizana tsara kokoa, satria misaraka amin'ny data ny fiovam-po.
Voalohany, andao hamorona rakitra JSON example.json, ohatra, azonao alaina amin'ny
{
"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"
}
}
}
}
}
Avy eo dia hamorona script converter tsotra isika ary tehirizo eo ambanin'ny anarana json2yaml.py. Ity script ity dia manafatra mody YAML sy JSON Python, ary mitondra rakitra JSON voatondron'ny mpampiasa, manao ny fiovam-po ary manoratra ny angona amin'ny rakitra 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()
Tehirizo ity script ity ao amin'ny lalan'ny rafitra ary tanteraho izany raha ilaina:
$ ~/bin/json2yaml.py example.json
3. Mamakafaka be sy matetika
Иногда на проблему полезно взглянуть под другим углом. Если вам трудно представить взаимосвязи между данными в YAML, можно временно преобразовать их в нечто более привычное.
Например, если вам удобно работать со словарными списками или с JSON, то YAML можно преобразовать в JSON всего двумя командами в интерактивной оболочке Python. Допустим, у вас есть YAML-файл mydata.yaml, тогда вот как это будет выглядеть:
$ 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.'}
Afaka mahita ohatra maro hafa momba ity lohahevitra ity ianao. Fanampin'izay, misy mpanova an-tserasera maro sy parser eo an-toerana misy. Koa aza misalasala manavao ny angon-drakitra rehefa mahita korontana tsy takatry ny saina ao anatiny ianao.
4. Vakio ny specs
Miverina amin'ny YAML aorian'ny fiatoana lava, ilaina ny mitsidika
5. Pseudo-configs
Rehefa manoratra boky na lahatsoratra, dia ilaina foana ny manao sketch voalohany drafitra mialoha, fara fahakeliny, amin'ny endriky ny lisitry ny atiny. Toy izany koa ny amin'ny YAML. Azo inoana fa manana hevitra momba ny angon-drakitra tokony hosoratana amin'ny rakitra YAML ianao, saingy tsy azonao ny fomba hampifandraisana azy amin'ny tsirairay. Noho izany, alohan'ny hanaovana sokitra YAML dia manaova pseudo-config.
Ny pseudo-config dia mitovy amin'ny pseudo-code, izay tsy mila manahy momba ny rafitra na indentation, ny fifandraisan'ny ray aman-dreny, ny lova ary ny akany. Mitovy amin'izany ihany koa: manao famerimberenana ny angon-drakitra ianao rehefa mipoitra ao an-dohanao.
Pseudo-config lisitry ny programmer (Martin sy Tabitha) sy ny fahaizany (fiteny fandaharana: Python, Perl, Pascal ary Lisp, Fortran, Erlang, tsirairay avy).
Нарисовав псевдоконфиг на листе бумаги, внимательно проанализируйте его и, если все в порядке, оформите в виде валидного YAML-файла.
6. The Tabs vs. Spaces Dilemma
Tsy maintsy mamaha ny olana ianao
Amin'ny tonian-dahatsoratra mahazatra rehetra, azonao atao ny manamboatra tabilao manitsy mandeha ho azy amin'ny habaka voafaritra, noho izany ny fikomian'ny mpanaraka fototra. Tab tsy mila matahotra ianao.
Araka ny fantatry ny mankahala YAML rehetra dia tsy hitanao ny fahasamihafana misy eo amin'ny tabilao sy habaka eo amin'ny efijery. Ary rehefa misy zavatra tsy hita, dia matetika no tadidin'ny olona, rehefa avy nandamina, nanamarina ary nanafoana ny olana hafa rehetra mety hitranga. Ny ora iray lany amin'ny fitadiavana curve tabula na habaka iray dia mikiakiaka fotsiny fa mila mamorona politika ianao amin'ny fampiasana ny iray na ny iray hafa, ary avy eo dia manatanteraka fanamarinana simenitra nohamafisina amin'ny fanarahana azy (ohatra, amin'ny alàlan'ny Git hook hanery azy amin'ny linter).
7. Kely dia be (na mihoatra dia kely)
Ny olona sasany dia tia manoratra amin'ny YAML satria manantitrantitra ny rafitra. Mandritra izany fotoana izany, mampiasa indentation izy ireo mba hanasongadinana ireo sakana misy angona. Ity dia karazana fisolokiana maka tahaka ireo fiteny marika izay mampiasa fetra mazava.
Ity misy ohatra momba ny rafitra toy izany avy amin'ny
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Ho an'ny sasany, ity safidy ity dia manampy azy ireo handamina ny rafitra YAML ao an-dohany; ho an'ny hafa, ny mifanohitra amin'izany, dia mahasosotra azy ireo amin'ny tsy ilaina, araka ny hevitr'izy ireo, indents.
Fa raha tompon'ny antontan-taratasy YAML ianao ary tompon'andraikitra amin'ny fitazonana azy, dia ianao ary ianao ihany tsy maintsy mamaritra ny fomba fampiasana indentation. Raha sosotra amin'ny padding lehibe ianao dia tehirizo amin'ny faran'izay kely indrindra araka ny famaritana YAML. Ohatra, ny rakitra etsy ambony avy amin'ny antontan-taratasy Ansible dia azo soratana toy izao tsy misy fatiantoka:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Mampiasà banga
Raha averinao foana ny fahadisoana mitovy amin'ny famenoana rakitra YAML, dia misy dikany ny mampiditra môdely ao aminy ho fanehoan-kevitra. Avy eo amin'ny manaraka dia azonao atao ny mandika ity môdely ity ary mampiditra angona tena izy ao, ohatra:
---
# - <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. Mampiasà zavatra hafa
Raha tsy manana stranglehold anao ny fampiharana, dia mety ho mendrika ny hanova ny YAML amin'ny endrika hafa. Rehefa mandeha ny fotoana, dia mety hihoatra lavitra noho izany ny rakitra fikirakirana ary tsara kokoa ny mamadika azy ireo ho script tsotra amin'ny Lua na Python.
YAML dia zavatra lehibe tian'ny olona maro noho ny minimalisma sy ny fahatsorany, saingy lavitra ny hany fitaovana ao amin'ny arsenalinao. Noho izany indraindray dia afaka mandà izany ianao. Mora hita ho an'ny YAML ny tranomboky famakiam-boky, ka raha manolotra safidy mora fifindra-monina ianao, dia ho tafavoaka velona amin'ity tsy fahombiazana ity ny mpampiasa anao.
Raha tsy afaka manao tsy misy YAML ianao, dia raiso ireto torohevitra 10 ireto ary reseo indray mandeha sy ho an'ny rehetra ny tsy fitiavanao ny YAML!
Source: www.habr.com