Kita semua menyukai Ansible, tapi 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, YAML sering kali dianggap sangat sulit. Secara khusus, meskipun memiliki minimalis yang menyegarkan dan kemampuan yang mengesankan untuk bekerja dengan nilai hierarki, sintaksis YAML dapat mengganggu dengan pendekatan lekukan yang mirip Python.
Jika YAML membuat Anda kesal, Anda bisaβdan Anda harus melakukannya! β lakukan 10 langkah berikut untuk mengurangi rasa frustrasi Anda ke tingkat yang dapat diterima dan jatuh cinta dengan YAML. Sesuai dengan daftar ini, sepuluh tips kami akan diberi nomor dari awal, kami akan menambahkan meditasi dan latihan spiritual sesuka hati π
0. Jadikan editor Anda berfungsi
Apa pun editor teks yang Anda miliki, mungkin setidaknya ada satu plugin untuk bekerja dengan YAML. Jika belum punya, segera cari dan instal. Waktu yang dihabiskan untuk mencari dan menyiapkan akan terbayar berkali-kali lipat setiap kali Anda harus mengedit YAML.
Misalnya saja redaktur
Emacs dalam mode YAML dan menampilkan spasi.
Jika editor favorit Anda tidak memiliki mode YAML, maka beberapa masalah dapat diselesaikan dengan menggunakan pengaturan. Misalnya, editor teks GNOME standar Gedit tidak memiliki mode YAML, tetapi secara default ia menyoroti sintaks YAML dan memungkinkan Anda mengonfigurasi pekerjaan dengan lekukan:
Mengatur indentasi di Gedit.
Sebuah plugin
Dengan kata lain, luangkan waktu untuk mempelajari editor favorit Anda. Cari tahu apa yang dia atau komunitas pengembangannya tawarkan untuk bekerja dengan YAML, dan gunakan fitur tersebut. Anda pasti tidak akan menyesalinya.
1. Gunakan linter
Idealnya, bahasa pemrograman dan bahasa markup menggunakan sintaksis yang dapat diprediksi. Komputer pandai dalam hal prediktabilitas, itulah sebabnya konsep
Untuk menginstal
$ sudo dnf install yamllint
Kemudian Anda cukup menjalankan yamllint, meneruskannya ke file YAML untuk diperiksa. Ini adalah tampilannya jika Anda meneruskan file yang error 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 di sebelah kiri bukanlah waktu, melainkan koordinat kesalahan: nomor baris dan kolom. Deskripsi kesalahannya mungkin tidak memberi tahu Anda apa pun, tetapi Anda tahu persis di mana letaknya. Lihat saja tempat ini di kode, dan kemungkinan besar semuanya akan menjadi jelas.
Ketika yamllint tidak menemukan kesalahan dalam file, tidak ada yang dicetak ke layar. Jika keheningan seperti itu membuat Anda takut dan Anda menginginkan lebih banyak masukan, maka Anda dapat menjalankan linter dengan perintah echo bersyarat melalui tanda ampersand ganda (&&), seperti ini:
$ yamllint perfect.yaml && echo "OK"
OK
Di POSIX, ampersand ganda diaktifkan jika dan hanya jika perintah sebelumnya mengembalikan 0. Dan yamllint hanya mengembalikan jumlah kesalahan yang ditemukan, itulah sebabnya seluruh konstruksi kondisional ini berfungsi.
2. Tulis dengan Python, bukan YAML
Jika YAML benar-benar membuat Anda kesal, jangan menulisnya secara harfiah. Kebetulan YAML adalah satu-satunya format yang dipahami aplikasi. Namun meskipun demikian, tidak perlu membuat file YAML. Tulis apa yang Anda suka dan kemudian konversi. Misalnya, ada perpustakaan yang bagus untuk Python
Konversi diri
Dalam hal ini, file data juga merupakan skrip Python yang menghasilkan YAML. Metode ini paling cocok untuk kumpulan data kecil. Anda cukup menulis data JSON ke dalam variabel Python, mengawalinya dengan arahan impor, dan di akhir file tambahkan tiga baris 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 kita jalankan file ini dengan Python dan dapatkan 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
Ini adalah YAML yang benar-benar valid, tetapi yamllint akan memperingatkan Anda bahwa ini tidak dimulai dengan -. Nah, ini dapat dengan mudah diperbaiki secara manual atau sedikit dimodifikasi dalam skrip Python.
Konversi melalui skrip
Dalam hal ini, pertama-tama kita menulis dalam JSON, lalu menjalankan konverter sebagai skrip Python terpisah, yang menghasilkan YAML sebagai keluaran. Dibandingkan dengan metode sebelumnya, metode ini memiliki skala yang lebih baik, karena konversinya terpisah dari data.
Pertama, mari kita buat file JSON example.json, misalnya Anda dapat mengambilnya
{
"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 kita akan membuat skrip konverter sederhana dan menyimpannya dengan nama json2yaml.py. Skrip ini mengimpor modul YAML dan JSON Python, dan memuat 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. Parsing yang banyak dan sering
Terkadang berguna untuk melihat suatu masalah dari sudut yang berbeda. Jika Anda kesulitan merepresentasikan hubungan antar data di YAML, Anda dapat mengubahnya untuk sementara menjadi sesuatu yang lebih familiar.
Misalnya, jika Anda merasa nyaman bekerja dengan daftar kamus atau JSON, Anda dapat mengonversi YAML ke JSON hanya dengan dua perintah di shell Python interaktif. Katakanlah Anda memiliki file YAML mydata.yaml, maka tampilannya akan seperti ini:
$ 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.'}
Anda dapat menemukan banyak contoh lain mengenai topik ini. Selain itu, ada banyak konverter online dan parser lokal yang tersedia. Jadi jangan ragu untuk memformat ulang data ketika Anda hanya melihat tumpukan data yang tidak dapat dipahami di dalamnya.
4. Baca spesifikasinya
Kembali ke YAML setelah istirahat panjang, ada gunanya berkunjung
5. Konfigurasi semu
Saat menulis buku atau artikel, ada baiknya jika terlebih dahulu membuat sketsa kerangka awal, setidaknya dalam bentuk daftar isi. Sama halnya dengan YAML. Kemungkinan besar, Anda memiliki gambaran tentang data apa saja yang perlu ditulis ke dalam file YAML, tetapi Anda tidak begitu memahami cara menghubungkannya satu sama lain. Oleh karena itu, sebelum membuat YAML, buatlah konfigurasi semu.
Pseudo-config mirip dengan pseudo-code, di mana Anda tidak perlu khawatir tentang struktur atau lekukan, hubungan orangtua-anak, pewarisan, dan penumpukan. Hal yang sama terjadi di sini: Anda menggambar iterasi data yang muncul di kepala Anda.
Pemrogram daftar konfigurasi semu (Martin dan Tabitha) dan keahlian mereka (bahasa pemrograman: Python, Perl, Pascal dan Lisp, Fortran, Erlang, masing-masing).
Setelah menggambar pseudo-config di selembar kertas, analisislah dengan cermat dan, jika semuanya beres, formatlah dalam bentuk file YAML yang valid.
6. Dilema Tab vs. Spasi
Anda harus memecahkan dilema tersebut
Di editor teks normal mana pun, Anda dapat mengonfigurasi tab koreksi otomatis ke jumlah spasi tertentu, sehingga pemberontakan penganut kunci Tab kamu tidak perlu takut.
Seperti yang diketahui dengan baik oleh setiap pembenci YAML, Anda tidak dapat melihat perbedaan antara tab dan spasi di layar. Dan ketika ada sesuatu yang tidak terlihat, biasanya hal itu menjadi hal terakhir yang diingat orang, setelah mereka memilah, memeriksa, dan menghilangkan semua kemungkinan masalah lainnya. Satu jam waktu yang dihabiskan untuk mencari kurva tabulasi atau blok ruang hanya menunjukkan bahwa Anda perlu segera membuat kebijakan untuk penggunaan salah satu atau yang lain, dan kemudian menerapkan pemeriksaan beton bertulang untuk kepatuhan terhadap kebijakan tersebut (misalnya, melalui kait Git untuk memaksanya melewati linter).
7. Lebih sedikit lebih banyak (atau lebih banyak lebih sedikit)
Beberapa orang suka menulis dalam YAML karena menekankan struktur. Pada saat yang sama, mereka secara aktif menggunakan indentasi untuk menyorot blok data. Ini semacam penipuan untuk meniru bahasa markup yang menggunakan pembatas eksplisit.
Berikut adalah contoh struktur tersebut dari
# 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 mereka memilah struktur YAML di kepala mereka; bagi yang lain, sebaliknya, opsi ini mengganggu mereka dengan banyak indentasi yang menurut mereka tidak perlu.
Namun jika Anda adalah pemilik dokumen YAML dan bertanggung jawab untuk memeliharanya, maka kamu dan hanya kamu harus mendefinisikan cara menggunakan indentasi. Jika Anda terganggu dengan padding yang besar, pertahankan seminimal mungkin sesuai dengan spesifikasi YAML. Misalnya, file di atas dari dokumentasi Ansible dapat ditulis ulang seperti ini tanpa kehilangan apa pun:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Gunakan yang kosong
Jika Anda terus-menerus mengulangi kesalahan yang sama saat mengisi file YAML, masuk akal untuk memasukkan template ke dalamnya sebagai komentar. Kemudian lain kali Anda cukup menyalin template 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 berbeda
Jika aplikasi tidak mencekik Anda, mungkin ada baiknya mengubah YAML ke format lain. Seiring waktu, file konfigurasi dapat berkembang lebih besar dan lebih baik mengubahnya menjadi skrip sederhana di Lua atau Python.
YAML adalah hal hebat yang disukai banyak orang karena minimalis dan kesederhanaannya, namun ini bukan satu-satunya alat di gudang senjata Anda. Jadi terkadang Anda bisa menolaknya. Pustaka penguraian mudah ditemukan untuk YAML, jadi jika Anda menawarkan opsi migrasi yang mudah, pengguna Anda akan selamat dari kegagalan ini tanpa kesulitan.
Jika Anda tidak bisa hidup tanpa YAML, ikuti 10 tips ini dan atasi ketidaksukaan Anda terhadap YAML untuk selamanya!
Sumber: www.habr.com