2014-11-06 15 views
7

मेरे पास एक उत्तरदायी प्लेबुक है जो पैरामीटर में गुजरने वाली किसी अन्य प्लेबुक पर कॉल करता है। यह ठीक काम करता है, लेकिन जब मैं चरों में गुजरने की कोशिश करता हूं, तो उत्तरदायी उड़ाता है।उत्तर: मूल्यांकन किए गए चरों को पास करने के लिए

--- 
- name: This is the toplevel play for orchestration 
    hosts: nogroup 
    vars: 
    customer: myCustomer 
    sudo: yes 
- include: amazon.yml application=FooServer instance_type=t2.micro instance_count=1 customer={{ customer }} 
- include: amazon.yml application=BarServer instance_type=t2.micro instance_count=1 customer={{ customer }} 

मैं चलाने का प्रयास: यहाँ मेरी प्लेबुक है

ansible-playbook orchestration.yml -e "customer=otherCustomer" 

और मैं इस त्रुटि मिलती है:

Traceback (most recent call last): 
    File "/usr/local/Cellar/ansible/1.7.2/libexec/bin/ansible-playbook", line 5, in <module> 
    pkg_resources.run_script('ansible==1.7.2', 'ansible-playbook') 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 492, in run_script 
    self.require(requires)[0].run_script(script_name, ns) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 1350, in run_script 
    execfile(script_filename, namespace, namespace) 
    File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/EGG-INFO/scripts/ansible-playbook", line 309, in <module> 
    sys.exit(main(sys.argv[1:])) 
    File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/EGG-INFO/scripts/ansible-playbook", line 191, in main 
    force_handlers=options.force_handlers 
    File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/playbook/__init__.py", line 180, in __init__ 
    (self.playbook, self.play_basedirs) = self._load_playbook_from_file(playbook, vars) 
    File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/playbook/__init__.py", line 271, in _load_playbook_from_file 
    inc_vars, inc_path = self._get_include_info(play, basedir, play_vars) 
    File "/usr/local/Cellar/ansible/1.7.2/lib/python2.7/site-packages/ansible-1.7.2-py2.7.egg/ansible/playbook/__init__.py", line 210, in _get_include_info 
    (k,v) = t.split("=", 1) 
ValueError: need more than 1 value to unpack 

कैसे मुझे एक चर मैं सेट पारित करने के लिए अनुमति देने के लिए पर कोई भी विचार मेरी प्लेबुक में कई स्तरों के माध्यम से कमांड लाइन पर नीचे?

+3

डालने की कोशिश '{{ग्राहक}}' दोहरे उद्धरण में: '" {{ग्राहक}} "' – tedder42

उत्तर

6

अधिक संदर्भ के बिना आपकी समस्या को पुन: उत्पन्न करना मुश्किल है लेकिन मेरा अनुमान यह है कि आपकी समस्या इस तथ्य से आती है कि आप चर customer को स्वयं को असाइन करने का प्रयास कर रहे हैं।

नाटक पर परिभाषित चर को बाद में include कथनों द्वारा विरासत में मिलाया जाता है। तो, आपकी include बयान के अंत में customer={{customer}} संलग्न करने के लिए कोई जरूरत नहीं है, क्योंकि आप पहले से ही के माध्यम से खेलने के स्तर पर परिभाषित किया है:

vars: 
    customer: myCustomer 

नोट: यह चर किसी भी नए मूल्य के माध्यम से सेट द्वारा ओवरराइड कर दिया जाएगा कमांड लाइन -e विकल्प।

इस तरह से अपनी प्लेबुक का प्रयास करें:

--- 
- name: This is the toplevel play for orchestration 
    hosts: nogroup 
    vars: 
    customer: myCustomer 
    sudo: yes 
- include: amazon.yml application=FooServer instance_type=t2.micro instance_count=1 
- include: amazon.yml application=BarServer instance_type=t2.micro instance_count=1 

और फ़ाइल amazon.yml अंदर कार्यों पर मूल्यांकन {{customer}} का उपयोग करें।

1

एक ही समस्या के साथ मिल गया। हल इस प्रकार है:

--- 
- include: common.yml 
- include: redis.yml 
    redis_port="{{ airflow_redis_port }}" 
    redis_bind="{{ airflow_redis_host }}" 
+0

महान Ansible 2.4 पर काम करता है! – geoand

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