Bagaimana cara memvalidasi file YAML saya dari baris perintah?

91

Saya mengalami masalah saat menarik dari file konfigurasi YAML:

Kesalahan fatal: saat mengurai pemetaan blok; diharapkan <blok akhir>, tetapi menemukan entri blok

Meskipun ada banyak validator YAML online, yang telah saya coba dan bantu, saya ingin memvalidasi file YAML saya dari baris perintah dan mengintegrasikannya ke dalam pipeline integrasi berkelanjutan saya.

Bagaimana cara memvalidasi sintaks file YAML pada baris perintah?

slideshowp2
sumber
5
Coba:travis lint .travis.yml
kenorb
4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
Natim
21
Pertanyaan ini tidak boleh ditutup. Mungkin mengubah kata-katanya menjadi "Bagaimana cara memvalidasi file YAML saya dari baris perintah". Ini adalah pertanyaan yang valid dan berguna
Hanxue
5
Seconded @hanxue - Ini muncul sebagai hasil pertama ketika mencari topik dan harus menjadi referensi yang berguna ketika google membawa kita ke sini.
brice
5
Ya, pertanyaan ini tidak boleh ditutup. Saya tidak berpikir jawabannya adalah opini atau spam.
Joey Novak

Jawaban:

147

Dengan instalasi Ruby dasar, ini seharusnya berfungsi:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml

Versi Python (thx @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
Tombart
sumber
2
Jika Anda menghapus puts yakhir ini maka Anda mendapatkan perilaku UNIX yang lebih standar: jika file tersebut valid maka tidak ada yang akan dicetak, dan jika tidak valid maka Anda akan melihat pengecualian dan pelacakan tumpukan.
bdesham
… Dan jika Anda menghapusnya, puts yAnda juga bisa menyingkirkan y=.
bdesham
Terima kasih, itu pasti lebih baik dan lebih singkat.
Tombart
1
Dan jika Anda benar-benar hanya menggunakan ini sebagai bagian dari pipeline uji ci, maka tidak perlu putssama sekali. Kode 0pengembalian hanya jika valid, selain itu bukan nol dan Anda akan mendapatkan pelacakan tumpukan pengecualian. Mengurangi noise pada output CLI bahkan jika Anda melihatnya.
Jeff Puckett
1
Jika Anda menggunakan yang berikut ini: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"Anda dapat meneruskan nama file setelahnya, daripada harus mengedit cuplikan secara langsung.
pnomolos
22

Mengingat bahwa Anda memiliki instalasi perl di server yang Anda kerjakan, dan memiliki beberapa alat YAML dasar, Anda dapat menggunakan ...

perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'

Perlu dicatat bahwa ini akan ketat dalam interpretasi file itu, tetapi berguna.

CS Marshall
sumber
3
Tidak dapat menemukan YAML.pm
Natim
4
/ usr / bin / perl -MCPAN -e 'install YAML'
Ben Mathews
mungkin ada masalah dengan instalasi CPAN tetapi:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim
Jika hal di atas tidak berhasil, Anda selalu dapat mencoba: perl -MCPAN -e 'shell'dan kemudian di baris perintah lakukaninstall YAML
Cheruvim
9

Anda bisa menggunakan yamllint . Ini tersedia di Homebrew, dll. Dapat digunakan untuk validasi sintaks serta untuk linting.

James Hiew
sumber
6

Untuk memperbaiki .yamlfile Anda, saya merekomendasikan alat yamllint. Ini dapat diluncurkan dengan mudah dari konsol lokal.

Paket yamllintini tersedia untuk semua sistem operasi utama.

Ini dapat diinstal dari sumber paket sistem. (misalnya sudo apt-get install yamllint). Lihat dokumentasi untuk mulai cepat dan instalasi.

kinafu
sumber
1

Jika Anda tidak memasang interpreter di lingkungan Anda tetapi masih mendapatkan curl , Anda dapat menggunakan proyek linter online seperti Lint-Trilogy :

curl -X POST  --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json

Ini memberikan hasil validasi termasuk. deskripsi kesalahan (jika ada) sebagai json atau csv atau, jika memadai, sebagai teks biasa benar atau salah .

Ini tersedia sebagai file buruh pelabuhan juga. Jadi, jika Anda sering membutuhkan linter berbasis REST, mungkin dalam pipeline CI / CD, mungkin berguna untuk menghosting instance sendiri di situs Anda.

Dokter
sumber
-9

Atau secara bergantian instal (gratis) Eclipse IDE dan kemudian YEdit yaml editor dan lihat yaml Anda dengan penyorotan sintaks, tanda kesalahan, dan tampilan garis besar. Biaya pengaturan satu kali bekerja cukup baik untuk saya.

Ernie
sumber
3
OP secara khusus meminta solusi CLI.
crantok