Sobes.tech
Middle

DevOpsning turli rollarida o'zgaruvchilar hierarxiyasi qanday?

sobes.tech AI

AIdan javob

Ansible'da o'zgaruvchilar qat'iy ustuvorliklar hierarxiyasiga ega. Ansible turli manbalardan o'zgaruvchilarni birlashtiradi va pastroq ustuvorlikdagi qiymatlarni yuqori ustuvorlikdagi qiymatlar bilan yozib qo'yadi.

Hierarxiya (eng pastdan eng yuqori ustuvorlikgacha):

  1. Rolning standart qiymatlari (Role defaults): defaults/main.yml ichida rol ichida belgilangan o'zgaruvchilar. Ular eng past ustuvorlikka ega bo'lib, osonlik bilan yozib qo'yilishi mumkin bo'lgan standart qiymatlarni belgilash uchun mo'ljallangan.
  2. Rol katalogidagi o'zgaruvchilar (Role vars): vars/main.yml ichida rol ichida belgilangan o'zgaruvchilar. Ular standart qiymatlardan yuqori ustuvorlikka ega.
  3. Inventar o'zgaruvchilari (Inventory variables):
    • Global inventar o'zgaruvchilari (group_vars/all / host_vars/all yoki asosiy inventar fayli).
    • Guruh o'zgaruvchilari (group_vars/<guruh_nomi>). Ustuvorlik inventar va playbookdagi guruhlar tartibiga bog'liq, lekin odatda chuqurroq yoki keyinroq belgilangan guruhlar yuqori ustuvorlikka ega.
    • Inventar hostining o'zgaruvchilari (host_vars/<host_nomi> yoki asosiy inventar fayli). Ular guruh o'zgaruvchilaridan yuqori ustuvorlikka ega.
  4. Play o'zgaruvchilari (Play variables): To'g'ridan-to'g'ri vars bo'limida belgilangan o'zgaruvchilar.
  5. Play_hosts vars_files o'zgaruvchilari (Play vars_files): vars_files orqali yuklangan o'zgaruvchilar. Ularning ro'yxatga olish tartibi ustuvorlikni belgilaydi.
  6. Faktlar (Facts): gather_facts modulini bajarilgandan so'ng yig'ilgan o'zgaruvchilar. Ular yuqori ustuvorlikka ega, chunki ular tizimning hozirgi holatini ifodalaydi.
  7. Ro'yxatga olingan vazifalar o'zgaruvchilari (Task variables): register orqali vazifa bajarilgandan so'ng o'rnatilgan o'zgaruvchilar. Ular yuqori ustuvorlikka ega va faqat joriy playda vazifa bajarilgandan so'ng mavjud.
  8. Buyruq satri o'zgaruvchilari (Command line variables): -e yoki --extra-vars bayrog'i bilan ansible-playbookni ishga tushirishda uzatilgan o'zgaruvchilar. Ular eng yuqori ustuvorlikka ega va barcha boshqa o'zgaruvchilarni yozib qo'yadi.

O'zgaruvchilar bilan misol playbook:

---
# main.yml
- hosts: webservers
  vars:
    global_var: "global_value_from_play" # Play o'zgaruvchisi (ustuvorlik 4)
  roles:
    - webservers # `defaults/main.yml` va `vars/main.yml` bilan rol (ustuvorlik 1 va 2)
  tasks:
    - name: O'zgaruvchini chiqarish
      debug:
        msg: "O'zgaruvchining qiymati: {{ my_variable }}"
      vars: # Vazifa o'zgaruvchisi (ustuvorlik 7)
        my_variable: "task_specific_value"

Inventar misoli:

# inventar
[webservers]
webserver1 ansible_host=192.168.1.10 # Host o'zgaruvchisi (ustuvorlik 3)

[all:vars]
my_variable="inventory_all_value" # Umumiy inventar o'zgaruvchisi (ustuvorlik 3)

Rol defaults misoli:

# roles/webservers/defaults/main.yml
---
my_variable: "default_value_from_role" # Rolning defaults o'zgaruvchisi (ustuvorlik 1)

Rol vars misoli:

# roles/webservers/vars/main.yml
---
my_variable: "vars_value_from_role" # Rol vars (ustuvorlik 2)

ansible-playbook -i inventory main.yml -e "my_variable=extra_vars_value" ni ishga tushirganda:

  1. -e dan qiymat ishlatiladi: extra_vars_value (ustuvorlik 8).
  2. Agar -e mavjud bo'lmasa, lekin vazifa o'zgaruvchisi mavjud bo'lsa, u ishlatiladi: task_specific_value (ustuvorlik 7).
  3. Agar vazifa o'zgaruvchisi va -e mavjud bo'lmasa, fakt (agar mavjud bo'lsa) ishlatiladi.
  4. Keyin, play o'zgaruvchisi: global_value_from_play (ustuvorlik 4).
  5. Keyin, inventar hostining o'zgaruvchisi: ansible_host=192.168.1.10 (ustuvorlik 3).
  6. Keyin, inventar guruhining o'zgaruvchisi (group_vars yoki inventarda).
  7. Keyin, umumiy inventar o'zgaruvchisi: inventory_all_value (ustuvorlik 3).
  8. Keyin, rol vars o'zgaruvchisi: vars_value_from_role (ustuvorlik 2).
  9. Nihoyat, rol defaults o'zgaruvchisi: default_value_from_role (ustuvorlik 1).

Ansible bu hierarxiyadan eng yuqori ustuvorlikdagi birinchi qiymatni oladi. Bu hierarxiyani tushunish debugging va konfiguratsiyani to'g'ri boshqarish uchun muhimdir.