Sobes.tech
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):

  1. Varsayılan rol değerleri (Role defaults): defaults/main.yml iç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.
  2. Rol dizinindeki değişkenler (Role vars): vars/main.yml içinde tanımlanan değişkenler. Varsayılan rol değişkenlerinden daha yüksek önceliğe sahiptirler.
  3. Envanter değişkenleri (Inventory variables):
    • Küresel envanter değişkenleri (group_vars/all / host_vars/all veya 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.
  4. Play değişkenleri (Play variables): Play içindeki vars bölümünde doğrudan tanımlanan değişkenler.
  5. Play_hosts değişkenleri (Play vars_files): vars_files aracılığıyla yüklenen değişkenler. Sıralama önceliği belirler.
  6. Faktlar (Facts): gather_facts modülü çalıştırıldıktan sonra toplanan değişkenler. Sistem durumu ile ilgilidir ve yüksek önceliğe sahiptirler.
  7. Görev kayıt değişkenleri (Task variables): Görev sonrası register ile ayarlanan değişkenler. Yüksek önceliğe sahiptirler ve sadece mevcut play içinde görevden sonra kullanılabilirler.
  8. Komut satırı değişkenleri (Command line variables): -e veya --extra-vars bayrağı kullanılarak ansible-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:

  1. -e ile belirtilen değer kullanılacaktır: extra_vars_value (öncelik 8).
  2. Eğer -e yoksa ve görev değişkeni varsa, o kullanılacaktır: task_specific_value (öncelik 7).
  3. Ne görev değişkeni ne de -e yoksa, faktör (varsa) kullanılacaktır.
  4. Ardından, play içindeki değişken: global_value_from_play (öncelik 4).
  5. Daha sonra, envanterdeki hedef değişken: ansible_host=192.168.1.10 (öncelik 3).
  6. Daha sonra, envanterdeki grup değişkenleri (group_vars veya envanterde).
  7. Daha sonra, envanter genel değişkeni: inventory_all_value (öncelik 3).
  8. Daha sonra, rol varsayılan değişkenleri: vars_value_from_role (öncelik 2).
  9. 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.