Variable Scoping
Ansible’da değişkenlerin erişim alanı (scope) farklı seviyelerde olabilir. İster envanter dosyasında (host bazında) tanımlayın, ister bir play içerisindeki vars:
bölümünde tanımlayın, ister komut satırında --extra-vars
olarak geçin – hepsi ayrı kapsam kuralları içerir.
Üç temel kapsam (scope) vardır:
Host Scope (Host’a Özel Değişkenler)
Play Scope (Bir Play İçinde Tanımlanan Değişkenler)
Global Variables (Tüm Playbook Boyunca Geçerli Değişkenler)
Her birinin nasıl çalıştığını görelim.
1. Host Scope (Host’a Özel Kapsam)
Tanım: Host bazında tanımlanan değişkenler, sadece o host’ta çalışan görevler (tasks) için geçerlidir.
Nerede Tanımlanır?
Envanter dosyasında (INI formatında)
host satırı
şeklinde (örn.web2 dns_server=10.5.5.4
)host_vars
dizininde o host’un adına ait YAML dosyasında (ör.host_vars/web2.yml
)
Örnek:
Burada
web2
içindns_server=10.5.5.4
tanımlanmış.web1
veyaweb3
üzerinde bu değişken tanımsız (undefined) olacaktır.
Playbook’ta Kullanım:
Çıktı:
web2
→dns_server=10.5.5.4
web1
,web3
→ “VARIABLE IS NOT DEFINED!”
Neden? Çünkü dns_server
yalnızca web2
host’una ait bir değişken.
2. Play Scope (Bir Play İçinde Tanımlanan Değişken)
Tanım:
vars:
satırıyla veya benzer şekilde bir Play içinde tanımlanan değişkenler, sadece o play boyunca geçerli olur. Başka play’lere (aynı playbook içinde olsa bile) aktarılmaz.Örnek:
Çıktı:
Play1 →
ntp_server=10.1.1.1
Play2 →
ntp_server=VARIABLE IS NOT DEFINED!
Çünkü Play2
içerisinde ntp_server
tekrar tanımlanmadı. Play1’de tanımlanan değişken, Play2’ye miras kalmaz.
3. Global Variables (Tüm Playbook Boyunca Erişim)
Tanım: Tüm playbook boyunca (birden fazla play olsa bile) erişilebilen değişkenler.
Nasıl Tanımlanır?
En yaygın yöntem: Komut satırında
--extra-vars "key=value"
şeklinde verilirse, playbook’un tamamında kullanılır.Bazı durumlarda (daha ileri konularda), Ansible’ın “global vars” mantığıyla her play’e ulaşan değişkenler düzenlenebilir. Ancak tipik senaryo, extra vars’tır.
Örnek Komut Satırı:
Bu komut çalıştığında,
ntp_server
değeri playbook’taki tüm play’ler için tanımlı hale gelir.İki ayrı play’de de
debug: var=ntp_server
yaptığınızda, aynı değeri görürsünüz.
Özet Tablosu
Host Scope
- Envanterde host satırı (INI)
- host_vars/host.yml
Yalnızca o host üzerinde çalışan görevler
Play Scope
- Play içinde vars:
veya vars_files:
vb.
Yalnızca o play boyunca geçerli (sonraki play’ler göremez)
Global Vars
- Komut satırı --extra-vars
(en sık)
- (İleri kullanımda başka yöntemler)
Tüm playbook boyunca (birden fazla play olsa bile) herkese açık
Last updated
Was this helpful?