2014-11-06 13 views
7

Possiedo un Playbook Ansible che effettua una chiamata a un'altra playbook che passa i parametri. Funziona bene, ma quando provo a passare le variabili, Ansible esplode. Qui è la mia playbook:Ansible: il passaggio delle variabili valutate include

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

provo a fare funzionare:

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

e ottengo questo errore:

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 

Tutte le idee su come mi permetterà di passare una variabile ho impostato sulla riga di comando verso il basso attraverso più livelli di include nel mio playbook?

+3

prova a mettere '{{cliente}}' tra virgolette: ' "{{cliente}}"' – tedder42

risposta

6

Senza più contesto è difficile riprodurre il problema, ma la mia ipotesi è che il problema derivi dal fatto che si sta tentando di assegnare la variabile customer a se stessa.

Le variabili definite in una riproduzione sono ereditate dalle successive istruzioni include. Quindi, non c'è bisogno di aggiungere customer={{customer}} alla fine dei tuoi include dichiarazioni dal momento che avete già definito a livello di gioco tramite:

vars: 
    customer: myCustomer 

Nota: Questa variabile verrà sostituita da alcun nuovo valore impostato tramite il opzione da riga di comando -e.

tentare la playbook in questo modo:

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

e utilizzare il valutata {{customer}} sui compiti di file amazon.yml all'interno.

1

Ottenuto con lo stesso problema. Risolto come segue:

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

Funziona alla grande su Ansible 2.4! – geoand

Problemi correlati