10 langkah menyang YAML Zen

Kita kabeh seneng Ansible, nanging Ansible yaiku YAML. Ana akeh format kanggo file konfigurasi: dhaptar nilai, pasangan parameter-nilai, file INI, YAML, JSON, XML lan liya-liyane. Nanging, amarga sawetara alasan, YAML asring dianggep angel banget. Utamane, sanajan minimalisme sing nyegerake lan kemampuan sing nyengsemake kanggo nggarap nilai hierarkis, sintaks YAML bisa ngganggu karo pendekatan indentasi kaya Python.

10 langkah menyang YAML Zen

Yen YAML ngganggu sampeyan, sampeyan bisa-lan sampeyan kudu! - tindakake 10 langkah ing ngisor iki kanggo nyuda frustasi menyang tingkat sing bisa ditampa lan tresna karo YAML. Kaya sing cocog karo dhaptar iki, sepuluh tips kita bakal diwenehi nomer saka awal, kita bakal nambah meditasi lan latihan spiritual kanthi sesuka hati πŸ˜‰

0. Nggawe editor sampeyan bisa digunakake

Ora ketompo apa editor teks sing sampeyan duwe, mesthine ana paling ora siji plugin kanggo nggarap YAML. Yen sampeyan ora duwe, golek lan nginstal langsung. Wektu nggoleki lan nyetel bakal mbayar kaping pirang-pirang saben sampeyan kudu ngowahi YAML.

Contone, editor atom ndhukung YAML minangka standar, nanging kanggo GNU Emacs sampeyan kudu nginstal paket tambahan, contone, yaml-modus.

10 langkah menyang YAML Zen

Emacs ing mode YAML lan nampilake spasi.

Yen editor favorit sampeyan ora duwe mode YAML, sawetara masalah bisa ditanggulangi kanthi nggarap setelan kasebut. Contone, editor teks GNOME standar Gedit ora duwe mode YAML, nanging kanthi standar nyorot sintaks YAML lan ngidini sampeyan ngatur karya kanthi indentasi:

10 langkah menyang YAML Zen

Setelan inden ing Gedit.

A plugin drawspaces kanggo Gedit, nuduhake spasi minangka titik, mbusak ambiguities karo tingkat indentation.

Ing tembung liyane, nglampahi wektu sinau babagan editor favorit. Temokake apa sing ditawakake dheweke utawa komunitas pangembangane kanggo nggarap YAML, lan gunakake fitur kasebut. Sampeyan mesthi ora bakal getun.

1. Gunakake linter

Saenipun, basa pamrograman lan basa markup nggunakake sintaksis sing bisa diprediksi. Komputer apik ing predictability, kang kok konsep saka lintera. Yen ing 40 taun orane wis liwati lan sampeyan isih ora nggunakake YAML linter, banjur iku wektu kanggo nyoba yamllint.

Pasang yamllint Sampeyan bisa nggunakake manajer paket Linux standar. Contone, ing Red Hat Enterprise Linux 8 utawa Fedora rampung kaya iki:

$ sudo dnf install yamllint

Banjur sampeyan mung mbukak yamllint, ngliwati file YAML kanggo mriksa. Iki katon yen sampeyan ngirim file kanthi kesalahan menyang linter:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

Nomer ing sisih kiwa dudu wektu, nanging koordinat kesalahan: nomer baris lan kolom. Katrangan babagan kesalahan bisa uga ora ngandhani apa-apa, nanging sampeyan ngerti persis ing ngendi. Cukup katon ing panggonan iki ing kode, lan paling kamungkinan kabeh bakal dadi cetha.

Nalika yamllint ora nemokake kesalahan ing file, ora ana sing dicithak ing layar. Yen kasepen kuwi medeni lan sampeyan pengin menehi saran liyane, sampeyan bisa mbukak linter karo printah echo kondisional liwat ampersand pindho (&&), kaya iki:

$ yamllint perfect.yaml && echo "OK"
OK

Ing POSIX, ampersand pindho murub yen lan mung yen prentah sadurunge ngasilake 0. Lan yamllint mung ngasilake jumlah kesalahan sing ditemokake, mula kabeh konstruksi kondisional iki bisa digunakake.

2. Tulis ing Python, ora YAML

Yen YAML pancen ngganggu sampeyan, aja nulis ing kono, kanthi harfiah. Mengkono yen YAML mung format sing dimangerteni dening aplikasi kasebut. Nanging sanajan ing kasus iki, ora perlu nggawe file YAML. Tulis ing apa sing disenengi lan banjur ngowahi. Contone, ana perpustakaan gedhe kanggo Python pyyaml lan rong cara konversi: konversi dhewe lan konversi liwat skrip.

Konversi dhewe

Ing kasus iki, file data uga skrip Python sing ngasilake YAML. Cara iki paling cocog kanggo set data cilik. Sampeyan mung nulis data JSON menyang variabel Python, pratelan karo arahan impor, lan ing pungkasan file nambah telung baris kanggo ngleksanakake output.

#!/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

Saiki kita mbukak file iki ing Python lan entuk 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

Iki YAML sampurna bener, nanging yamllint bakal ngelekake sing ora miwiti karo -. Inggih, iki bisa gampang didandani kanthi manual utawa rada diowahi ing skrip Python.

Konversi liwat skrip

Ing kasus iki, kita nulis dhisik ing JSON, banjur mbukak konverter minangka skrip Python sing kapisah, sing ngasilake YAML minangka output. Dibandhingake karo metode sadurunge, metode iki luwih apik, amarga konversi kapisah saka data.

Pisanan, ayo nggawe file JSON example.json, contone, sampeyan bisa njupuk saka json.org:

{
	"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"
			}
		  }
		}
	  }
	}

Banjur kita bakal nggawe skrip konverter sing prasaja lan simpen ing jeneng json2yaml.py. Skrip iki ngimpor modul YAML lan JSON Python, lan ngemot file JSON sing ditemtokake pangguna, nindakake konversi, lan nulis data menyang 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 script iki ing path sistem lan mbukak yen perlu:

$ ~/bin/json2yaml.py example.json

3. Parse akeh lan asring

Kadhangkala migunani kanggo ndeleng masalah saka sudut sing beda. Yen sampeyan nemoni masalah kanggo nuduhake hubungan antarane data ing YAML, sampeyan bisa ngowahi data kasebut dadi luwih akrab.

Contone, yen sampeyan seneng nggarap dhaptar kamus utawa JSON, sampeyan bisa ngowahi YAML dadi JSON kanthi mung rong printah ing cangkang Python interaktif. Contone, sampeyan duwe file YAML mydata.yaml, mula iki bakal katon kaya:

$ 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.'}

Sampeyan bisa nemokake akeh conto liyane babagan topik iki. Kajaba iku, ana akeh konverter online lan parser lokal sing kasedhiya. Dadi aja ragu-ragu kanggo ngowahi format data nalika sampeyan mung ndeleng jumble sing ora bisa dingerteni.

4. Waca spek

Bali menyang YAML sawise ngaso dawa, iku migunani kanggo ngunjungi yaml.org lan maca maneh spesifikasi (spesifikasi). Yen sampeyan duwe kangelan karo YAML, nanging durung entuk specification, banjur iku wektu kanggo mbenerake kahanan iki. Spesifikasi kasebut gampang banget ditulis, lan syarat sintaksis digambarake kanthi conto akeh ing Bab 6.

5. Pseudo-configs

Nalika nulis buku utawa artikel, mesthi migunani kanggo nggawe sketsa awal, paling ora ana ing daftar isi. Iku padha karo YAML. Paling kamungkinan, sampeyan duwe idea apa data kudu ditulis menyang file YAML, nanging sampeyan ora ngerti carane nyambungake karo saben liyane. Mulane, sadurunge sculpting YAML, tarik pseudo-config.

Pseudo-config padha pseudo-kode, ngendi sampeyan ora kudu padha sumelang ing bab struktur utawa indentation, sesambetan tiyang sepah-anak, warisan lan nesting. Iku padha ing kene: sampeyan nggambar iterasi data nalika muncul ing sirah sampeyan.

10 langkah menyang YAML Zen

Pseudo-config listing programer (Martin lan Tabitha) lan skills sing (basa program: Python, Perl, Pascal lan Lisp, Fortran, Erlang, mungguh).

Sawise nggambar pseudo-config ing selembar kertas, analisa kasebut kanthi teliti lan, yen kabeh wis rapi, format file YAML sing bener.

6. Dilema Tab vs Spasi

Sampeyan kudu ngatasi dilema "tab utawa spasi?". Ora ing pangertèn global, nanging mung ing tingkat organisasi, utawa paling proyek. Ora Matter apa iki melu nggunakake kirim-processing karo script sed, nyetel editors teks ing mesin programer, utawa universal njupuk kuitansi saka selaras ketat karo instruksi linter ing ancaman dipecat, nanging kabeh anggota tim sing ing siji cara utawa liyane sing ana hubungane karo YAML mung kudu nggunakake spasi (kaya sing dibutuhake dening spesifikasi YAML).

Ing editor teks normal apa wae, sampeyan bisa ngatur tab sing bener kanthi otomatis menyang spasi sing ditemtokake, saengga para pengikut kunci dadi pemberontak. Tab ora usah wedi.

Amarga saben sengit YAML ngerti, sampeyan ora bisa ndeleng prabΓ©dan antarane tab lan spasi ing layar. Lan nalika ana sing ora katon, biasane sing paling pungkasan sing dielingi wong, sawise diurutake, mriksa lan ngilangi kabeh masalah liyane. Siji jam wektu nggoleki kurva tabulasi utawa blok spasi mung njerit yen sampeyan kudu nggawe kabijakan kanthi cepet kanggo nggunakake siji utawa liyane, lan banjur ngleksanakake mriksa konkrit sing dikuatake kanggo netepi (contone, liwat pancing Git kanggo meksa liwat linter).

7. Kurang luwih (utawa luwih kurang)

Sawetara wong seneng nulis ing YAML amarga nandheske struktur. Ing wektu sing padha, dheweke aktif nggunakake indentasi kanggo nyorot pamblokiran data. Iki minangka jinis penipuan kanggo niru basa markup sing nggunakake pembatas eksplisit.

Punika conto saka struktur kuwi saka Dokumentasi ansible:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

Kanggo sawetara, opsi iki mbantu wong-wong mau ngurutake struktur YAML ing sirahe; kanggo wong liya, sebaliknya, jengkel karo akeh sing ora perlu, miturut pendapate, indentasi.

Nanging yen sampeyan pemilik dokumen YAML lan tanggung jawab kanggo njaga, banjur sampeyan lan mung sampeyan kudu nemtokake cara nggunakake indentasi. Yen sampeyan ngganggu padding gedhe, tetepake kanthi minimal miturut spesifikasi YAML. Contone, file ing ndhuwur saka dokumentasi Ansible bisa ditulis maneh kaya iki tanpa mundhut:

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. Gunakake kothong

Yen sampeyan terus-terusan mbaleni kesalahan sing padha nalika ngisi file YAML, mula kudu dilebokake cithakan kasebut minangka komentar. Sabanjure sampeyan bisa nyalin cithakan iki lan ketik data nyata ing kana, contone:

---
# - <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. Gunakake sing beda

Yen aplikasi ora duwe stranglehold ing sampeyan, sampeyan bisa uga kudu ngganti YAML menyang format sing beda. Sajrone wektu, file konfigurasi bisa ngluwihi dhewe lan banjur luwih apik kanggo ngowahi dadi skrip prasaja ing Lua utawa Python.

YAML minangka barang sing apik sing disenengi wong akeh amarga minimalis lan kesederhanaan, nanging adoh saka siji-sijine alat ing arsenal sampeyan. Dadi kadang sampeyan bisa nolak. Pustaka parsing gampang digoleki kanggo YAML, dadi yen sampeyan nawakake pilihan migrasi sing gampang, pangguna sampeyan bakal slamet saka kegagalan iki kanthi relatif tanpa rasa lara.

Yen sampeyan ora bisa nindakake tanpa YAML, banjur njupuk 10 tips iki lan ngatasi rasa ora seneng YAML sapisan lan kanggo kabeh!

Source: www.habr.com

Add a comment