صاحب الموضوع
#1
[TAGS: yaml, yq, json, komut satırı, veri dönüşümü]
yq ile YAML İşleme: Temel Prensipler ve İleri Kullanımlar
YAML dosyalarını komut satırından hızlı ve güvenilir biçimde dönüştürmek, temizlemek veya filtrelemek çoğu yazılım projesinde günlük ihtiyaç haline geliyor. Özellikle yapılandırma dosyalarının farklı formatlara entegrasyonu ve sürüm kontrolünde sadeleşme açısından yq, jq’nin YAML için uyarlanmış hâli gibi düşünülebilir. Aşağıda temel mantık ile pratik yaklaşımları derledim.
Ana akış ve temel operasyonlar
İleri kullanımlar ve ipuçları
Güvenlik ve kararlılık notları
Bu konudaki deneyimleriniz veya farklı yollarla elde ettiğiniz dönüşümler var mı? Belirli bir YAML yapısını hedefleyen yorumlarınızla bu konuyu birlikte genişletelim.
yq ile YAML İşleme: Temel Prensipler ve İleri Kullanımlar
YAML dosyalarını komut satırından hızlı ve güvenilir biçimde dönüştürmek, temizlemek veya filtrelemek çoğu yazılım projesinde günlük ihtiyaç haline geliyor. Özellikle yapılandırma dosyalarının farklı formatlara entegrasyonu ve sürüm kontrolünde sadeleşme açısından yq, jq’nin YAML için uyarlanmış hâli gibi düşünülebilir. Aşağıda temel mantık ile pratik yaklaşımları derledim.
Ana akış ve temel operasyonlar
- Okuma ve gezinme: yq, YAML içindeki belirli yolları izleyerek değerleri çıkarır. Örnek olarak bir dosyada kök altında bulunan ‘services’ listesindeki ikinci elemanın ‘port’ değerini almak pratikte şu şekilde çalışır: كود
1
yq eval '.services[1].port' config.yaml - Dönüştürme: YAML’yi JSON’a çevirmek veya tam tersi işlem yapmak, başka araçlarla entegrasyonu kolaylaştırır. Örneğin JSON’a dönüştürme: كود
1
yq eval -o=json '.' config.yaml | jq . - Filtreleme ve yeniden yapılandırma: Belirli anahtarları seçip yeni bir yapı oluşturabilirsiniz. Örneğin sadece servis adlarını ve portlarını içeren bir çıktı için: كود
1
yq eval '.services[] | {name: .name, port: .port}' config.yaml
İleri kullanımlar ve ipuçları
- Dereferencing ve varsayılan değerler: Mevcut alan yoksa hata yerine varsayılan değer kullanmak için coalescing kullanabilirsiniz: كود
1
yq eval '.services // []' config.yaml - Dosya karşılaştırması: İki YAML dosyasını farklılıklar açısından karşılaştırmak için iki adımlı akış kullanılır; önce normalize etmek, sonra farkı görmek. Örneğin: كود
1
yq eval '.' a.yaml > a.json; yq eval '.' b.yaml > b.json; diff a.json b.json - Çok seviyeli desenler: nested yapılarla çalışırken ancak bazı alanlar için filtre uygulamak faydalı olur. Örneğin tüm hizmetlerin adlarını ve etiketlerini çıkarmak: كود
1
yq eval '.services[] | {name: .name, tags: .tags}' config.yaml
Güvenlik ve kararlılık notları
- Büyük YAML dosyalarında bellek kullanımı kritik olabilir; akışçı işlemler yerine parçalı işleme ihtiyaç doğabilir.
- Bozuk yapıların ele alınışı: yanlış girinti veya tanımlı olmayan alanlar yq ile hata verebilir; bu yüzden ön okuma ve doğrulama adımlarını eklemek isabetli olur.
Bu konudaki deneyimleriniz veya farklı yollarla elde ettiğiniz dönüşümler var mı? Belirli bir YAML yapısını hedefleyen yorumlarınızla bu konuyu birlikte genişletelim.
