如何使用ansible在vars文件中包含vars文件?
是否可以将Ansible中的一个vars文件动态包含到另一个vars文件中 即,我有vars文件:如何使用ansible在vars文件中包含vars文件?,ansible,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文件中,因此关于如何从
---
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\u vars
,但这似乎很复杂…不幸的是,vars文件没有include语句
您可以将所有变量放入定义
字典,或者将变量作为另一个字典添加到同一文件中
如果不想将它们放在同一个文件中,可以通过在播放开始时添加vars文件,在playbook级别将它们包括在内:
---
- hosts: myhosts
vars_files:
- default_step.yml
或在任务中:
---
- hosts: myhosts
tasks:
- name: include default step variables
include_vars: default_step.yml
我知道这是一篇老文章,但今天我遇到了同样的问题,我所做的很简单:更改脚本,将剧本从本地主机发送到服务器,然后使用maven命令发送,我做了以下操作:
cat common_vars.yml > vars.yml
cat snapshot_vars.yml >> vars.yml
# or
#cat release_vars.yml >> vars.yml
mvn ....
您可以将您的服务器放入
default\u步骤
组,这些变量将应用于该组:
# inventory file
[default_step]
prod2
web_v2
然后只需将
default\u step.yml
文件移动到group\u vars/default\u step.yml
vars文件没有内置的include语句。当您使用include\u vars
任务包含vars文件时,字典的内容将被覆盖,除非您在Ansible配置中定义了hash\u behavior=merge
。或者,您可以使用我的动作插件[include\u vars\u merged
][1]。不过,这两个变体只会在第一级合并词典。也许你可以使用我的插件作为基础,实现深度合并,或者直接使用真正的包含。[1] :如何合并vars文件?例如有一个defaults.yml
和一个小的覆盖.yml
?