Yazılara geri dön
Yazı

GPT-4 ile Yamllint Entegre Ederek YAML Hatalarını Anında Düzeltebilirsiniz

Yamllint çıktısını GPT-4 ile akıllı düzeltme önerilerine dönüştürerek YAML konfigürasyon hatalarını daha hızlı çözün, hata ayıklama süresini kısaltın.

Yapay ZekayamllintGPT-4YAMLDevOps

Benim gibi çok sayıda sistem yöneticisi, Kubernetes manifestleri veya Ansible playbooklarıyla çalışırken, girinti hatası gibi küçük bir hatanın büyük bir servis kesintisine yol açtığını deneyimlemiştir. YAML, boşluk ve yapıya duyarlı olduğundan, küçük bir hatada büyük sorunlar doğabilir. Yamllint gibi geleneksel linterler, hatanın nerede olduğunu söyler ama nasıl düzeltilmesi gerektiğini söylemez. İşte burada GPT-4 devreye giriyor. Ben, yamllint’in hassasiyetiyle GPT-4’in bağlam anlama yeteneğini birleştiren hafif bir iş akışı oluşturdum. Bu sayede sadece hata raporlamakla kalmıyor, aynı zamanda bağlama uygun, doğru düzeltme önerileri sunuyorum. Ortamımda nasıl kurduğumu anlatayım.

Yamllint tek başına neden yeterli değil

CI pipeline’larında ve pre-commit hook’larında yamllint kullanarak açık sözdizimi sorunlarını yakalıyorum: eksik kolonlar, yanlış girinti, geçersiz ancorlar. Hızlı, güvenilir ve GitHub Actions gibi araçlarla iyi entegre oluyor. Ancak "line 12: missing required field ‘ports’" gibi bir hata mesajı aldığında, bu araç benim bir konteyner portu mu, bir hizmet portu mu tanımlamak istediğimi, yoksa bir refactor sırasında bu bloğu silip sildikemiimi bilmiyor. Takımlar, özellikle karmaşık Helm chart’ları veya Terraform ile yakından ilişkili YAML dosyalarında, linter hatasının niyetini tahmin etmek için saatlerce zaman kaybedebiliyor.

Asıl sorun hatayı tespit etmek değil, işlecin niyetini anlamak. İşte tam burada GPT-4 öne çıkıyor. Sadece bir sözdizimi boşluğunu görmekle kalmaz, çevreleyen yapıyı, yorumları, isimlendirme kalıplarını ve hatta dosyanın muhtemel amacını (örneğin bir Deployment mu yoksa bir ConfigMap mü) görür.

GPT-4’ü Yamllint ile nasıl entegre ettim

Kurulumum intentionally basit: yamllint’i çalıştıran, JSON çıktısını yakalayan ve her hatayı özelleştirilmiş bir prompt ile GPT-4’e yeten bir wrapper script. Gerektiği kadar dışarıya 전체 konfigürasyon göndermekten kaçınıyorum — sadece problemli parçayı ve onun etrafındaki yaklaşık 10 satır bağlamı gönderiyorum. Böylece maliyet düşük kalıyor ve gizlilik korunuyor.

Burada yerel ortamda veya CI’de çalıştırdığım temel script var:

#!/bin/bash
FILE="$1"
if [[ -z "$FILE" ]]; then
  echo "Usage: $0 <yaml-file>"
  exit 1
fi

# Run yamllint and parse JSON output
ERRORS=$(yamllint --format json "$FILE" 2>/dev/null)
if [[ $? -ne 0 ]]; then
  echo "yamllint failed on $FILE"
  exit 1
fi

# If no errors, we’re done
if [[ "$ERRORS" == "[]" ]]; then
  echo "✅ No yamllint errors found in $FILE"
  exit 0
fi

echo "🔍 Found $(echo "$ERRORS" | jq length) yamllint issues. Getting AI suggestions..."

# Process each error with GPT-4
echo "$ERRORS" | jq -c '.[]' | while read -r err; do
  LINE=$(echo "$err" | jq '.line')
  COLUMN=$(echo "$err" | jq '.column')
  MESSAGE=$(echo "$err" | jq -r '.message')
  RULE=$(echo "$err" | jq -r '.rule')

  # Extract context: 5 lines before and after
  START=$((LINE - 6))
  END=$((LINE + 5))
  START=$(($START < 1 ? 1 : $START))
  SNIPPET=$(sed -n "${START},${END}p" "$FILE" | cat -n)

  PROMPT="You are a YAML expert helping a sysadmin fix a config error.\n\nFile: $FILE\nError at line $LINE, column $COLUMN: $MESSAGE (Rule: $RULE)\n\nContext:\n$SNIPPET\n\nProvide:
1. A clear explanation of what’s likely wrong\n2. One or two specific, corrected YAML snippets\n3. If applicable, warn about common pitfalls (e.g., confusing list vs map indentation)\n\nKeep it concise. Do not add unrelated advice."

  RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "'$PROMPT'"}], "temperature": 0.2}' | \
    jq -r '.choices[0].message.content')

  echo "\n--- AI Suggestion for line $LINE ---"
  echo "$RESPONSE"
done

Bu scripti yamllint-ai.sh olarak kaydediyorum, çalıştırılabilir yapıp ~/bin/ dizinine bırakıyorum. Artık sadece şu şekilde bir çıktı görmek yerine:

nginx-deployment.yaml: 15: 8     error    missing required field "ports"  (required)

şöyle bir AI önerisi alıyorum:

--- AI Suggestion for line 15 ---
The error indicates that a container in your Deployment is missing the required 'ports' field. This is common when copying templates or refactoring.

Likely fix:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

Warning: Ensure indentation matches the parent 'containers' list item. A common mistake is indenting 'ports' under the container name instead of at the same level as 'image' and 'name'.

Bu sayede kriptik bir linter hatası, genellikle 10 saniye içinde uygulanabilir bir düzeltmeye dönüşüyor.

Üretimde kullanım için pratik ipuçları

  • API çağrılarını sınırla: Temiz dosyaları değil, sadece hataları gönderiyorum. Bazı takımlar her lint çalıştırmasında tam konfigürasyonları GPT-4’e göndererek maliyetleri artırıyor ve gereksiz iş yapıyor.
  • Son hataları önbelleğe al: Aynı dosyada yinelenen çalışmalar yapıyorsanız, aynı hatayı yeniden işlemek yerine son AI önerilerini yerel olarak saklayabilirsiniz.
  • Hallucinasyonlara dikkat et: GPT-4 güçlü ama hatasız değil. Her zaman önerileri resmi dokümantasyona göre kontrol ediyorum (örneğin Kubernetes API referansı). Onu bir uzman koleganın tavsiyesi gibi görüyorum — faydalı ama yetkili değil.
  • API anahtarını güvende tut: OPENAI_API_KEY’i script içinde açıkça yazma. direnv, 1Password CLI veya CI’de Kubernetes secret’leri kullan.
  • Mevcut araçlarla birleştir: Yamllint’i önce çalıştırıyorum. Hata bulmuyorsa AI’yi überhaupt çalıştırmıyorum — bu sayede hem maliyeti hem de gecikmeyi azaltıyorum.

Gerçek dünyadaki etki

Bu sistemi uyguladıktan sonra ekibimde YAML ile ilgili hata ayıklama süresini yaklaşık %40 oranında azalttım. Junior sistem yöneticileri artık bir PR’i incelemek için bir yetkiliye beklemek zorunda kalmıyor, anında rehber alıyor. Bir örnek olarak, Prometheus Rule dosyasında for: eksiliği olan bir hatayı AI yakaladı; bu hatayla ilgili alert yorgunluğuna yol açabilirdi. Yamllint bu hatayı yakalayamadı çünkü sözdizimi olarak geçerliydi.

Bu, linterleri değiştirmekle değil, onları güçlendirmekle ilgili. Yamllint bana "ne" hatalı olduğunu söyler; GPT-4 ise "neden" ve "nasıl" düzeltilmesi gerektiğini gösterir. Ölçekli altyapı-kod olarak yöneten herkes için bu kombinasyon bir force multiplier gibi çalışıyor.

Zaten iş akışınızda yamllint kullanıyorsanız (ve kullanmanız gerekiyor), onu akıllı bir AI katmanıyla sarmayı deneyin. Küçük başlayın: sorunlu dosyalar üzerinde elle çalıştırın. Bir kez bile tahriş edici hata ayıklama oturumunu kazandırırsa, bu çaba değerlidir.

Daha önce [Sistem Yöneticileri için AI CLI Araçları](https://furkanikkan.com/urun/sysadmin-ler-icin-ai-cli-araclari-log-analizi-ve-hata-tespitini-otomasyonlastirmak-61) konulu yazımda da belirttiğim gibi, hedef düşünmeyi otomatikleştirmek değil, uykucu görevleri ortadan kaldırarak gerçekten önemli olan bölüme odaklanabilmektir.


Kapak görseli: ₡ґǘșϯγ Ɗᶏ Ⱪᶅṏⱳդ · CC0 (Openverse / kamu malı) · https://www.flickr.com/photos/148598741@N02/51973552248