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_varsdizininde o host’un adına ait YAML dosyasında (ör.host_vars/web2.yml)
Örnek:
web1 ansible_host=192.168.1.101
web2 ansible_host=192.168.1.102 dns_server=10.5.5.4
web3 ansible_host=192.168.1.103Burada
web2içindns_server=10.5.5.4tanımlanmış.web1veyaweb3üzerinde bu değişken tanımsız (undefined) olacaktır.
Playbook’ta Kullanım:
- name: Print DNS server
hosts: all
tasks:
- debug:
var: dns_serverÇıktı:
web2→dns_server=10.5.5.4web1,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:
- name: Play1
hosts: web1
vars:
ntp_server: 10.1.1.1
tasks:
- debug:
var: ntp_server
- name: Play2
hosts: web1
tasks:
- debug:
var: ntp_serverÇıktı:
Play1 →
ntp_server=10.1.1.1Play2 →
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ı:
ansible-playbook myplaybook.yml --extra-vars "ntp_server=10.1.1.1"Bu komut çalıştığında,
ntp_serverdeğeri playbook’taki tüm play’ler için tanımlı hale gelir.İki ayrı play’de de
debug: var=ntp_serveryaptığı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?