Middle
Ποια είναι η ιεραρχία των μεταβλητών στους διάφορους ρόλους του DevOps;
sobes.tech AI
Απάντηση από AI
Οι μεταβλητές στο Ansible έχουν αυστηρή ιεραρχία προτεραιότητας. Το Ansible συνδυάζει μεταβλητές από διάφορες πηγές, αντικαθιστώντας τις τιμές με χαμηλότερη προτεραιότητα με αυτές με υψηλότερη.
Η ιεραρχία (από το χαμηλότερο στο υψηλότερο):
- Προεπιλεγμένος ρόλος (Role defaults): Μεταβλητές που ορίζονται στο
defaults/main.ymlμέσα στον ρόλο. Έχουν την χαμηλότερη προτεραιότητα, προορίζονται για την ορισμό προεπιλεγμένων τιμών, που μπορούν εύκολα να αντικατασταθούν. - Μεταβλητές στον φάκελο του ρόλου (Role vars): Μεταβλητές που ορίζονται στο
vars/main.ymlμέσα στον ρόλο. Έχουν υψηλότερη προτεραιότητα από τις προεπιλεγμένες μεταβλητές του ρόλου. - Μεταβλητές από το inventory (Inventory variables):
- Παγκόσμιες μεταβλητές inventory (
group_vars/all/host_vars/allή στο κύριο αρχείο του inventory). - Μεταβλητές ομάδας inventory (
group_vars/<όνομα_ομάδας>). Η προτεραιότητα εξαρτάται από τη σειρά των ομάδων στο inventory και το playbook, αλλά συνήθως οι ομάδες με βαθύτερη εμβάθυνση ή αυτές που ορίζονται αργότερα έχουν υψηλότερη προτεραιότητα. - Μεταβλητές host inventory (
host_vars/<όνομα_host>ή στο κύριο αρχείο του inventory). Έχουν υψηλότερη προτεραιότητα από τις μεταβλητές ομάδας.
- Παγκόσμιες μεταβλητές inventory (
- Μεταβλητές από το play (Play variables): Μεταβλητές που ορίζονται απευθείας στη ενότητα
varsτου playbook. - Μεταβλητές από το play_hosts (Play vars_files): Μεταβλητές που φορτώνονται μέσω
vars_files. Η σειρά τους καθορίζει την προτεραιότητα. - Μεταβλητές από τα facts (Facts): Μεταβλητές που συλλέγονται μετά την εκτέλεση του module
gather_facts. Έχουν υψηλή προτεραιότητα, καθώς αντιπροσωπεύουν την τρέχουσα κατάσταση του συστήματος. - Μεταβλητές από τις καταχωρημένες εργασίες (Task variables): Μεταβλητές που ορίζονται μέσω
registerμετά την εκτέλεση μιας εργασίας. Έχουν υψηλή προτεραιότητα, διατίθενται μόνο στο τρέχον playbook μετά την εκτέλεση της εργασίας. - Μεταβλητές γραμμής εντολών (Command line variables): Μεταβλητές που περνιούνται με τη χρήση της σημαίας
-eή--extra-varsκατά την εκτέλεση τουansible-playbook. Έχουν την υψηλότερη προτεραιότητα και αντικαθιστούν όλες τις άλλες μεταβλητές.
Παράδειγμα playbook με μεταβλητές:
---
# main.yml playbook
- hosts: webservers
vars:
global_var: "παγκόσμια_τιμή_από_play" # Μεταβλητή playbook (προτεραιότητα 4)
roles:
- webservers # Ρόλος με defaults/main.yml και vars/main.yml (προτεραιότητα 1 και 2)
tasks:
- name: Εκτύπωση μεταβλητής
debug:
msg: "Η τιμή της μεταβλητής είναι: {{ my_variable }}"
vars: # Μεταβλητή εργασίας (προτεραιότητα 7)
my_variable: "ειδική_τιμή_εργασίας"
Παράδειγμα inventory:
# inventory
[webservers]
webserver1 ansible_host=192.168.1.10 # Μεταβλητή host (προτεραιότητα 3)
[all:vars]
my_variable="τιμή_όλων_του_inventory" # Παγκόσμια μεταβλητή inventory (προτεραιότητα 3)
Παράδειγμα defaults για ρόλο:
# roles/webservers/defaults/main.yml
---
my_variable: "προεπιλεγμένη_τιμή_από_ρόλο" # Μεταβλητή defaults ρόλου (προτεραιότητα 1)
Παράδειγμα vars για ρόλο:
# roles/webservers/vars/main.yml
---
my_variable: "τιμή_από_vars_ρόλου" # Μεταβλητή vars ρόλου (προτεραιότητα 2)
Όταν εκτελείτε το ansible-playbook -i inventory main.yml -e "my_variable=extra_vars_value":
- Θα χρησιμοποιηθεί η τιμή από το
-e:extra_vars_value(προτεραιότητα 8). - Αν το
-eδεν υπάρχει, αλλά υπάρχει μεταβλητή εργασίας, θα χρησιμοποιηθεί αυτή:task_specific_value(προτεραιότητα 7). - Αν δεν υπάρχει μεταβλητή εργασίας και το
-e, θα χρησιμοποιηθεί το fact (αν ισχύει). - Στη συνέχεια, η μεταβλητή του play:
global_value_from_play(προτεραιότητα 4). - Στη συνέχεια, η μεταβλητή host από το inventory:
ansible_host=192.168.1.10(προτεραιότητα 3). - Στη συνέχεια, η μεταβλητή ομάδας από το inventory (
group_varsή στο inventory). - Στη συνέχεια, η παγκόσμια μεταβλητή inventory:
inventory_all_value(προτεραιότητα 3). - Στη συνέχεια, η μεταβλητή vars του ρόλου:
vars_value_from_role(προτεραιότητα 2). - Τέλος, η μεταβλητή defaults του ρόλου:
default_value_from_role(προτεραιότητα 1).
Το Ansible παίρνει την πρώτη βρεθείσα τιμή με την υψηλότερη προτεραιότητα από αυτήν την ιεραρχία. Η κατανόηση αυτής της ιεραρχίας είναι κρίσιμη για την αποσφαλμάτωση και τη σωστή διαχείριση διαμόρφωσης.