Urang sadayana resep Ansible, tapi Ansible nyaéta YAML. Aya seueur format file konfigurasi: daptar nilai, pasangan parameter-nilai, file INI, YAML, JSON, XML sareng seueur deui. Nanging, kusabab sababaraha alesan tina sadayana, YAML sering dianggap sesah. Khususna, sanaos minimalisme nyegerkeun sareng kamampuan anu pikaresepeun pikeun damel sareng nilai hierarkis, sintaksis YAML tiasa ngaganggu ku pendekatan sapertos Python pikeun indentasi.
Upami YAML ngaganggu anjeun, anjeun tiasa-sareng anjeun kedah! - laksanakeun 10 léngkah ieu pikeun ngirangan hanjelu anjeun ka tingkat anu tiasa ditampi sareng cinta ka YAML. Sapertos daptar ieu, sapuluh tip kami bakal dinomerkeun ti mimiti, kami bakal nambihan semedi sareng prakték spiritual anu dipikahoyong 😉
0. Jieun redaktur Anjeun jalan
Henteu janten masalah naon pangropéa téksu anu anjeun gaduh, sigana sahenteuna aya hiji plugin pikeun damel sareng YAML. Upami anjeun teu acan gaduh, panggihan sareng pasang langsung. Waktu anu dianggo pikeun milarian sareng nyetél bakal mayar sababaraha kali unggal waktos anjeun kedah ngédit YAML.
Contona, redaktur
Emacs dina modeu YAML tur mintonkeun spasi.
Upami pangropéa karesep anjeun henteu gaduh mode YAML, maka sababaraha masalah tiasa direngsekeun ku cara damel sareng setélan. Salaku conto, pangropéa téksu GNOME standar Gedit teu gaduh mode YAML, tapi sacara standar nyorot sintaksis YAML sareng ngamungkinkeun anjeun ngonpigurasikeun damel sareng indentations:
Nyetel indents dina Gedit.
Hiji plugin
Dina basa sejen, méakkeun waktu diajar ngeunaan redaktur favorit anjeun. Panggihan naon anu ditawarkeunana atanapi komunitas pangembanganana pikeun damel sareng YAML, sareng nganggo fitur-fitur éta. Anjeun pasti moal kuciwa.
1. Paké linter a
Ideally, basa programming jeung basa markup ngagunakeun sintaksis bisa diprediksi. Komputer anu alus di predictability, naha éta konsép
Pasang
$ sudo dnf install yamllint
Teras anjeun ngan saukur ngajalankeun yamllint, ngalangkungan file YAML pikeun dipariksa. Ieu sapertos upami anjeun ngaliwat file anu aya kasalahan 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)
Angka anu aya di kénca sanés waktosna, tapi koordinat kasalahan: nomer baris sareng kolom. Katerangan ngeunaan kasalahan bisa jadi teu ngabejaan Anjeun nanaon, tapi anjeun terang persis dimana éta. Ngan kasampak di tempat ieu dina kode, sarta paling dipikaresep sagalana bakal jelas.
Nalika yamllint henteu mendakan kasalahan dina file, teu aya anu dicitak dina layar. Upami tiiseun sapertos kitu nyingsieunan anjeun sareng anjeun hoyong eupan balik sakedik, maka anjeun tiasa ngajalankeun linter kalayan paréntah gema kondisional liwat ampersand ganda (&&), sapertos kieu:
$ yamllint perfect.yaml && echo "OK"
OK
Dina POSIX, a ampersand ganda kahuruan lamun jeung ngan lamun paréntah saméméhna mulih 0. Sarta yamllint ngan mulangkeun jumlah kasalahan kapanggih, nu naha sakabeh konstruksi kondisional ieu jalan.
2. Tulis dina Python, moal YAML
Upami YAML leres-leres ngaganggu anjeun, ngan ulah nyerat di dinya, sacara harfiah. Éta kajadian yén YAML mangrupikeun hiji-hijina format anu kahartos ku aplikasi. Tapi sanajan dina hal ieu, teu perlu nyieun file YAML. Tulis naon anu anjeun pikahoyong teras konvérsi. Contona, aya perpustakaan gede pikeun Python
Konversi diri
Dina hal ieu, file data ogé mangrupa Aksara Python anu ngahasilkeun YAML. Metoda ieu paling cocog pikeun set data leutik. Anjeun saukur nulis data JSON kana variabel Python, miheulaan eta kalawan diréktif impor, sarta dina tungtung file nambahkeun tilu garis pikeun nerapkeun kaluaran.
#!/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
Ayeuna urang ngajalankeun file ieu dina Python sareng kéngingkeun file 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
Ieu YAML sampurna valid, tapi yamllint bakal ngingetkeun yén éta henteu dimimitian ku -. Nya, ieu tiasa gampang dilereskeun sacara manual atanapi rada dirobih dina skrip Python.
Konversi via skrip
Dina hal ieu, urang mimiti nulis dina JSON, lajeng ngajalankeun converter salaku Aksara Python misah, nu ngahasilkeun YAML salaku kaluaran. Dibandingkeun jeung métode saméméhna, metoda ieu skala leuwih hadé, sabab konversi misah ti data.
Mimiti, hayu urang ngadamel file JSON example.json, contona, anjeun tiasa nyandak tina
{
"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"
}
}
}
}
}
Teras urang bakal nyiptakeun skrip konvérsi saderhana sareng simpen dina nami json2yaml.py. Skrip ieu ngimpor duanana modul YAML sareng JSON Python, sareng ngamuat file JSON anu dikhususkeun ku pangguna, ngalaksanakeun konvérsi, sareng nyerat data kana file 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()
Simpen skrip ieu dina jalur sistem sareng jalankeun upami diperyogikeun:
$ ~/bin/json2yaml.py example.json
3. Parse loba tur mindeng
Kadangkala kacida mangpaat pikeun nempo hiji masalah ti sudut nu beda. Upami anjeun ngalaman masalah ngagambarkeun hubungan antara data anjeun dina YAML, anjeun tiasa samentawis ngarobih kana hal anu langkung akrab.
Salaku conto, upami anjeun teu nyaman damel sareng daptar kamus atanapi JSON, anjeun tiasa ngarobih YAML ka JSON kalayan ngan ukur dua paréntah dina cangkang Python interaktif. Anggap anjeun gaduh file YAML mydata.yaml, teras ieu sapertos kieu:
$ 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.'}
Anjeun tiasa mendakan seueur conto sanés ngeunaan topik ieu. Salaku tambahan, aya seueur konvérsi online sareng parser lokal anu sayogi. Janten entong ragu ngarobih deui data nalika anjeun ngan ukur ningali anu teu kaharti.
4. Baca spésifikasi
Balik deui ka YAML saatos istirahat panjang, éta mangpaat pikeun nganjang
5. Pseudo-configs
Nalika nulis buku atawa artikel, sok aya mangpaatna pikeun mimiti nyieun sketsa outline awal, sahenteuna dina wangun daptar eusi. Éta sami sareng YAML. Paling dipikaresep, anjeun boga pamanggih naon data nu kudu ditulis kana file YAML, tapi anjeun teu ngarti kumaha nyambungkeun eta saling. Ku alatan éta, saméméh sculpting YAML, ngagambar pseudo-config.
Pseudo-config téh sarupa jeung pseudo-kode, dimana anjeun teu kudu salempang ngeunaan struktur atawa indentation, hubungan indungna-anak, warisan jeung nyarang. Éta sami di dieu: anjeun ngagambar iterasi data nalika timbul dina sirah anjeun.
Programer daptar pseudo-config (Martin sareng Tabitha) sareng kaahlianna (basa pemrograman: Python, Perl, Pascal sareng Lisp, Fortran, Erlang, masing-masing).
Saatos ngagambar pseudo-config dina salembar kertas, analisa sacara saksama sareng, upami sadayana leres, pormat dina bentuk file YAML anu sah.
6. The Tab vs Spasi dilema
Anjeun bakal kudu ngajawab dilema
Dina naon waé pangropéa téksu normal, anjeun tiasa ngonpigurasikeun tab anu leres-otomatis ka sajumlah rohangan anu ditangtukeun, janten pemberontakan para penganut konci. tab anjeun teu kudu sieun.
Kusabab unggal YAML hater terang ogé, anjeun moal tiasa ningali bédana antara tab sareng rohangan dina layar. Sareng nalika aya anu teu katingali, biasana mangrupikeun hal anu terakhir anu émut, saatos aranjeunna diurutkeun, pariksa sareng ngaleungitkeun sagala masalah anu sanés. Sajam waktos nyéépkeun pikeun milarian kurva tabulasi atanapi blok rohangan ngan saukur ngajerit yén anjeun kedah urgent nyieun kawijakan pikeun pamakéan hiji atawa lianna, lajeng nerapkeun cek beton bertulang pikeun minuhan eta (contona, ngaliwatan hook Git pikeun maksakeun ngaliwatan linter).
7. Kurang leuwih (atawa leuwih kurang)
Sababaraha urang resep nulis dina YAML sabab nekenkeun struktur. Dina waktos anu sami, aranjeunna aktip ngagunakeun indentasi pikeun nyorot blok data. Ieu mangrupikeun panipuan pikeun niru basa markup anu nganggo pembatas eksplisit.
Ieu conto struktur sapertos ti
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
Kanggo sababaraha, pilihan ieu ngabantosan aranjeunna nyortir struktur YAML dina sirahna; pikeun anu sanés, sabalikna, éta ngaganggu aranjeunna kalayan seueur anu teu perlu, dina pamadegan maranéhna, indents.
Tapi upami anjeun anu gaduh dokumén YAML sareng tanggung jawab pikeun ngajaga éta, teras anjeun ngan anjeun kudu nangtukeun kumaha ngagunakeun indentation. Upami anjeun kaganggu ku padding ageung, jaga kana saminimal mungkin numutkeun spésifikasi YAML. Salaku conto, file di luhur tina dokuméntasi Ansible tiasa ditulis deui sapertos kieu tanpa kaleungitan:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Paké blanks
Upami anjeun terus-terusan ngulang kasalahan anu sami nalika ngeusian file YAML, éta masuk akal pikeun nyelapkeun template kana éta salaku koméntar. Teras waktos salajengna anjeun tiasa nyalin template ieu sareng lebetkeun data nyata di dinya, contona:
---
# - <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. Paké hal béda
Upami aplikasina henteu gaduh stranglehold ka anjeun, maka panginten kedah ngarobih YAML kana format anu sanés. Leuwih waktos, file konfigurasi bisa outgrow sorangan lajeng eta leuwih hade pikeun ngarobah kana Aksara basajan dina Lua atawa Python.
YAML mangrupikeun hal anu hébat anu dipikacinta ku seueur jalma pikeun minimalism sareng kesederhanaan na, tapi jauh tina hiji-hijina alat dina arsenal anjeun. Janten sakapeung anjeun tiasa nolak. Parsing perpustakaan gampang pikeun manggihan pikeun YAML, jadi lamun anjeun nawiskeun pilihan migrasi gampang, pamaké anjeun bakal salamet kagagalan ieu rélatif painlessly.
Upami anjeun teu tiasa ngalakukeun tanpa YAML, teras cobian 10 tip ieu sareng atasi henteu resep anjeun ka YAML sakali sareng salamina!
sumber: www.habr.com