Middle
DevOps'un farklı rollerinde değişkenlerin hiyerarşisi nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Ansible'da değişkenler katı bir öncelik hiyerarşisine sahiptir. Ansible, farklı kaynaklardan gelen değişkenleri birleştirir ve daha düşük öncelikli değerleri daha yüksek öncelikli değerlerle üzerine yazar.
Hiyerarşi (en düşükten en yükseğe):
- Varsayılan rol değerleri (Role defaults):
defaults/main.ymliçinde tanımlanan değişkenler. En düşük önceliğe sahiptirler ve varsayılan değerleri belirlemek için kullanılırlar, kolayca üzerine yazılabilirler. - Rol dizinindeki değişkenler (Role vars):
vars/main.ymliçinde tanımlanan değişkenler. Varsayılan rol değişkenlerinden daha yüksek önceliğe sahiptirler. - Envanter değişkenleri (Inventory variables):
- Küresel envanter değişkenleri (
group_vars/all/host_vars/allveya envanterin ana dosyası). - Grup değişkenleri (
group_vars/<grup_adi>). Öncelik, envanter ve playbook'taki grup sırasına bağlıdır, ancak genellikle daha derin veya daha sonra tanımlanan gruplar daha yüksek önceliğe sahiptir. - Hedef değişkenleri (
host_vars/<host_adi>veya envanterin ana dosyası). Grup değişkenlerinden daha yüksek önceliğe sahiptirler.
- Küresel envanter değişkenleri (
- Play değişkenleri (Play variables): Play içindeki
varsbölümünde doğrudan tanımlanan değişkenler. - Play_hosts değişkenleri (Play vars_files):
vars_filesaracılığıyla yüklenen değişkenler. Sıralama önceliği belirler. - Faktlar (Facts):
gather_factsmodülü çalıştırıldıktan sonra toplanan değişkenler. Sistem durumu ile ilgilidir ve yüksek önceliğe sahiptirler. - Görev kayıt değişkenleri (Task variables): Görev sonrası
registerile ayarlanan değişkenler. Yüksek önceliğe sahiptirler ve sadece mevcut play içinde görevden sonra kullanılabilirler. - Komut satırı değişkenleri (Command line variables):
-eveya--extra-varsbayrağı kullanılarakansible-playbookçalıştırılırken geçirilen değişkenler. En yüksek önceliğe sahiptirler ve diğer tüm değişkenleri üzerine yazarlar.
Değişkenlerle örnek bir playbook:
---
# main.yml playbook
- hosts: webservers
vars:
global_var: "global_value_from_play" # Play değişkeni (öncelik 4)
roles:
- webservers # defaults/main.yml ve vars/main.yml içeren rol (öncelik 1 ve 2)
tasks:
- name: Değişkeni yazdır
debug:
msg: "Değişken değeri: {{ my_variable }}"
vars: # Görev değişkeni (öncelik 7)
my_variable: "task_specific_value"
Envanter örneği:
# envanter
[webservers]
webserver1 ansible_host=192.168.1.10 # Hedef değişkeni (öncelik 3)
[all:vars]
my_variable="inventory_all_value" # Envanter genel değişkeni (öncelik 3)
Rol varsayılanları örneği:
# roles/webservers/defaults/main.yml
---
my_variable: "default_value_from_role" # Rol varsayılanları (öncelik 1)
Rol değişkenleri örneği:
# roles/webservers/vars/main.yml
---
my_variable: "vars_value_from_role" # Rol değişkenleri (öncelik 2)
ansible-playbook -i inventory main.yml -e "my_variable=extra_vars_value" komutunu çalıştırırken:
-eile belirtilen değer kullanılacaktır:extra_vars_value(öncelik 8).- Eğer
-eyoksa ve görev değişkeni varsa, o kullanılacaktır:task_specific_value(öncelik 7). - Ne görev değişkeni ne de
-eyoksa, faktör (varsa) kullanılacaktır. - Ardından, play içindeki değişken:
global_value_from_play(öncelik 4). - Daha sonra, envanterdeki hedef değişken:
ansible_host=192.168.1.10(öncelik 3). - Daha sonra, envanterdeki grup değişkenleri (
group_varsveya envanterde). - Daha sonra, envanter genel değişkeni:
inventory_all_value(öncelik 3). - Daha sonra, rol varsayılan değişkenleri:
vars_value_from_role(öncelik 2). - Son olarak, rol varsayılanları:
default_value_from_role(öncelik 1).
Ansible, bu hiyerarşide en yüksek önceliğe sahip ilk bulunan değeri alır. Bu hiyerarşiyi anlamak, hata ayıklama ve yapılandırmayı doğru yönetmek için kritiktir.