क्या यह जांचने का कोई तरीका है कि डिक्शनरी की कुंजी को किसी कार्य में परिभाषित नहीं किया गया है?


18

इसलिए मेरे कोड में मेरा एक काम है

- name: cool task
  shell: 'touch iamnotcool.txt'
  when: me.cool is not defined

और मेरी तरह दिखता है

---
me:
  stumped: yes

इसलिए जब मैं कार्य चलाता हूं तो यह निम्न त्रुटि के साथ वापस आता है

{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.

जवाबों:


25

आपके द्वारा शामिल सिंटैक्स:

when: me.cool is not defined

सही है।

आप यह भी उपयोग कर सकते हैं not in:

when: "'cool' not in me"

समस्या यह है कि आपका त्रुटि संदेश:

सशर्त जाँच 'me.cool' विफल रही।

आपकी स्थिति का दावा इस प्रकार है:

when: me.cool

इसलिए, या तो आपके द्वारा उपयोग किए जाने वाले संस्करण में कुछ बग है (लेकिन आपने इसे साझा नहीं किया है कि यह कौन है) और ज्ञात समस्याएं थीं , या आपने उस सटीक कार्य को पोस्ट नहीं किया था जो त्रुटि का कारण बना।


1
त्रुटि तब भी हो सकती है, यदि उसने मूल कोड को एक दूसरी बार पोस्ट नहीं किया है, जब-जब एक ही मूल्य को संदर्भित करता है। यह काम करता है: when: is_installed.rc is defined and is_installed.rc == 0यह नहीं है:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime

7

आप jinja2 selectattr () सिंटैक्स का उपयोग करके 'तानाशाह वस्तु' से कोई विशेषता नहीं बचा सकते हैं:

when: me|selectattr("cool", "defined")|list|length >0

माइकल होगन से विचार https://groups.google.com/forum/# .topic/ansible-project/8XJkHQgttLA पर प्राप्त किया गया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.