Sobes.tech
Middle

Milline on muutujate hierarhia erinevates DevOps rollides?

sobes.tech AI

Vastus AI-lt

Ansible muutujatel on range ja hierarhiline prioriteet. Ansible ühendab muutujad erinevatest allikatest, üle kirjutades madalama prioriteediga väärtused kõrgema prioriteediga väärtustega.

Hierarhia (madalamast kõrgemani):

  1. Rolli vaikeväärtused (Role defaults): Muutujad, mis on määratletud defaults/main.yml failis rollis. Neil on kõige madalam prioriteet, mõeldud vaikeseadete määramiseks ning neid on lihtne üle kirjutada.
  2. Rolli muutujad (Role vars): Muutujad, mis on määratletud vars/main.yml failis rollis. Neil on kõrgem prioriteet kui vaikeseadetel.
  3. Inventari muutujad (Inventory variables):
    • Globaalsetel inventari muutujatel (group_vars/all / host_vars/all või peamisel inventari failil).
    • Rühma muutujad (group_vars/<group_name>). Prioriteet sõltub rühmade järjekorrast ja playbookist, kuid tavaliselt on sügavamalt või hiljem määratletud rühmad kõrgema prioriteediga.
    • Hosti muutujad (host_vars/<host_name> või peamisel inventari failil). Neil on kõrgem prioriteet kui rühma muutujatel.
  4. Play muutujad (Play variables): Muutujad, mis on määratletud otse vars sektsioonis playbookis.
  5. Play_hosts muutujad (Play vars_files): Muutujad, mis on laaditud vars_files kaudu. Nende järjestus määrab prioriteedi.
  6. Faktid (Facts): Muutujad, mis on kogutud pärast gather_facts mooduli täitmist. Neil on kõrge prioriteet, kuna nad esindavad süsteemi praegust seisundit.
  7. Ülesannete registreeritud muutujad (Task variables): Muutujad, mis on määratletud register kaudu ülesande täitmisel. Neil on kõrge prioriteet ning need on saadaval ainult jooksva playbooki jooksul.
  8. Käsurea muutujad (Command line variables): Muutujad, mis edastatakse -e või --extra-vars lipuga ansible-playbook käivitamisel. Neil on kõrgeim prioriteet ning need üle kirjutavad kõik teised muutujad.

Näide muutujatega playbookist:

---
# main.yml playbook
- hosts: webservers
  vars:
    global_var: "global_value_from_play" # Playbooki muutuja (prioriteet 4)
  roles:
    - webservers # Roll koos defaults/main.yml ja vars/main.yml (prioriteet 1 ja 2)
  tasks:
    - name: Print variable
      debug:
        msg: "Variable value is: {{ my_variable }}"
      vars: # Ülesande muutuja (prioriteet 7)
        my_variable: "task_specific_value"

Inventari näide:

# inventar
[webservers]
webserver1 ansible_host=192.168.1.10 # Hosti muutuja (prioriteet 3)

[all:vars]
my_variable="inventory_all_value" # Globaalne inventari muutuja (prioriteet 3)

Rolli defaults näide:

# roles/webservers/defaults/main.yml
---
my_variable: "default_value_from_role" # Rolli defaults muutuja (prioriteet 1)

Rolli vars näide:

# roles/webservers/vars/main.yml
---
my_variable: "vars_value_from_role" # Rolli vars muutuja (prioriteet 2)

Kui käivitatakse ansible-playbook -i inventory main.yml -e "my_variable=extra_vars_value":

  1. Kasutatakse -e väärtust: extra_vars_value (prioriteet 8).
  2. Kui -e puudub, kuid on ülesande muutuja, kasutatakse seda: task_specific_value (prioriteet 7).
  3. Kui ei -e ega ülesande muutuja, kasutatakse fakti (kui sobib).
  4. Seejärel, playbooki muutuja: global_value_from_play (prioriteet 4).
  5. Seejärel, hosti muutuja: ansible_host=192.168.1.10 (prioriteet 3).
  6. Seejärel, rühma muutuja (inventari või rühma põhjal).
  7. Seejärel, globaalne inventari muutuja: inventory_all_value (prioriteet 3).
  8. Seejärel, rolli vars: vars_value_from_role (prioriteet 2).
  9. Lõpuks, rolli defaults: default_value_from_role (prioriteet 1).

Ansible võtab esimese leitud väärtuse kõrgeima prioriteediga. Selle hierarhia mõistmine on oluline vigade vältimiseks ja konfiguratsiooni õige haldamise jaoks.