जवाबों:
से ansible डॉक्स : एक आवश्यक चर सेट नहीं किया गया है, तो आप छोड़ सकते हैं या Jinja2 परिभाषित परीक्षण का उपयोग कर सकते हैं असफल। उदाहरण के लिए:
tasks:
- shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is not defined
तो आपके मामले में, when: deployed_revision is not defined
काम करना चाहिए
when: item.sudo is defined and item.sudo == true
when: foo is defined
(जैसे यह काम नहीं करता है:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
) से शुरू नहीं हो सकता है । ऐसा अंसिबल के कारण नहीं है, लेकिन यमल इसे एक वस्तु के रूप में व्याख्या करेगा। यदि आपको एक चर विस्तार के साथ शुरू करने की आवश्यकता है "{{ foo }}"
, तो यमल को एक स्ट्रिंग के रूप में देखने और इसे पास करने के लिए बाध्य करने के लिए यथाशक्ति डबल कोट्स (जैसे ) के साथ पूरी चीज़ को घेरें।
एक नवीनतम चर संस्करण 2.5 के अनुसार, यह जांचने के लिए कि क्या कोई चर परिभाषित किया गया है और इस पर निर्भर करता है कि आप कोई कार्य चलाना चाहते हैं, undefined
कीवर्ड का उपयोग करें ।
tasks:
- shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is undefined
कड़ाई से कहा गया है कि आपको निम्न में से सभी की जांच करनी चाहिए: परिभाषित, खाली नहीं और कोई नहीं।
"सामान्य" चर के लिए यदि यह परिभाषित और सेट या सेट नहीं है तो फर्क पड़ता है। नीचे दिए गए उदाहरण में देखें foo
और bar
। दोनों परिभाषित हैं लेकिन केवलfoo
सेट है।
दूसरी तरफ पंजीकृत चर चल रहे कमांड के परिणाम पर सेट होते हैं और मॉड्यूल से मॉड्यूल में भिन्न होते हैं। वे ज्यादातर जसन संरचनाएँ हैं। आपको संभवतः उस सबलेमेंट की जांच करनी होगी जिसमें आप रुचि रखते हैं। नीचे दिए गए उदाहरण में देखें xyz
और देखें xyz.msg
:
cat > test.yml <<EOF
- hosts: 127.0.0.1
vars:
foo: "" # foo is defined and foo == '' and foo != None
bar: # bar is defined and bar != '' and bar == None
tasks:
- debug:
msg : ""
register: xyz # xyz is defined and xyz != '' and xyz != None
# xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "foo is defined and foo == '' and foo != None"
when: foo is defined and foo == '' and foo != None
- debug:
msg: "bar is defined and bar != '' and bar == None"
when: bar is defined and bar != '' and bar == None
- debug:
msg: "xyz is defined and xyz != '' and xyz != None"
when: xyz is defined and xyz != '' and xyz != None
- debug:
msg: "{{ xyz }}"
- debug:
msg: "xyz.msg is defined and xyz.msg == '' and xyz.msg != None"
when: xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "{{ xyz.msg }}"
EOF
ansible-playbook -v test.yml
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''