gpt4 book ai didi

ansible - 在Ansible中,如何将来自单独文件的变量组合到一个数组中?

转载 作者:行者123 更新时间:2023-12-04 01:02:00 27 4
gpt4 key购买 nike

在Ansible中,有一个角色,我有这样的vars文件:

vars/
app1.yml
app2.yml


每个文件都包含特定于应用程序/网站的var,如下所示:

name: app1
git_repo: https://github.com/philgyford/app1.git
# ...


理想情况下,如果任务无需事先知道哪些应用程序具有变量文件,我将最终得到一个名为 apps的数组,如下所示:

apps:
- name: app1
git_repo: https://github.com/philgyford/app1.git
# ...
- name: app2
git_repo: https://github.com/philgyford/app2.git
# ...


即,将文件中的变量合并为一个。

我知道我可以像这样加载所有变量文件:

- name: Load var files
with_fileglob:
- ../vars/*.yml
include_vars: '{{ item }}'


但是给定每个文件具有相同的变量名,它将覆盖之前的每个变量集。我看不到加载变量并将其放入 apps数组的方法。

如果这是使这种事情成为可能的唯一方法,我愿意稍微重新安排一下。

最佳答案

你不能这样做。变量将始终覆盖具有相同名称的变量。使用此精确设置,您唯一可以做的就是write your own vars plugin,它读取这些文件并将它们合并到一个数组中。

如果您愿意更改应用程序定义的结构,则可以使用哈希和set your hash_behavior=merge。在每个vars文件中,您将具有如下定义:

apps:
app1:
git_repo: https://github.com/philgyford/app1.git




apps:
app2:
git_repo: https://github.com/philgyford/app2.git


当Ansible加载两个文件时,它将自动将其合并为:

apps:
app1:
git_repo: https://github.com/philgyford/app1.git
app2:
git_repo: https://github.com/philgyford/app2.git</pre>


但是请注意, hash_behavior=merge从根本上改变了Ansible在全球范围内的默认行为。确保您的所有角色都没有与此设置有关的问题。该文档提到:


我们通常建议不要使用此设置,除非您认为自己绝对需要它


如果您仍然使用Ansible 1,则可以改用我的旧插件之一: include_vars_merged。基本上,这将 hash_behavior=merge的行为仅添加到单个任务中。

我还没有考虑将其迁移到Ansible 2,目前看来我将不再需要它。

关于ansible - 在Ansible中,如何将来自单独文件的变量组合到一个数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com