如果找不到文件,Ansible include_vars将继续

如果找不到文件,Ansible include_vars将继续,ansible,ansible-playbook,Ansible,Ansible Playbook,如果我有这样的东西: - include_vars: this_file_doesnt_exist.yml ansible将抛出错误“在…处找不到输入文件”,并停止设置过程 我想知道如果找不到文件,是否可以允许设置过程继续进行 我的用例如下所示: 尝试加载变量文件 如果存在这些变量,则执行任务 例如: - include_vars: aptcacher.yml - name: use apt-cache template: src=01_proxy.j2 dest=/etc/apt/

如果我有这样的东西:

- include_vars: this_file_doesnt_exist.yml
ansible将抛出错误“在…处找不到输入文件”,并停止设置过程

我想知道如果找不到文件,是否可以允许设置过程继续进行

我的用例如下所示:

  • 尝试加载变量文件
  • 如果存在这些变量,则执行任务
例如:

- include_vars: aptcacher.yml

- name: use apt-cache
  template: src=01_proxy.j2 dest=/etc/apt/apt.conf.d/01_proxy owner=root group=root mode=644
  sudo: true
  when: aptcacher_host is defined
Ansible版本:1.9.1

您可以使用它来存档

- include_vars: "{{ item }}"
  with_first_found:
   - this_file_doesnt_exist.yml
如果没有至少一个匹配的文件,我不能100%肯定它会毫无怨言地工作。如果它不起作用,您需要添加一个空的回退文件:

- include_vars: "{{ item }}"
  with_first_found:
   - this_file_doesnt_exist.yml
   - empty_falback.yml

您可以在“包含变量”任务中忽略错误:

- include_vars: nonexistant_file
  ignore_errors: yes
编辑

当ansible>1.6.5时,我得到

test.yml

---

- hosts: localhost
  tasks:
    - include_vars: nonexistent_file
      ignore_errors: yes

    - debug:
        msg="The show goes on"
播放[本地主机]


收集事实 ***************************************************************确定:[本地主机]

任务:[包含变量不存在的文件] *****************************************失败:[localhost]=>{“失败”:true,“文件”: “/home/ilya/spielwiese/ansible/nonexistent_file”}msg:源文件不存在 建立忽视

任务:[调试消息=“节目继续”] ******************************************确定:[本地主机]=>{ “msg”:“节目继续”}


第一种情况不起作用,它至少需要一个匹配的文件(输出“未提供源文件”)。第二种情况确实有效,但它听起来更像是一种解决办法,而不是一种适当/干净的解决方案。谢谢我尝试过“忽略错误”,但似乎不起作用。Ansible将抛出相同的错误“在…处找不到输入文件”。谢谢您正在使用
包含变量作为任务?你试过我上面发布的剧本吗?只试过你的剧本(
ansible playbook-i localhost,test.yml
),得到了相同的错误“输入文件未在…找到”。您是否使用不同的命令来运行playbook?我使用的是ansible 1.9.1。哦,这完全不是ansible的命名方式(只是想知道其他任何东西是否适合您)。您需要使用-i指定一个清单文件(并且不应该有逗号。因此调用类似于
ansible playbook test.yml
ansible playbook-i/path/to/inventory test.yml),并且清单文件应该包含类似于
localhost ansible\u connection=local
(请参阅文档)