2016-04-14 33 views
3

下面是一个简单的剧本它试图动态地加载变量:动态文件名vars_files

site.yml 
--- 
- hosts: localhost 
    vars_files: 
    - "{{ name }}.yml" 
    tasks: 
    - debug: var={{ foo }} 

变量foo是该文件中定义:

vars/myvars.yml 
--- 
foo: "Hello" 

然后剧本运行是这样的:

ansible-playbook test.yml -e "name=myvars" 

然而这会导致这个错误:

ERROR! vars file {{ name }}.yml was not found

从我从几个代码片段理解这应该是可能的,从myvars.yml导入的变量。当用1.7.x进行尝试时,它似乎确实可行(尽管我遇到了不同的问题,文件名称输入已正确解析)。

此行为是否发生了变化(可能是对动态变量文件的支持已被删除?)。有没有不同的方式来实现这种行为(我可以使用include_vars任务,但它不太合适)?

编辑:要确保我的剧本结构是正确的,这里是一个GitHub的库:https://github.com/jcechace/ansible_sinppets/tree/master/dynamic_vars

+0

它对我来说是安全的2.0.1.0,你使用的是哪个版本? –

+0

2.0.1所以也许我从OSX运行的事实是问题?我将尝试使用Linux – pseudo

+0

@arbabnazar这里是一个git回购示例 - 只是为了确保结构正常。 https://github.com/jcechace/ansible_sinppets/tree/master/dynamic_vars – pseudo

回答

2

只要改变你的site.yml这样的:

- hosts: localhost 
    vars_files: 
    - "vars/{{ name }}.yml" 
    tasks: 
    - debug: var={{ foo }} 

然后像这样运行命令:

ansible-playbook site.yml -e "name=myvars" -c local 

希望这会帮助你。

+0

谢谢。在我自己的想法中,我想到了 - 我感到困惑的是,与include_vars任务不同,这需要路径中的“vars”目录。我想这是因为人们可能会在剧本文件中使用非默认位置的变量。不过,我已经接受了你的答案。 – pseudo