Jinja2 in Ansible
1) Hatırlatma: Jinja2 Nedir?
Daha önceki adımlarda gördüğümüz gibi Jinja2, değişkenleri ve şablon sözdizimini kullanarak metin dosyaları üretmemize izin veren bir şablonlama (templating) motorudur.
{{ variable }}
ile değişken yerleştirme| upper
,| default
gibi filtreler ile veriyi dönüştürme{% if %}
,{% for %}
gibi yapılarla koşul/döngü
Ansible ise bu motoru kullanarak playbook dosyaları, konfigürasyon şablonları (template) vb. içinde değişkenleri otomatik olarak yerleştirir.
2) Ansible’ın Jinja2’ye Eklediği Filtreler
Jinja2 aslında Python için yazılmış bir kütüphanedir. Ansible, altyapı yönetimine özel gereksinimleri karşılamak için bunu genişletmiş, fazladan filtreler eklemiştir. Örneğin:
YAML-JSON dönüşümleri (
to_yaml
,to_json
,from_yaml
,from_json
)Dosya yolu (path) ve dosya adı (basename) işlemleri (Linux/Windows farklı)
Şifreler, regex (normal ifade) işlemleri vs.
Bu ek filtreler, ansible-core veya ansible belgelerinde “Ansible Filters” başlığı altında bulunabilir.
2.1 Dosya Tabanlı Filtreler (Linux vs. Windows)
Örneğin, /etc/hosts
gibi bir tam yolu (full path) elimizde varsa, dosya adını çekmek için:
Çıktı: hosts
Windows’ta ise yol yapısı
C:\Windows\System32\drivers\etc\hosts
şeklinde ters taksim (backslash) içerir. Bu nedenle Ansible,win_basename
gibi özel filtreler sunar:
Çıktı: hosts
win_splitdrive
Windows’ta sürücü harfi ve geri kalan yolun ayrılması için:
Çıktı:
["C:", "\\Windows\\hosts"]
(bir liste döner; ilk eleman sürücü, ikinci eleman yol).Yalnızca sürücü harfine ihtiyacınız varsa filtreyi zincirleyebilirsiniz:
Çıktı:
C:
3) Jinja2 Playbook’larda Nasıl Çalışıyor?
Bir playbook veya template dosyasında {{ ... }}
gördüğünüz her yer, Ansible tarafından Jinja2 ile işlenir:
Envanter (inventory) ve değişken dosyalarından (vars files) topladığı değerleri Jinja2 motoruna iletir.
Jinja2, bu değerleri
{{ variable }}
yerlerine koyar ve| filter
ifadelerini uygular.Sonuçta gerçek playbook veya şablon dosyası, değişkenler yerleştirilmiş halde Ansible tarafından yürütülür.
Örnek:
Ansible playbook çalışırken, basename
filtresi devreye girer, /etc/hosts
→ hosts
şeklinde dönüşür ve ekrana:
çıktısı basılır.
4) Filtreleri Nerede Bulurum?
Ansible resmi belgelerinde (“Ansible Filters” veya “Jinja2 Filters” başlığı altında) pek çok filtre örneği bulabilirsiniz.
yaml
vejson
çevirileri,regex_replace
,ipaddr
,hashing (md5, sha256)
gibi bir dizi ek filtre mevcuttur.
Last updated
Was this helpful?