Kita semua cinta Ansible, tetapi Ansible adalah YAML. Ada banyak format untuk file konfigurasi: daftar nilai, pasangan nilai-parameter, file INI, YAML, JSON, XML, dan banyak lainnya. Namun, karena beberapa alasan, dari semua ini, YAML sering dianggap sangat sulit. Secara khusus, terlepas dari minimalis yang menyegarkan dan kemampuan yang mengesankan untuk bekerja dengan nilai-nilai hierarkis, sintaks YAML dapat mengganggu dengan pendekatan indentasi seperti-Python.

Jika YAML membuat Anda marah, Anda bisa - dan harus! - Ambil 10 langkah berikut untuk mengurangi iritasi Anda ke tingkat yang dapat diterima dan cinta YAML. Seperti yang seharusnya ada dalam daftar ini, sepuluh tips kami akan dinomori dari awal, kami menambahkan meditasi dan latihan spiritual sesuka hati ;-)
0. Jadikan editor Anda berfungsi
Tidak masalah editor teks seperti apa yang Anda miliki - untuknya, pasti, setidaknya ada satu plugin untuk bekerja dengan YAML. Jika Anda tidak memilikinya, cari dan instal segera. Waktu yang dihabiskan untuk pencarian dan pengaturan akan terbayar berkali-kali setiap kali Anda harus mengedit YAML.
Sebagai contoh, editor
Atom mendukung YAML secara default, tetapi GNU Emacs harus menginstal paket tambahan, misalnya,
mode-yaml .
Emacs dalam mode YAML dan ruang tampilan.Jika editor favorit Anda tidak memiliki mode YAML, maka beberapa masalah dapat diselesaikan dengan bekerja dengan pengaturan. Sebagai contoh, editor teks Gedit standar untuk GNOME tidak memiliki mode YAML, tetapi defaultnya untuk menyoroti sintaks YAML dan memungkinkan Anda untuk mengonfigurasi lekukan:
Pengaturan indentasi Gedit.Dan plugin
drawspaces untuk Gedit menampilkan spasi sebagai titik, menghilangkan ambiguitas dengan level indentasi.
Dengan kata lain, luangkan waktu untuk mempelajari editor favorit Anda. Cari tahu apa yang dia atau komunitas pengembangnya tawarkan untuk bekerja dengan YAML, dan gunakan fitur-fitur ini. Anda pasti tidak akan menyesalinya.
1. Gunakan linter (linter)
Idealnya, bahasa pemrograman dan markup menggunakan sintaksis yang dapat diprediksi. Komputer melakukan pekerjaan yang dapat diprediksi, sehingga pada tahun 1978 konsep
linter muncul . Jika selama 40 tahun keberadaannya berlalu begitu saja dan Anda masih belum menggunakan YAML-linter, maka inilah saatnya untuk mencoba yamllint.
Anda dapat menginstal
yamllint menggunakan manajer paket Linux standar. Misalnya, di
Red Hat Enterprise Linux 8 atau
Fedora, ini dilakukan seperti ini:
$ sudo dnf install yamllint
Kemudian Anda hanya menjalankan yamllint, meneruskannya file YAML untuk verifikasi. Ini seperti apa jika Anda mengirimkan file kesalahan ke 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-angka di sebelah kiri bukan waktu, tetapi koordinat kesalahan: nomor baris dan kolom. Deskripsi kesalahan mungkin tidak memberi tahu Anda apa-apa, tetapi Anda tahu persis di mana itu. Lihat saja tempat ini dalam kode, dan kemungkinan besar, semuanya akan menjadi jelas.
Ketika yamllint tidak menemukan kesalahan dalam file, tidak ada yang ditampilkan. Jika Anda takut akan keheningan seperti itu dan ingin umpan balik yang lebih sedikit, maka Anda dapat memulai linter dengan perintah echo bersyarat melalui double ampersand (&&), seperti ini:
$ yamllint perfect.yaml && echo "OK" OK
Dalam POSIX, ampersand ganda dipicu jika dan hanya jika perintah sebelumnya mengembalikan 0. Dan yamllint hanya mengembalikan jumlah kesalahan yang ditemukan, sehingga seluruh konstruksi bersyarat ini berfungsi.
2. Tulis dengan Python, bukan YAML
Jika YAML benar-benar membuat Anda kesal, hanya saja jangan menuliskannya. Itu terjadi bahwa YAML adalah satu-satunya format yang dirasakan oleh aplikasi. Tetapi dalam hal ini, tidak perlu membuat file YAML. Tulis apa yang Anda suka, dan kemudian ubah. Misalnya, untuk Python ada perpustakaan
pyyaml ββyang hebat dan dua metode konversi keseluruhan: konversi diri dan konversi berbasis skrip.
Konversi diri
Dalam hal ini, file data juga merupakan skrip Python yang menghasilkan YAML. Metode ini paling cocok untuk set data kecil. Anda cukup menulis data JSON ke variabel Python, awalan dengan arahan impor, dan tambahkan tiga baris di akhir file untuk mengimplementasikan 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
Sekarang jalankan file ini dengan Python dan file outputnya adalah 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
Ini benar-benar benar YAML, tetapi yamllint akan memperingatkan Anda bahwa itu tidak dimulai dengan ---. Nah, ini dapat dengan mudah diperbaiki secara manual atau sedikit dimodifikasi Python-script.
Konversi melalui skrip
Dalam hal ini, pertama-tama kita menulis dalam JSON dan kemudian menjalankan konverter dalam bentuk skrip Python yang terpisah, yang menghasilkan YAML dalam output. Dibandingkan dengan yang sebelumnya, metode ini memiliki skala yang lebih baik karena konversi dipisahkan oleh data.
Pertama, buat file JSON example.json, misalnya, Anda dapat mengambilnya di
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" } } } } }
Kemudian buat konverter skrip sederhana dan simpan dengan nama json2yaml.py. Script ini mengimpor kedua modul - YAML dan JSON Python, dan juga mengunduh file JSON yang ditentukan pengguna, melakukan konversi dan menulis data ke 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()
Simpan skrip ini di jalur sistem dan jalankan sesuai kebutuhan:
$ ~/bin/json2yaml.py example.json
3. Mengupas banyak dan sering
Terkadang berguna untuk melihat masalah dari sudut yang berbeda. Jika Anda merasa sulit membayangkan hubungan antara data dalam YAML, Anda dapat mengubahnya sementara menjadi sesuatu yang lebih akrab.
Misalnya, jika Anda merasa nyaman bekerja dengan daftar kamus atau JSON, maka YAML dapat dikonversi ke JSON hanya dengan dua perintah di shell interaktif Python. Misalkan Anda memiliki file YAML mydata.yaml, maka berikut ini tampilannya:
$ 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 Road\n', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}
Banyak contoh lain dapat ditemukan pada subjek ini. Selain itu, ada banyak konverter online dan parser lokal. Jadi jangan ragu untuk memformat ulang data saat Anda melihat di dalamnya hanya hash yang tidak bisa dipahami.
4. Baca spesifikasi
Kembali ke YAML setelah istirahat panjang, akan bermanfaat untuk mengunjungi
yaml.org dan membaca kembali spesifikasi. Jika Anda mengalami kesulitan dengan YAML, tetapi tangan Anda belum mencapai spesifikasi, maka inilah saatnya untuk memperbaiki situasi ini. Secara mengejutkan spesifikasi mudah untuk ditulis, dan persyaratan sintaksis diilustrasikan oleh sejumlah besar contoh di
Bab 6 .
5. Pseudoconfigs
Saat menulis buku atau artikel, selalu berguna untuk membuat garis besar rencana pendahuluan, setidaknya dalam bentuk daftar isi. Begitu pula dengan YAML. Kemungkinan besar, Anda membayangkan data apa yang perlu Anda tulis ke file YAML, tetapi Anda tidak benar-benar mengerti bagaimana cara menghubungkannya satu sama lain. Karena itu, sebelum memahat YAML, buat pseudo-config.
Pseudo-config mirip dengan pseudo-code, di mana Anda tidak perlu khawatir tentang struktur atau lekukan, hubungan orangtua-anak, warisan dan bersarang. Jadi di sini: Anda menggambar iterasi data ketika mereka muncul di kepala Anda.
Seorang programmer daftar pseudo-config (Martin dan Tabitha) dan keterampilan mereka (bahasa pemrograman: Python, Perl, Pascal dan Lisp, Fortran, Erlang, masing-masing).Setelah menggambar pseudo-config pada selembar kertas, analisis dengan cermat dan, jika semuanya beres, formatlah sebagai file YAML yang valid.
6. Tab atau dilema dilema
Anda harus menyelesaikan dilema
βtab atau spasi?β . Bukan dalam arti global, tetapi hanya di tingkat organisasi Anda, atau setidaknya proyek. Tidak masalah apakah post-processing dengan skrip sed digunakan, pengaturan editor teks pada mesin pemrogram, atau penerimaan umum tanda terima untuk ketaatan yang ketat terhadap instruksi dari linter di bawah ancaman pemberhentian, tetapi semua anggota tim Anda yang dengan cara apa pun terkait dengan YAML harus Gunakan hanya spasi (seperti yang dipersyaratkan oleh spesifikasi YAML).
Di editor teks biasa, Anda dapat mengatur tab KoreksiOtomatis ke sejumlah spasi tertentu, sehingga Anda tidak takut dengan kerusuhan
Tab .
Karena setiap pembenci YAML sangat menyadari, perbedaan antara tab dan spasi tidak terlihat di layar. Dan ketika sesuatu tidak terlihat, ini biasanya diingat terakhir, setelah diurutkan, diperiksa dan dihilangkan semua kemungkinan masalah lainnya. Jam waktu yang dihabiskan untuk mencari kurva tab atau blok ruang hanya menjerit bahwa Anda sangat perlu membuat kebijakan untuk menggunakan satu atau yang lain, dan kemudian menerapkan verifikasi konkret kepatuhan kepatuhannya (misalnya, melalui kait Git untuk dipaksa berjalan melalui linter).
7. Lebih baik lebih sedikit lebih baik (atau lebih banyak lebih sedikit)
Beberapa orang suka menulis dalam YAML karena menekankan struktur. Pada saat yang sama, mereka secara aktif menggunakan indentasi untuk menyoroti blok data. Ini adalah semacam penipuan untuk mensimulasikan bahasa markup yang menggunakan pembatas eksplisit.
Berikut adalah contoh penataan seperti itu dari
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
Bagi sebagian orang, opsi ini membantu menguraikan struktur YAML di kepala, sebaliknya, itu mengganggu orang lain dengan banyak lekukan yang tidak diinginkan, menurut pendapat mereka.
Tetapi jika Anda adalah pemilik dokumen YAML dan bertanggung jawab atas pemeliharaannya, maka
Anda dan hanya Anda yang harus menentukan cara menggunakan lekukan. Jika Anda terganggu oleh lekukan yang besar, jaga agar seminimal mungkin sesuai dengan spesifikasi YAML. Misalnya, file di atas dari dokumentasi Ansible dapat ditulis ulang tanpa kehilangan seperti ini:
--- - martin: name: Martin D'vloper job: Developer skills: - python - perl - pascal - tabitha: name: Tabitha Bitumen job: Developer skills: - lisp - fortran - erlang
8. Gunakan kosong
Jika Anda terus-menerus mengulangi kesalahan yang sama saat mengisi file YAML, masuk akal untuk memasukkan template kosong ke dalamnya sebagai komentar. Maka lain kali mungkin hanya akan menyalin benda kerja ini dan memasukkan data nyata di sana, misalnya:
--- # - <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. Gunakan sesuatu yang lain
Jika aplikasi tidak menahan Anda dalam cengkeraman, maka mungkin ada baiknya mengubah YAML ke format lain. Seiring waktu, file-file konfigurasi dapat melebihi diri mereka sendiri dan kemudian lebih baik untuk mengubahnya menjadi skrip sederhana dalam Lua atau Python.
YAML adalah hal hebat yang disukai banyak orang karena minimalis dan kesederhanaannya, tetapi ini jauh dari satu-satunya alat di gudang senjata Anda. Jadi terkadang Anda bisa menolaknya. Mudah bagi YAML untuk menemukan parsing pustaka, jadi jika Anda menawarkan opsi migrasi yang nyaman, pengguna Anda akan selamat dari kegagalan ini relatif tanpa rasa sakit.
Jika Anda tidak bisa melakukannya tanpa YAML, maka gunakan 10 kiat ini dan kalahkan ketidaksukaan Anda terhadap YAML untuk selamanya!