Биз баарыбыз Ansibleди жакшы көрөбүз, бирок Ansible бул YAML. Конфигурация файлдары үчүн көптөгөн форматтар бар: баалуулуктардын тизмелери, параметр-маанилик жуптар, INI файлдары, YAML, JSON, XML жана башкалар. Бирок, алардын ичинен бир нече себептерден улам, YAML көбүнчө өзгөчө оор деп эсептелет. Атап айтканда, анын сергиткен минимализмине жана иерархиялык баалуулуктар менен иштөө үчүн таасирдүү мүмкүнчүлүктөрүнө карабастан, YAML синтаксиси Python сыяктуу чегинүүгө болгон мамилеси менен кыжырды келтириши мүмкүн.
Эгерде YAML сизди кыжырдантса, сиз жасай аласыз жана керек! – Сиздин нааразычылыгыңызды алгылыктуу деңгээлге түшүрүү жана YAMLди сүйүп калуу үчүн төмөнкү 10 кадамды жасаңыз. Бул тизмеге ылайык, биздин он кеңеш нөлдөн баштап номерленет, биз каалагандай медитация жана рухий практикаларды кошобуз 😉
0. Редакторуңузду иштетиңиз
Кандай текст редактору бар экенине карабай, YAML менен иштөө үчүн жок дегенде бир плагин бар болушу мүмкүн. Эгер сизде жок болсо, аны дароо таап, орнотуңуз. Издөөгө жана орнотууга кеткен убакыт YAMLди түзөтүүгө туура келген сайын көп эсе төлөйт.
Мисалы, редактор
YAML режиминде Emacs жана боштуктарды көрсөтүү.
Эгерде сиздин сүйүктүү редакторуңузда YAML режими жок болсо, анда кээ бир көйгөйлөрдү орнотуулар менен иштөө аркылуу чечсе болот. Мисалы, стандарттуу GNOME текст редакторунда YAML режими жок, бирок демейки боюнча ал YAML синтаксисин баса белгилейт жана чегинүүлөр менен иштөөнү конфигурациялоого мүмкүндүк берет:
Geditте чегинүүлөрдү орнотуу.
Плагин
Башка сөз менен айтканда, сүйүктүү редакторуңуз жөнүндө үйрөнүүгө убакыт бөлүңүз. Ал же анын өнүктүрүү коомчулугу YAML менен иштөө үчүн эмне сунуш кыларын билип алыңыз жана ошол функцияларды колдонуңуз. Сиз, албетте, өкүнбөйсүз.
1. Линтер колдонуңуз
Идеалында, программалоо тилдери жана белгилөө тилдери болжолдуу синтаксисин колдонушат. Компьютерлер алдын ала айтууда жакшы, ошондуктан түшүнүк
белгилөө
$ sudo dnf install yamllint
Андан кийин сиз текшерүү үчүн YAML файлын өткөрүп, yamllint иштетесиз. Катасы бар файлды линтерге өткөрүп берсеңиз, бул ушундай болот:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Сол жактагы сандар убакыт эмес, катанын координаттары: сап жана мамычанын номери. Катанын сүрөттөлүшү сизге эч нерсе айтпашы мүмкүн, бирок сиз анын кайда экенин так билесиз. Жөн гана коддон бул жерди карап, балким, баары ачык болуп калат.
Yallint файлда эч кандай ката таппаса, экранга эч нерсе басылбайт. Эгерде мындай жымжырттык сизди коркутуп жатса жана сиз дагы бир аз пикир айткыңыз келсе, анда сиз линтерди шарттуу жаңырык буйругу менен кош амперсанд (&&) аркылуу иштетсеңиз болот, төмөнкүдөй:
$ yamllint perfect.yaml && echo "OK"
OK
POSIXте кош амперсанд эгер мурунку команда 0 кайтарса гана күйөт. Ал эми yamllint табылган каталардын санын гана кайтарат, ошондуктан бул бүт шарттуу конструкция иштейт.
2. YAML эмес, Python менен жазыңыз
Эгерде YAML сизди чындап эле таарынтса, анда ага түз мааниде жазбаңыз. YAML колдонмо түшүнгөн жалгыз формат болуп калат. Бирок бул учурда да, YAML файлын түзүү зарыл эмес. Өзүңүзгө жаккан нерсени жазыңыз, анан конвертациялаңыз. Мисалы, Python үчүн сонун китепкана бар
Өзүн-өзү конверсиялоо
Бул учурда, маалымат файлы дагы YAML түзүүчү Python скрипти болуп саналат. Бул ыкма кичинекей маалымат топтомдору үчүн эң ылайыктуу. Сиз жөн гана JSON берилиштерин Python өзгөрмөсүнө жазып, ага импорттук директиваны киргизип, файлдын аягында чыгарууну ишке ашыруу үчүн үч сапты кошуңуз.
#!/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
Эми биз бул файлды Pythonдо иштетип, 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
Бул толук жарактуу YAML, бирок yamllint ал - менен башталбасын эскертет. Муну кол менен оңой оңдоого же Python скриптинде бир аз өзгөртүүгө болот.
Скрипттер аркылуу конверсия
Бул учурда, биз адегенде JSONде жазабыз, андан кийин конверторду өзүнчө Python скрипти катары иштетебиз, ал YAMLди чыгаруу катары чыгарат. Мурунку ыкмага салыштырмалуу, бул ыкма жакшыраак масштабдалат, анткени конверсия маалыматтардан өзүнчө.
Биринчиден, JSON файлын түзөлү example.json, мисалы, сиз аны алсаңыз болот
{
"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"
}
}
}
}
}
Андан кийин биз жөнөкөй конвертер сценарийин түзүп, аны json2yaml.py деген ат менен сактайбыз. Бул скрипт YAML жана JSON Python модулдарын тең импорттойт жана колдонуучу белгилеген JSON файлын жүктөйт, конверсияны ишке ашырат жана 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()
Бул скриптти система жолунда сактап, керек болсо иштетиңиз:
$ ~/bin/json2yaml.py example.json
3. Көп жана тез-тез талдоо
Кээде маселеге башка жагынан кароо пайдалуу. YAMLдеги маалыматтарыңыздын ортосундагы мамилелерди көрсөтүүдө кыйынчылыкка туш болуп жатсаңыз, аны убактылуу көбүрөөк тааныш нерсеге айланта аласыз.
Мисалы, сиз сөздүк тизмелери же JSON менен иштөөгө ыңгайлуу болсоңуз, интерактивдүү Python кабыгындагы эки эле буйрук менен YAMLди JSONга айландырсаңыз болот. Сизде mydata.yaml 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.'}
Бул тема боюнча башка көптөгөн мисалдарды таба аласыз. Мындан тышкары, көптөгөн онлайн өзгөрткүчтөр жана жергиликтүү талдоочулар бар. Андыктан, андагы түшүнүксүз баш аламандыкты гана көргөндө, маалыматтарды кайра форматтоодон тартынбаңыз.
4. Техникалык мүнөздөмөлөрдү окуңуз
Узак тыныгуудан кийин YAMLге кайтып келүү, зыярат кылуу пайдалуу
5. Псевдоконфигурациялар
Китепти же макаланы жазып жатканда, адегенде, жок дегенде мазмуну түрүндө алдын ала схеманы чийип алуу дайыма пайдалуу. Бул YAML менен бирдей. Кыязы, сизде YAML файлына кандай маалыматтарды жазуу керектиги жөнүндө түшүнүк бар, бирок сиз аны бири-бириңиз менен кантип байланыштырууну түшүнбөйсүз. Ошондуктан, YAML скульптурасынан мурун, псевдоконфигурацияны тартыңыз.
Pseudo-config псевдокодго окшош, мында сиз түзүм же чегинүү, ата-эне менен баланын мамилеси, мурас жана уя жөнүндө кабатырланбайсыз. Бул жерде да ушундай: сиз маалыматтардын итерациясын алар башыңызда пайда болгондо тартасыз.
Pseudo-config листинг программисттери (Мартин жана Табита) жана алардын жөндөмдөрү (программалоо тилдери: Python, Perl, Pascal жана Lisp, Fortran, Erlang, тиешелүүлүгүнө жараша).
Кагазга псевдо-конфигурацияны тарткандан кийин, аны кылдаттык менен талдап, эгер баары жайында болсо, аны жарактуу YAML файлы түрүндө форматтаңыз.
6. Табалар жана боштуктар дилеммасы
Сиз дилемманы чечишиңиз керек
Кадимки каалаган текст редакторунда сиз автоматтык түрдө туураланган өтмөктөрдү белгилүү бир сандагы боштуктарга конфигурациялай аласыз, андыктан негизги жактоочулар козголоң чыгарбайт. табулатура коркпошуңуз керек.
Ар бир YAML жек көрүүчүсү жакшы билгендей, экрандагы өтмөктөр менен боштуктардын айырмасын көрө албайсыз. Ал эми бир нерсе көрүнбөй калганда, бул адамдар иргеп, текшерип, башка бардык мүмкүн болгон көйгөйлөрдү жойгондон кийин, адатта, акыркы нерсе эсинде калат. Табуляция ийри сызыгын же мейкиндиктер блогун издөөгө кеткен бир саат убакыт, сиз тез арада тигил же бул мейкиндикти колдонуу саясатын түзүшүңүз керек, андан кийин ага шайкештигин темир-бетондук текшерүүдөн өткөрүшүңүз керек деп кыйкырып турат (мисалы, аны линтер аркылуу мажбурлоо үчүн Git илгич).
7. Азыраак - көбүрөөк (же көп - азыраак)
Кээ бир адамдар YAMLде жазганды жакшы көрүшөт, анткени ал структурага басым жасайт. Ошол эле учурда, алар маалыматтардын блокторун бөлүп көрсөтүү үчүн чегинүүнү жигердүү колдонушат. Бул ачык-айкын бөлгүчтөрдү колдонгон белгилөө тилдерин тууроо үчүн алдамчылык.
Бул жерде мындай түзүлүштүн бир мисалы болуп саналат
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Кээ бирөөлөр үчүн бул параметр алардын башындагы YAML түзүмүн ирээтке келтирүүгө жардам берет, тескерисинче, аларды керексиз, алардын ою боюнча, бир топ кыжырдантат.
Бирок, эгерде сиз YAML документинин ээси болсоңуз жана аны сактоого жооптуу болсоңуз, анда сен жана сен гана чегинүүнү кантип колдонууну аныктоо керек. Эгерде сизди чоң толтургучтар кыжырдантып жатса, аны YAML спецификациясына ылайык минималдуу деңгээлде сактаңыз. Мисалы, Ansible документациясынын жогорудагы файлын эч кандай жоготуусуз кайра жазууга болот:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Бланктарды колдонуңуз
Эгерде сиз YAML файлын толтурууда ошол эле каталарды дайыма кайталасаңыз, ага комментарий катары шаблонду киргизүү туура болот. Андан кийин кийинки жолу сиз жөн гана бул шаблонду көчүрүп, ал жерге реалдуу маалыматтарды киргизсеңиз болот, мисалы:
---
# - <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. Башка нерсени колдонуңуз
Колдонмонун сизде муунтуусу жок болсо, анда YAMLди башка форматка өзгөртүү керек. Убакыттын өтүшү менен конфигурация файлдары өздөрүнөн ашып кетиши мүмкүн, андан кийин аларды Lua же Pythonдо жөнөкөй скрипттерге айландыруу жакшы.
YAML – бул көптөгөн адамдар өзүнүн минимализми жана жөнөкөйлүгү үчүн жакшы көргөн сонун нерсе, бирок ал сиздин арсеналыңыздагы жалгыз куралдан алыс. Андыктан кээде андан баш тарта аласыз. Талдоо китепканаларын YAML үчүн оңой табууга болот, андыктан сиз оңой көчүрүү опцияларын сунуштасаңыз, колдонуучуларыңыз бул ийгиликсиздиктен салыштырмалуу кыйналбастан аман калышат.
Эгерде сиз YAMLсиз кыла албасаңыз, анда бул 10 кеңешти алыңыз жана YAMLди жактырбооңузду биротоло жеңиңиз!
Source: www.habr.com