【发布时间】:2020-06-02 10:40:25
【问题描述】:
Ansible 版本:2.9.6
我正在运行以下include_vars 任务:
- name: Testing first found
include_vars: "{{ item }}"
with_first_found:
- files:
- "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}.yml"
- "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}-{{ myvar.split('-')[2] }}.yml"
skip: true
请注意,在这种情况下myvar 的值是hello-world。文件 vars/hello/world.yml 存在,所以上面的第一个项目/文件应该有匹配项。
当我运行它时,我得到了错误:fatal: [localhost]: FAILED! => {"msg": "No file was found when using first_found. Use errors='ignore' to allow this task to be skipped if no files are found"}
但是,如果我将上面的任务注释掉,看起来像这样:
- name: Testing first found
include_vars: "{{ item }}"
with_first_found:
- files:
- "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}.yml"
# - "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}-{{ myvar.split('-')[2] }}.yml"
skip: true
然后按预期找到第一个文件并加载变量。
我知道我的with_first_found 中的第二项会出错,因为我在myvar 中只有 2 个元素并且我不能进行拆分 [2]。但是 Ansible 甚至不应该尝试评估第二行,因为这是 with first found 的意义所在。
为了测试,我在第二行稍微更改了拆分任务,再次使用 1 处的元素:
- name: Testing first found
include_vars: "{{ item }}"
with_first_found:
- files:
- "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}.yml"
- "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}-{{ myvar.split('-')[1] }}.yml"
skip: true
这也通过了
【问题讨论】:
标签: ansible