पाठ 9 / 26

Variables और Precedence

कई जगहों पर variables परिभाषित करें और समझें कि कौन जीतता है।

कई जगहें, एक विजेता

Variables inventory, group_vars/ और host_vars/ files, play के vars:, role defaults, facts, register किए नतीजों और command line से आ सकते हैं। एक ही नाम कई जगह हो तो Ansible प्रलेखित precedence क्रम अपनाता है। दो उपयोगी नियम: role defaults सबसे कमज़ोर हैं, इसलिए उन्हें बदलना आसान है; और command line का -e (extra vars) लगभग सब पर भारी पड़ता है, जो एक-बार के override के लिए सुविधाजनक है।

एक playbook, अलग hosts

Variables, facts और templates एक playbook को कई अलग hosts सही ढंग से configure करने देते हैं।

चार स्रोत: inventory, vars, facts, templates।
चित्र 3.1 — Inventory, vars, facts और templates।

-e से override, चलाकर

मैंने नीचे का उदाहरण चलाया जहाँ play में env का डिफ़ॉल्ट staging है। when: env == "production" वाला task सामान्यतः छोड़ा जाता है। -e env=production --tags prod के साथ extra var जीतता है और task चलकर अपना संदेश छापता है।

ansible-playbook -i inventory.ini vars.yml -e env=production --tags prod

Output:

"msg": "prod only"

उपयोग हुई playbook

यही फ़ाइल अगले खंड में loops, when, register और tags भी दिखाती है।

---
- hosts: web1
  gather_facts: false
  vars:
    packages: [git, curl, nginx]
    env: staging
  tasks:
    - name: Show packages with loop
      ansible.builtin.debug:
        msg: "install {{ item }}"
      loop: "{{ packages }}"
    - name: Only in production
      ansible.builtin.debug:
        msg: "prod only"
      when: env == "production"
      tags: [prod]
    - name: Register a result
      ansible.builtin.command: echo hello
      register: out
      changed_when: false
      tags: [info]
    - name: Show registered stdout
      ansible.builtin.debug:
        var: out.stdout
      tags: [info]

नाम स्पष्ट और prefix वाले रखें

आकस्मिक टकराव से बचने के लिए role variables में role का नाम prefix करें (port नहीं, nginx_port)। ऐसा variable नाम कभी न रखें जो Ansible का keyword भी है।

त्वरित जाँच: कौन-सा स्रोत आम तौर पर लगभग सब कुछ override करता है?

  • YAML में comment
  • Role defaults
  • Command line पर -e extra vars
  • फ़ाइल का नाम
Answer

Command line पर -e extra vars — Extra vars की precedence सबसे ऊँची है, जो overrides के लिए उपयोगी और ज़्यादा उपयोग पर जोखिम भरी है।