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

0 Respuestas 11 Visitas
Valoraciones
Participantes
Autor del tema #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:
    CÓDIGO
    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:
    CÓDIGO
    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:
    CÓDIGO
    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:
    CÓDIGO
    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:
    CÓDIGO
    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:
    CÓDIGO
    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.

Debes haber iniciado sesión para responder.

Usuarios que están viendo este tema (Total: 2, Miembros: 2, Invitados: 0)
Total: 2 (miembros: 2, invitados: 0)
0 citas seleccionadas