2015-08-26 94 views
5

我有一個ansible文件(my_file.yml),看起來是這樣的:如何將變量傳遞給包含的任務?

--- 
- name: The name 
    hosts: all 
    tasks: 

    - include:my_tasks.yml 
     vars: 
      my_var: "{{ my_var }}" 

my_tasks.yml看起來是這樣的:

- name: Install Curl 
    apt: pkg=curl state=installed 

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 

我想通過my_var作爲命令行參數ansible所以我這樣做:

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

但我結束了以下錯誤:

... Failed to template {{ my_var }}: Failed to template {{ my_var }}: recursive loop detected in template string: {{ my_var }} 

如果我在my_file.ymlvars看起來像這樣:

- include:my_tasks.yml 
    vars: 
     my_var: "1.2.3" 

它的作品!我也試圖改變變量名的東西,不等於my_var,例如:

- include:my_tasks.yml 
    vars: 
     my_var: "{{ my_var0 }}" 

但後來我結束了一個錯誤。在我看來,該變量沒有擴展,而是將字符串"{{ my_var }}"{{ my_var0 }}傳遞給my_tasks.yml。我該如何解決這個問題?

回答

7

您不應該明確地將my_var傳遞給include。包括額外變量在內的所有變量都應直接在任何地方使用。所以,簡單地調用

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

,並在任務使用它作爲{{ my_var }}應該工作。

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 
+2

如何從任務傳遞變量(而不是在劇本或命令行中設置var)? –