Ansible vars_文件中的动态文件名

Ansible vars_文件中的动态文件名,ansible,ansible-playbook,Ansible,Ansible Playbook,以下是尝试动态加载变量的简单剧本: site.yml --- - hosts: localhost vars_files: - "{{ name }}.yml" tasks: - debug: var={{ foo }} 变量foo在此文件中定义: vars/myvars.yml --- foo: "Hello" 然后,playbook按如下方式运行: ansible-playbook test.yml -e "name=myvars" - hosts: localhost

以下是尝试动态加载变量的简单剧本:

site.yml
---
- hosts: localhost
  vars_files:
  - "{{ name }}.yml"
  tasks:
  - debug: var={{ foo }}
变量foo在此文件中定义:

vars/myvars.yml
---
foo: "Hello"
然后,playbook按如下方式运行:

ansible-playbook test.yml -e "name=myvars"
- hosts: localhost
  vars_files:
    - "vars/{{ name }}.yml"
  tasks:
    - debug: var={{ foo }}
ansible-playbook site.yml -e "name=myvars" -c local
但是,这会导致此错误:

错误!找不到vars文件{{name}}.yml

根据我从几个代码片段中了解到的情况,这应该是可能的,并从myvars.yml导入变量。在尝试使用ansible 1.7.x时,它似乎确实起了作用(尽管我遇到了另一个问题,文件名vas得到了正确解决)

此行为是否已更改(可能已删除对动态变量文件的支持?)。是否有不同的方法来实现这种行为(我可以使用include_vars任务,但它并不十分合适)


编辑:为了确保我的playbook结构正确,这里有一个github存储库:

只需更改您的
站点。yml
如下:

ansible-playbook test.yml -e "name=myvars"
- hosts: localhost
  vars_files:
    - "vars/{{ name }}.yml"
  tasks:
    - debug: var={{ foo }}
ansible-playbook site.yml -e "name=myvars" -c local
然后按如下方式运行命令:

ansible-playbook test.yml -e "name=myvars"
- hosts: localhost
  vars_files:
    - "vars/{{ name }}.yml"
  tasks:
    - debug: var={{ foo }}
ansible-playbook site.yml -e "name=myvars" -c local

希望这能对您有所帮助。

我正在使用ansible 2.0.1.0,您使用的是哪个版本?2.0.1所以可能是我从OSX运行这一事实造成的问题?我会试试看Linux@arbabnazar下面是一个git回购协议及其示例——只是为了确保结构正常。谢谢同时我自己也弄明白了——让我困惑的是,与include_vars任务不同,这个任务需要路径中的“vars”目录。我猜这是因为可能需要使用playbook文件中非默认位置的变量。尽管如此,我还是接受了你的答案。很高兴找到这个答案,因为
{{name}}.yml没有找到
我的变量没有找到。