Ansible:当某些文件不存在时,我可以使用 vars_files

Ser*_*gey 17 ansible

这就是部分:

vars_files:
  - vars/vars.default.yml
  - vars/vars.yml
Run Code Online (Sandbox Code Playgroud)

如果文件vars/vars.yml不存在 - 这是一个错误。

ERROR: file could not read: /.../vars/vars.yml
Run Code Online (Sandbox Code Playgroud)

仅当该文件存在时,如何从该文件加载其他变量?(没有错误)

Gar*_*ett 26

这真的很简单。您可以将不同的 vars_files 项目压缩到一个元组中,Ansible 将自动遍历每个项目,直到找到存在的文件并加载它。前任:

vars_files:
  - [ "vars/foo.yml", "vars/bar.yml", "vars/default.yml" ]
Run Code Online (Sandbox Code Playgroud)

  • 根据 [Ansible 开发人员](https://github.com/ansible/ansible/issues/8881#issuecomment-56215518),此解决方案将加载所有文件,而不仅仅是找到的第一个文件。 (9认同)

tja*_*nez 13

根据Ansible 开发人员的说法,解决此问题的正确方法是使用以下内容:

vars_files_locs: ['../path/to/file1', '../path/to/file2', ...]

- include_vars: "{{ item }}"
  with_first_found: vars_files_locs
Run Code Online (Sandbox Code Playgroud)

此外,他们说

以上将仅正确加载找到的第一个文件,并且比尝试通过vars_files语言关键字执行此操作更灵活。