2016-01-29 6 views
12

मैं कुछ डिफ़ॉल्ट मान पर एक उत्तर परिवर्तनीय सेट करना चाहता हूं, लेकिन केवल तभी परिवर्तनीय अपरिभाषित है। अन्यथा मैं इसे अपरिवर्तित रखना चाहता हूं।उत्तर: केवल परिवर्तनीय सेट करें यदि अपरिभाषित

मैं इन दो दृष्टिकोण की कोशिश की और उन दोनों को पुनरावर्ती पाश उत्पादन:

namespace: "{{namespace|default(default_namespace)}}" 
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}" 

उत्तर

18

ऐसा लगता है जैसे आप एक गलत दृष्टिकोण ले रहे हैं।

variable precedence से संबंधित उत्तरदायी दस्तावेज़ीकरण पर नज़र डालें। परिवर्तनीय परिभाषित नहीं किया गया है, तो यह डिफ़ॉल्ट चर का उपयोग करने के लिए उत्तरदायी की एक अंतर्निहित विशेषता है।

Ansible में 2.x चर पूर्वता इस तरह शुरू होता है:

भूमिका चूक

सूची वार्स

तो अगर आप एक चर आपको चाहिए लिए एक डिफ़ॉल्ट मान परिभाषित करना चाहते हैं इसे role/defaults/main.yml में सेट करें। उत्तरदायी उस मान का उपयोग केवल तभी किया जाएगा जब चर कहीं और परिभाषित नहीं किया गया हो।

एक और विकल्प Jinja2 filter का उपयोग करना है। एक जिंजा फिल्टर के साथ आप इस तरह एक चर के लिए एक डिफ़ॉल्ट मान सेट कर सकते हैं:

{{ some_variable | default(5) }} 
+1

Jina2 फ़िल्टर का उपयोग करना यह '{{चर की तरह कुछ करने के लिए संभव है | डिफ़ॉल्ट (अन्य_वर्तनीय)}} '? – johnsona

+1

यह काम करना चाहिए। या तुमने कोशिश की? क्या यह काम करता है? –

+2

हां यह करता है, मुझे लगता है कि मुझे घुंघराले ब्रेसिज़ घोंसला करना होगा जो काम नहीं करता है। – johnsona

10
- set_fact: namespace="default_namespace" 
    when: namespace is undefined 
संबंधित मुद्दे