yq ile YAML İşleme: Temel Prensipler ve İleri Kullanımlar

0 Yanıt 9 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #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
  • 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:
    KOD
    1yq 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:
    KOD
    1yq 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:
    KOD
    1yq 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:
    KOD
    1yq 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:
    KOD
    1yq 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:
    KOD
    1yq 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.

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 3, Üyeler: 3, Misafirler: 0)
Toplam: 3 (üyeler: 3, misafirler: 0)
0 alıntı seçildi