如何在带有ansible的vars文件中包含vars文件?

时间:2015-01-02 17:30:03

标签: ansible

是否可以动态地将Ansible中的vars文件包含到另一个vars文件中?

即。我有vars文件:

---
definitions:
- { product: web_v2, suite: mysuite, include: default_step.yml }
- { product: prod2, suite: mysuite2, include: default_step.yml }

我希望将default_step.yml的内容添加到字典中。请注意,这是在 vars文件中,因此有关如何从任务中包含vars文件的文档似乎不适用。

我能想到的是用jinja模板化这个文件并使用它的{% include %}函数,然后从主任务中使用include_vars,但这似乎很复杂......

3 个答案:

答案 0 :(得分:51)

不幸的是,vars文件没有包含语句。

您可以将所有变量放入definitions字典中,也可以将变量作为另一个字典添加到同一个文件中。

如果您不想将它们放在同一个文件中,可以通过在游戏开始时添加vars文件将它们包含在剧本级别中:

---
- hosts: myhosts

  vars_files:
    - default_step.yml

或在任务中:

---
- hosts: myhosts

  tasks:
    - name: include default step variables
      include_vars: default_step.yml

答案 1 :(得分:0)

我知道它是一个旧帖子,但今天我遇到了同样的问题,我做的很简单:更改我的剧本,将我的剧本从本地主机发送到服务器,然后用maven命令发送,我这样做了:

cat common_vars.yml > vars.yml
cat snapshot_vars.yml >> vars.yml
# or 
#cat release_vars.yml >> vars.yml
mvn ....

答案 2 :(得分:0)

您可以将服务器放在default_step组中,这些变量将适用于它:

# inventory file
[default_step]
prod2
web_v2

然后将您的default_step.yml文件移动到group_vars/default_step.yml