Yamllint'i yıllardır Ansible playbook'larımızı ve Kubernetes manifestlerimizi temiz tutmak için kullanıyorum. Kutu dışında çalışıyor, ancak varsayılan kural seti, bağlamımızdaki gerçek sorunlar olmayan şeyleri sık sık işaretliyor — örneğin uzun URL'lerdeki satır uzunluğu veya denetim izleri için niyetli olarak tuttuğumuz izleyen yorumlar. Bir kez daha yanlış pozitifleri yok saymak için ignore desenleriyle uğraştıktan sonra, sadece belirtileri bastırmak yerine, yapay zekanın projeye özgü daha iyi kurallar önerip öneremeyeceğini merak ettim.
GPT-4o'yi mevcut .yamllint dosyamı analiz etmek ve gerçek lint değerini korurken gürültüyü azaltacak özelleştirilmiş kural eklemeleri üretmek için nasıl kullandığımı şu şekilde anlatıyorum.
Varsayılan yamllint kuralları neden gürültü oluşturur
Standart yamllint yapılandırması, genel YAML kullanımını varsayar. Ancak altyapı-kod-olarak (infrastructure-as-code) kullanımında, bu varsayımları bozan desenler vardır. Örneğin:
- Helm grafiklerindeki uzun
source:URL’leri, 80 karakterlik sınırı aşar ama kısaltmak imkansızdır - Tam şablon renderi için korunan sondaki boşluklu çok satırlı dizgeler
{{ var | default('') }}gibi Ansible’ye özgü yapılar, köşeli ayraçlar veya tırnaklar üzerinde yanlış pozitif tetikler
Bu durumlar hata değildir — bunlar ticaredir. ignore: ile kuralları genel olarak devre dışı bırakmak, gerçek sorunları da gizler. İhtiyacımız olan, genel susturma değil, akıllı kural ayarıdır.
Yapay Zeka Analizi İçin Bağlam Çıkarma
İlk olarak, mevcut .yamllint yapılandırmamı ve yanlış pozitif tetikleyen dosyaların temsilci bir örneğini dışa aktardım. Token sınırları içinde kalmak için örneği küçük tuttum — farklı projelerden sadece 10–15 dosya.
Ardından GPT-4o'ya şu şekilde istemde bulundum:
Bu .yamllint yapılandırmasını ve sürekli yanlış pozitif tetikleyen aşağıdaki YAML parçacıklarını analiz et. Gerçek sözdizimi veya biçimlendirme sorunlarının tespitini kaybetmeden gürültüyü azaltacak spesifik kural ayarlamaları veya yeni özel kurallar öner.
Mevcut .yamllint:
.yamllint
extends: default ignore: | .git/ .tox/ __pycache__/
rules: line-length: disable trailing-spaces: disable comments-indentation: disable comments: disable braces: disable brackets: disable indentation: spaces: consistent indent-sequences: consistent check-multi-line-strings: false
Yanlış pozitif tetikleyen YAML parçacıkları:
source: https://example.com/very/long/url/that/exceeds/eighty/characters/and/contains/query/params?foo=bar&baz=qux
- name: Deploy application
- name: Check version
hosts: webservers vars: app_version: "{{ lookup('env', 'APP_VERSION') | default('latest') }}" tasks:
debug: msg: "Version is {{ app_version }} " # Not: iki boşluk inten şablon için
apiVersion: v1 kind: Service metadata: name: frontend-svc labels: app.kubernetes.io/name: frontend spec: ports:
- port: 80
targetPort: 8080 protocol: TCP name: http # Değerden sonra yorum selector: app.kubernetes.io/name: frontend
Sağla:
1. Yanlış pozitifleri azaltacak spesifik kural değişiklikleri
2. Desenler değer öneriyorsa opsiyonel yeni özel kurallar
3. Her öneri için kısa açıklama
Anahtar, modeli sadece genel tavsiye istemek yerine, yapılandırmayı ve gerçek örnekleri birlikte vermektir.
AI tarafından önerilen kural önerileri
Birkaç yineleme sonrası, GPT-4o şunları önerdi:
- Satır uzunluğunu istisnalarla yeniden etkinleştir
Tamamen devre dışı bırakmak yerine, level: warning kullan ve sürümün destekliyorsa ignore-numbers: true ve ignore-urls: true ekle (yamllint >= 1.30.0). Daha eski sürümler için regex tabanlı bir ignore tanımla:
line-length:
max: 80
level: warning
allow-nonascii: false
ignore-pattern: '^\s*source:\s*https?://' # Uzun kaynak URL'lerini yoksay
- Akıllı boşluklu son satır işleme
Kuralı sadece gerektiği yerlerde devre dışı bırak, ignore-pattern kullanarak amaçlı durumlar için:
trailing-spaces:
level: warning
ignore-pattern: ' $|#.* $|: "[^"]*" $|: \'[^\']*\' ' # Yorumlar, tırnaklı dizelerden sonraki boşluklar
- Yorum girintisi kontrollerini koru
Devre dışı bırakmayın — ayarlayın. Yorumların hizalanmasını isteriz, ancak değerlerden sonraki yorumlar için cezalandırmamak isteriz:
comments-indentation:
level: warning
ignore-inline-comments: true
indent-sequences: false
ignore-multiline-comments: false
- Ansible farkındalıkla köşeli parantezleri yeniden etkinleştir
Bu kurallar when: gibi yanlışsız tırnaklanmamış ifadeleri yakalar. Devre dışı bırakmak yerine, bilinen yanlış pozitifleri yok say:
braces:
level: warning
ignore-pattern: '\{\{[^}]*\}\}' # Jinja2/Ansible ifadelerini yoksay
brackets:
level: warning
ignore-pattern: '\[\[[^]]*\]\]' # Ansible liste filtrelerini yoksay: `{{ items | flatten }}`
- Tırnaklı boolean değerler için özel bir kural ekle
AI tarafından tespit edilen gerçek bir sorun: yes/no, true/false gibi değerleri gereksiz yere tırnak içinde kullanıyoruz, Ansible bunları string olarak algılar. Özel kural önerisi:
custom:
id: quoted-booleans
level: warning
description: 'Boolean benzeri değerler çevresindeki gereksiz tırnaklar'
regex: "\"(yes|no|true|false|on|off)\"|\'(yes|no|true|false|on|off)\''
match: value
Bu kural, enabled: "true" gibi durumları yakalar; bunlar açıkça string olarak gerekli olmadıkça enabled: true olmalıdır.
Önerilerin Uygulanması ve Test Edilmesi
Değişiklikleri bir branşa uyguladım ve monorepomuz üzerinde yamllint'i çalıştırdım. Sonuçlar:
- Toplam uyarı sayısı %62 civarında düştü
- 50+ rastgele dosyanın manuel incelemesinde yeni hata kaçırılmadı
quoted-booleanskuralı,enabled: "yes"gibi ifadelerin koşulları bozduğu 3 gerçek hatayı yakaladı
Derleme artefaktları için ignore: yollarını korudum — bu dosyalar AI yardımı gerektirmez.
Sınırlamalar ve İş Akışı İpuçları
Bu hâlâ tamamen otomatikleştirilmemiş. AI, inceleme yapmadan .yamllint dosyamı yeniden yazmaya izin vermiyorum. Ancak kural ayarlaması için bir ses tahtası olarak kullanmak harika — özellikle yanlış pozitiflerle boğuşmak yorucu hale geldiğinde ve şu soruyu sormak istediğin zaman: bu gürültü mü, yoksa gerçek bir deseni mi kaçırıyorum?
Bunu denerseniz:
- Küçük, temsil edici bir dosya örneğiyle başlayın
- Sadece yapılandırma değil, açıklama isteyin — bu öğrenmenize yardımcı olur
- Önerileri önce üretim olmayan bir dallada doğrulayın
- Bu işi bir çeyrek yıllık ayarlama görevi olarak düşünün, tek seferlik bir şey olarak değil
Daha önce [LLM tabanlı log analizi](https://furkanikkan.com/urun/llm-tabanli-gunluk-analizi-ile-yetkisiz-ssh-girislerini-tespit-etme-73) konulu yazımda da belirttiğim gibi, AI uzmanlığınızı değiştirmek yerine onu desteklediğinde en iyi şekilde çalışır. Burada, binlerce YAML dosyası görmüş birinin lensiyle kendi yapılandırmamı gördüm ve yıllar alışkanlık haline gelen benim düşüneceğim tweaks’leri önerdi.
En rahatsız edici yanlış pozitifinizle deneyin. Düzeltmenin daha fazla şeyi görmezden gelmek değil, daha iyi kural tasarımı yapmak olduğunu keşfedebilirsiniz.
Kapak görseli: ₡ґǘșϯγ Ɗᶏ Ⱪᶅṏⱳդ · CC0 (Openverse / kamu malı) · https://www.flickr.com/photos/148598741@N02/51973552248
