Бид бүгд Ansible-д дуртай ч Ansible бол YAML. Тохиргооны файлуудын олон формат байдаг: утгын жагсаалт, параметр-утга хос, INI файлууд, YAML, JSON, XML болон бусад олон. Гэсэн хэдий ч эдгээрээс хэд хэдэн шалтгааны улмаас YAML нь ихэвчлэн хэцүү гэж тооцогддог. Ялангуяа, шинэлэг минимализм, шаталсан утгуудтай ажиллах гайхалтай чадваруудыг үл харгалзан YAML синтакс нь Python шиг догол хийх арга барилаараа ядаргаатай байж болно.
Хэрэв YAML таныг уурлуулж байвал та чадна, тэгэх ч болно! – Дараах 10 алхмыг хийснээр бухимдлаа хүлээн зөвшөөрөгдөх хэмжээнд хүртэл бууруулж, YAML-д дурла. Энэ жагсаалтад нийцүүлэн бидний арван зөвлөмжийг эхнээс нь дугаарлаж, бясалгал, оюун санааны дасгалуудыг өөрийн үзэмжээр нэмэх болно 😉
0. Засварлагчаа ажиллуул
Танд ямар текст засварлагч байгаа нь хамаагүй, YAML-тэй ажиллахад зориулсан ядаж нэг залгаас байгаа байх. Хэрэв танд байхгүй бол тэр даруй олж суулгаарай. Хайлт хийх, тохируулахад зарцуулсан хугацаа нь таныг YAML-г засварлах бүрт олон дахин үр дүнгээ өгөх болно.
Жишээлбэл, редактор
YAML горимд байгаа Emacs ба орон зайг харуулах.
Хэрэв таны дуртай редактор YAML горимгүй бол тохиргоотой ажиллах замаар зарим асуудлыг шийдэж болно. Жишээлбэл, стандарт GNOME текст засварлагч Gedit нь YAML горимгүй боловч анхдагч байдлаар YAML синтаксийг онцолж, доголтой ажлыг тохируулах боломжийг танд олгоно.
Gedit дээр догол мөрийг тохируулах.
Plugin
Өөрөөр хэлбэл, дуртай редакторынхаа талаар суралцах цагийг өнгөрөө. YAML-тэй ажиллахад түүнд эсвэл түүний хөгжлийн нийгэмлэг юу санал болгож байгааг олж мэдээд, эдгээр функцуудыг ашиглана уу. Та харамсахгүй нь гарцаагүй.
1. Линтер ашиглах
Хамгийн тохиромжтой нь програмчлалын хэл, тэмдэглэгээний хэл нь урьдчилан таамаглах синтаксийг ашигладаг. Компьютер нь урьдчилан таамаглах чадвар сайтай байдаг тул ийм ойлголт бий болсон
Суулгах
$ sudo dnf install yamllint
Дараа нь та зүгээр л yamllint-г ажиллуулж, YAML файлаар дамжуулж шалгаж үзээрэй. Хэрэв та алдаатай файлыг линтер рүү дамжуулах юм бол иймэрхүү харагдах болно.
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Зүүн талд байгаа тоонууд нь цаг биш, харин алдааны координатууд: мөр ба баганын дугаар. Алдааны тайлбар нь танд юу ч хэлэхгүй байж болох ч та хаана байгааг яг таг мэднэ. Код дээрх энэ газрыг хараарай, магадгүй бүх зүйл тодорхой болно.
Yallint файлд ямар ч алдаа олоогүй тохиолдолд дэлгэцэн дээр юу ч хэвлэгдэхгүй. Хэрэв ийм чимээгүй байдал таныг айлгаж, дахин санал хүсэлт гаргахыг хүсвэл давхар амперсанд (&&) ашиглан нөхцөлт echo командыг ашиглан линтерийг ажиллуулж болно.
$ 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 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. The Tabs vs. Spaces дилемма
Та бэрхшээлийг шийдэх хэрэгтэй болно
Ямар ч энгийн текст засварлагчийн хувьд та табуудыг тодорхой тооны зайнд автоматаар засах боломжтой тул гол дагагчдын бослого гарах болно. Tab чи айх хэрэггүй.
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-д дургүй байдлаа нэг удаа даван туул!
Эх сурвалж: www.habr.com