Variable Scope
Ansible değişken modeli, bir değişkenin hangi parçalar tarafından görülebildiğini (yani “scope” veya kapsamını) belirler. Değişkenlerin nerede tanımlandıkları, o değişkenin hangi Ansible görevlerinde ve hangi hedef sunucularda kullanılabileceğini etkiler. Ansible’da üç temel kapsam (scope) vardır:
Host Kapsamı
Play Kapsamı
Global Kapsam
1. Host Scope
Tanım
“Host scope”, belirli bir host (sunucu) için tanımlanmış değişkenlerin yalnızca o host içerisinde erişilebilir olduğu anlamına gelir. Başka bir deyişle, bir değişken belirli bir makineye atandıysa, o değişkeni playbook içerisinde yalnızca o makineye görev gönderildiğinde kullanabilirsiniz.
Örnek
Bir envanter (inventory) dosyası düşünelim:
Burada dns_server
değişkeni yalnızca web2
host’u için tanımlanmıştır. Eğer bir playbook yazıp bütün host’lara dns_server
değerini bastırmak istersek:
Çıktıda, web2
için dns_server
değeri görüntülenirken diğer host’lar için “VARIABLE IS NOT DEFINED!” hatası görünür. Çünkü host kapsamındaki bir değişken, tanımlı olmadığı diğer host’larda erişilebilir değildir.
2. Play Scope
Tanım
“Play scope”, bir değişkenin tanımlandığı play içinde geçerli olması demektir. Eğer bir play’de değişken tanımlarsanız, o değişken yalnızca o play’de kullanılabilir. Bir sonraki play’e otomatik olarak taşınmaz.
Örnek
Aşağıdaki playbook’ta birinci play’de ntp_server
değişkeni tanımlanmış, ikinci play’de ise tanımlanmamıştır:
Çalıştırdığımızda Ansible:
Play1 içerisinde
ntp_server
değişkenini başarıyla basacak (çünkü orada tanımlı).Play2 içerisinde, aynı değişkeni bulamayacak ve “VARIABLE IS NOT DEFINED!” diyecek.
Bu örnek, play’lerin birbirinden bağımsız kapsamları olduğunu gösterir. Eğer bir değişkeni iki farklı play’de de kullanmak istiyorsak, her iki play’de de tanımlamalıyız (ya da global yapmalıyız).
3. Global Scope (Genel Kapsam)
Tanım
Global değişkenler, playbook’un tüm kısımlarında ve hatta tüm play’ler boyunca geçerlidir. Örneğin, komut satırından ekstra değişken (--extra-vars) olarak geçtiğiniz değerler global kapsamda değerlendirilir.
Örnek
Playbook’u şu şekilde çalıştırdığınızı düşünelim:
Bu durumda ntp_server
değişkeni, hangi play olursa olsun otomatikman tanımlıdır. Böylece bütün play’leriniz bu değere erişebilir.
Çıktıda, her iki play’de de ntp_server
değeri rahatlıkla basılır.
Özetle:
Host scope: Değişken yalnızca tanımlandığı host’ta geçerli.
Play scope: Değişken yalnızca tanımlandığı play’de geçerli.
Global scope: Tüm play’ler ve host’lar için geçerli.
Last updated
Was this helpful?