2015-07-09 12 views
13

में परिवर्तनीय परिभाषित करें मैं इस तरह की एक उत्तरदायी प्लेबुक में सशर्त रूप से एक चर परिभाषित करना चाहता हूं: my_var: "{{ 'foo' if my_condition}}"। यदि स्थिति सत्य को हल नहीं करती है तो मैं चर को अपरिभाषित रखना चाहता हूं। fatal: [foo.local] => {'msg': 'AnsibleUndefinedVariable: One or more undefined variables: the inline if-expression on line 1 evaluated to false and no else section was defined.', 'failed': True}: अगर मैं यह करने के लिए कोशिशसशर्त रूप से Ansible

Ansible एक त्रुटि देता है। वैसे भी यह एक त्रुटि क्यों है?

पूरा मामला इस तरह दिखता है: {role: foo, my_var: "foo"}। यदि my_var परिभाषित किया गया है, तो भूमिका कुछ खास होती है। कुछ मामलों में, मैं यह करने की भूमिका नहीं चाहता हूं। मैं when: condition का उपयोग कर सकता था, लेकिन फिर मुझे पूरी भूमिका ब्लॉक की प्रतिलिपि बनाना होगा। मैं एक अतिरिक्त बूल वैरिएबल का भी उपयोग कर सकता हूं, लेकिन मुझे भूमिका में "इंटरफ़ेस" को बदलने के बिना समाधान चाहिए।

कोई भी विचार?

उत्तर

15

यह कोड आपको स्थिति के साथ एक चर परिभाषित करने में मदद कर सकता है।

- hosts: node1 
    gather_facts: yes 
    tasks: 
    - name: Check File 
    shell: ls -ld /etc/postfix/post-install 
    register: result 
    ignore_errors: yes 

    - name: Define Variable 
    set_fact: 
     exists: "{{ result.stdout }}" 
    when: result|success 

    - name: Display Variable 
    debug: msg="{{ exists }}" 
    ignore_errors: yes 

तो यहां "मौजूद" केवल तभी प्रदर्शित होगा जब स्थिति सत्य हो।

+10

मैं शेल कमांड का उपयोग करने के बजाय फ़ाइल की जांच करने के लिए स्टेट मॉड्यूल का उपयोग करने की सलाह दूंगा। –

11

आप इस तरह कुछ उपयोग कर सकते हैं: my_var: "{{ 'foo' if my_condition else '' }}"। यदि स्थिति मेल नहीं खाती है तो 'else' होगा, और इस मामले में चर के लिए खाली मान निर्धारित करेगा। मुझे लगता है कि यह एक छोटा, पठनीय और सुरुचिपूर्ण समाधान है।

संबंधित मुद्दे