2014-11-06 5 views
7

Mam Ansaly Playbook, który wykonuje połączenie z innym zestawem zabawek przekazującym parametry. Działa to dobrze, ale kiedy próbuję przekazać zmienne, Ansible wieje. Oto moja PlayBook:Odpowiedź: przekazywanie ocenianych zmiennych do zakresu

--- 
- 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 }} 

próbuję uruchomić:

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

i otrzymuję ten błąd:

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 

Wszelkie pomysły, jak pozwala mi przekazać zmienną I set w wierszu poleceń na wielu poziomach zawiera w moim poradniku?

+3

spróbuj umieścić '{{klient}}' w cudzysłów: ' "{{klient}}"' – tedder42

Odpowiedz

6

Bez większego kontekstu trudno jest odtworzyć swój problem, ale domyślam się, że twój problem wynika z faktu, że próbujesz przypisać sobie samą zmienną customer.

Zmienne zdefiniowane na play są dziedziczone przez kolejne instrukcje include. Tak więc, nie ma potrzeby dołączania customer={{customer}} na końcu swoich sprawozdaniach include ponieważ już zdefiniowane go na poziomie odtwarzania poprzez:

vars: 
    customer: myCustomer 

Uwaga: zmienna ta zostanie zastąpiona przez wszelkie nowe wartości ustawionej za pośrednictwem opcja linii poleceń -e.

Spróbuj playbook tak:

--- 
- 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 

i użyć oceniana {{customer}} sprawie zadań wewnątrz pliku amazon.yml.

1

Dostałem się z tym samym problemem. Uchwala się, co następuje:

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

Działa świetnie na ansibl 2.4! – geoand