如何将变量传递给ansible中包含的任务?
我有一个ansible文件(如何将变量传递给ansible中包含的任务?,ansible,ansible-playbook,Ansible,Ansible Playbook,我有一个ansible文件(my_file.yml),看起来像这样: --- - name: The name hosts: all tasks: - include:my_tasks.yml vars: my_var: "{{ my_var }}" - name: Install Curl apt: pkg=curl state=installed - name: My task command: bash -c "curl -sS
my_file.yml
),看起来像这样:
---
- name: The name
hosts: all
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var }}"
- 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"
ansible-playbook my_file.yml --extra-vars "my_var=1.2.3"
- include:my_tasks.yml
vars:
my_var: "1.2.3"
my_tasks.yml
如下所示:
---
- name: The name
hosts: all
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var }}"
- 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"
ansible-playbook my_file.yml --extra-vars "my_var=1.2.3"
- include:my_tasks.yml
vars:
my_var: "1.2.3"
我想将my_var
作为命令行参数传递给ansible,因此我喜欢这样:
---
- name: The name
hosts: all
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var }}"
- 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"
ansible-playbook my_file.yml --extra-vars "my_var=1.2.3"
- include:my_tasks.yml
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.yml
中的vars
设置为如下所示:
---
- name: The name
hosts: all
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var }}"
- 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"
ansible-playbook my_file.yml --extra-vars "my_var=1.2.3"
- include:my_tasks.yml
vars:
my_var: "1.2.3"
它起作用了!我还尝试将变量名更改为不等于my_var
,例如:
- include:my_tasks.yml
vars:
my_var: "{{ my_var0 }}"
但我最终还是犯了一个错误。在我看来,变量没有展开,而是字符串
“{{my_var}}”
或{{my_var}}
被传递到my_tasks.yml
。如何解决此问题?您不需要显式地将my\u 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"
在我的项目中遇到了同样的问题。事实证明,剧本和任务中的变量名必须不同
---
- name: The name
hosts: all
vars:
my_var_play: "I need to send this value to the task"
some_other_var: "This is directly accessible in task"
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var_play }}"
另一方面,playbook中的所有变量都可以在任务中访问。只需在任务中使用
{{some_other_var}}
,它应该可以正常工作。如何从任务传递变量(而不是在playbook或命令行中设置变量)?谢谢!这正是我需要的!