Magic Variables
Ansible'da her bir sunucu (host) için değişkenler tanımlayabilirsin. Örneğin, bir web2
adlı sunucun için özel bir DNS sunucusu IP adresi tanımladın. Normal şartlarda bu dns_server
değişkeni sadece web2
sunucusu üzerinde çalıştırılan görevler tarafından bilinir ve kullanılabilir. web1
veya web3
sunucuları bu bilgiye doğrudan erişemez.
İşte tam bu noktada Magic Variables devreye giriyor! 🪄
Magic Variables Nedir?
Magic Variables, Ansible'ın sana sunduğu, önceden tanımlanmış ve her zaman erişebileceğin özel değişkenlerdir. Bu değişkenler, playbook çalışırken Ansible'ın kendisi tarafından otomatik olarak doldurulur. En büyük faydalarından biri, bir sunucunun başka bir sunucuya ait bilgilere veya genel envanter yapısına dair verilere ulaşmasını sağlamaktır.
Ansible bir playbook başlattığında her bir host için ayrı işlemler (sub-processes) oluşturur. Normalde her işlem sadece kendi host'una ait değişkenleri bilir. Magic variables bu sınırları aşmamızı sağlar.
En Sık Kullanılan Magic Variables
1. hostvars
hostvars
Bu, belki de en sihirli olanıdır ✨ hostvars
sayesinde bir host, envanterdeki başka bir host'un değişkenlerine erişebilir.
Diyelim ki envanter dosyan (/etc/ansible/hosts
) şöyle:
web2
için bir dns_server
tanımladık. Şimdi web1
veya web3
üzerinden bu bilgiye ulaşmak istersen, playbook'unda şöyle bir ifade kullanırsın:
Bu görev çalıştığında, web1
, web2
ve web3
sunucularının hepsi web2
'nin dns_server
değerini (yani 10.5.5.4
) ekrana basacaktır. Harika, değil mi?
Sadece kendi tanımladığın değişkenlere değil, Ansible'ın topladığı facts (sunucu hakkındaki bilgiler: işletim sistemi, IP adresi, mimari vb.) bilgilerine de hostvars
ile erişebilirsin.
Örnek: {{ hostvars['web2'].ansible_facts.architecture }}
ifadesi web2
sunucusunun mimarisini (örn: x86_64) döndürür.
Altyazılarda da belirtildiği gibi, şu iki yazım şekli de aynı sonucu verir:
hostvars['web2'].dns_server
hostvars.web2.dns_server
(Eğer host adında özel karakterler yoksa bu daha kısa bir yoldur)
2. groups
groups
Bu magic variable, envanterindeki grupları ve o gruplara dahil olan host'ların bir listesini verir.
Diyelim ki envanterin şöyle:
Playbook'unda {{ groups['web_servers'] }}
ifadesini kullanırsan, bu sana ['web1', 'web2', 'web3']
listesini döndürür. Ya da {{ groups['all'] }}
tüm hostları listeler.
Örnek: americas
grubundaki tüm host'ları yazdırmak için:
3. group_names
group_names
Bu değişken, o an görevin çalıştığı host'un hangi gruplara üye olduğunu bir liste olarak verir.
Örneğin, web1
host'u hem web_servers
hem de americas
grubuna üye ise, web1
üzerinde çalışan bir görevde {{ group_names }}
ifadesi ['web_servers', 'americas']
listesini döndürür.
4. inventory_hostname
inventory_hostname
Bu değişken, o an görevin çalıştığı host'un envanter dosyasındaki adını verir. Bu, sunucunun gerçek hostname'i (FQDN) olmak zorunda değildir; envanterde nasıl tanımladıysan o isimdir.
Örneğin, envanterde webserver_ana
olarak tanımlı bir host varsa, {{ inventory_hostname }}
ifadesi webserver_ana
değerini döndürür, sunucunun kendi içindeki hostname
komutunun çıktısını değil.
Neden Önemliler?
Magic variables, playbook'larını daha dinamik ve esnek hale getirmeni sağlar:
Bir sunucunun yapılandırmasını, başka bir sunucunun özelliklerine göre ayarlayabilirsin (örneğin, bir web sunucusuna veritabanı sunucusunun IP'sini bildirmek).
Belirli bir gruptaki tüm sunuculara toplu işlemler yapabilirsin.
Raporlama ve denetleme için host'lar arası bilgi toplayabilirsin.
Unutma, Ansible dokümantasyonu bu konuda en iyi dostundur. "Magic variables" veya "special variables" olarak arama yaparsan daha fazlasını bulabilirsin.
Last updated
Was this helpful?