gpt4 book ai didi

loops - 在 Ansible 剧本中的 vars_files 中使用 with_items

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

我目前正在从 Puppet 过渡到 Ansible,到目前为止一切顺利。但我想尽可能地自动化。

我正在尝试使用 with_items内循环 vars_files根据给定的项目列表加载变量文件。 Ansible 提示语法,我似乎找不到类似解决方案的示例,只有使用 with_items 的示例内部任务和角色。

例如:

vars_files:
- ["vars/{{ item }}-{{ ansible_fqdn }}.yml", "vars/{{ item }}-{{ system_environment }}.yml", "vars/{{ item }}.yml"]
with_items:
- php
- nginx

这里的目标是只要 with_items 中有项目就循环第二行。如果找不到给定的文件(有效),则使用数组回退到下一项。

不确定这是否可能,但我想在采取另一个方向之前先问一下。

最佳答案

with_items ,或者一般来说所有的循环,都是任务的一个特征。 vars_files虽然不是任务。所以它不会像你尝试的那样工作,简短的回答是:这是不可能的。

我不知道解决您的确切问题的干净方法。 custom vars plugin可能是一个选择。但是 vars 插件在全局级别上工作,而您的 vars 似乎用于角色。

custom lookup plugin如果您可以选择在任务级别解决此问题,则可能是一个解决方案。查找插件接受您的输入,检查文件是否存在并返回需要包含的文件数组。然后这可以与 include_vars module 一起使用.

- include_vars: "{{ item }}"
with_my_custom_plugin:
- php
- nginx

一个丑陋的解决方案是结合 with_itemswith_first_found 循环环形。但是,由于您不能直接嵌套循环,因此您需要使用包含。
- include: include_vars.yml
with_items:
- php
- nginx

和里面 include_vars.yml然后你可以使用 with_first_foundinclude_vars module .
- include_vars: "{{ item }}"
with_first_found:
- vars/{{ item }}-{{ ansible_fqdn }}.yml
- vars/{{ item }}-{{ system_environment }}.yml
- vars/{{ item }}.yml

关于loops - 在 Ansible 剧本中的 vars_files 中使用 with_items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160728/

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