【问题标题】:Ansible with_first_found errorsAnsible with_first_found 错误
【发布时间】: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


    【解决方案1】:

    这似乎可行,但我不知道为什么:

    - name: Testing first found
      include_vars: "{{ item }}"
      with_first_found:
        - "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}.yml"
        - "vars/{{ myvar.split('-')[0] }}/{{ myvar.split('-')[1] }}-{{ myvar.split('-')[2] }}.yml"
    

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多