当文件可能不存在时,如何在ansible中使用lookup('file')?

Ben*_*Ben 9 ansible ansible-playbook

我想在ansible控制节点上查找文件的内容 -

例:

- hosts: all
  vars:
    somevar: "{{ lookup('file', playbook_dir + '/some/path' + inventory_hostname) }}"
Run Code Online (Sandbox Code Playgroud)

如果文件不存在,我希望变量未定义或设置为默认值.如果文件不存在,查找模块会抛出错误.什么是处理此错误的正确方法,以便我可以在我的代码中分支somevar的存在?

Ber*_*hem 6

似乎从这篇原始文章到现在,此功能已添加到查找插件中。

对我来说它有效,我使用的是 2.8.5 版本:

https://docs.ansible.com/ansible/latest/plugins/lookup.html#using-lookup-plugins 2.6 版新增功能。 您现在可以通过设置为, ...来控制所有查找插件中错误的行为方式。errorsignore

- hosts: all
  vars:
    somevar: "{{ lookup('file', playbook_dir + '/some/path' + inventory_hostname, errors='ignore') }}"
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 2

我最终使用 local_action 而不是查找...

- name: "Lookup saved ssh hostkey for this host"
  local_action: shell cat {{playbook_dir}}/path/to/{{inventory_hostname}}.pubkey
  ignore_errors: True
Run Code Online (Sandbox Code Playgroud)

  • 但 `ignore_errors` 错误仍然会抛出错误。然而,这个剧本仍将继续。如果您不喜欢这个,您可以使用“failed_when: false”,然后它会默默地跳过操作中的所有错误。 (3认同)