मेरे पास कई कार्य हैं जिन्हें सभी को उसी ऑब्जेक्ट को संदर्भित करने की आवश्यकता है जहां ऑब्जेक्ट का नाम लूप आइटम द्वारा संशोधित किया गया है।
ऑब्जेक्ट का नाम जटिल है और भविष्य के स्क्रिप्ट संस्करणों में परिवर्तन के अधीन हो सकता है और मैं नहीं चाहता कि नाम बदलने वाले प्रत्येक कार्य से गुजरना पड़े।
इसलिए मैं चाहता हूं कि ऑब्जेक्ट का नाम टॉप-लेवल वर्र्स में परिभाषित किया जाए।
लेकिन इसका मतलब यह है कि शीर्ष-स्तरीय var परिभाषा को लूप के बाहर एक लूप 'आइटम' को संदर्भित करने की आवश्यकता है।
मुझे उम्मीद थी कि यह यह कहते हुए एक त्रुटि देगा कि 'आइटम' परिभाषित नहीं है, लेकिन मुझे यह जानकर खुशी हुई कि ऐसा नहीं हुआ।
मुझे लगता है कि Ansible को प्रत्येक कार्य के भीतर शीर्ष-स्तरीय चर का मूल्यांकन करना चाहिए, जिस बिंदु पर 'आइटम' मान्य होगा।
कृपया कोई मुझे उस दस्तावेज़ की ओर संकेत कर सकता है जो इस परिवर्तनशील मूल्यांकन प्रक्रिया की व्याख्या करता है?
उदाहरण स्क्रिप्ट:

- hosts: all
  vars:
    ObjectName: "ObjectInMode-{{item}}-WithComplexName"
  tasks:
  - name: Perform Function 1
    Function1:
      ObjectRef: "{{ObjectName}}"
    with_items:
      - Mode1
      - Mode2
  - name: Perform Function 2
    Function2:
      ObjectRef: "{{ObjectName}}"
    with_items:
      - Mode1
      - Mode2
0
Peter Smallwood 14 जुलाई 2019, 11:20

1 उत्तर

सबसे बढ़िया उत्तर

देखें आलसी मूल्यांकन

सामान्य तौर पर, Ansible अंतिम संभावित सेकंड में प्लेबुक सामग्री में किसी भी चर का मूल्यांकन करता है, जिसका अर्थ है कि यदि आप एक डेटा संरचना को परिभाषित करते हैं, तो डेटा संरचना स्वयं इसके भीतर चर मानों को परिभाषित कर सकती है, और सब कुछ "बस काम करता है" जैसा कि आप उम्मीद करेंगे। इसका मतलब यह भी है कि वेरिएबल स्ट्रिंग्स में उन स्ट्रिंग्स के अंदर अन्य वेरिएबल शामिल हो सकते हैं।

1
Vladimir Botka 14 जुलाई 2019, 09:24