2015-06-05 2 views
7

Если у меня есть что-то вроде этого:анзибль include_vars продолжать, если файл не найден

- include_vars: this_file_doesnt_exist.yml 

анзибль отбросит ошибка «входной файл не найден ...» и остановить процесс подготовки.

Мне интересно, можно ли продолжить процесс обеспечения, если файл не найден.

Мой случай использования является следующее:

  • попытка загрузить переменные файл
  • выполнять задачи, если эти переменные существуют

Пример:

- 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 

анзибль Версия: 1.9 .1

ответ

1

Вы можете использовать with_first_found, чтобы архивировать это.

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

Я не уверен, что он будет работать без жалобы, если не по крайней мере один файл соответствует. В случае, если это не работает, вам нужно будет добавить пустой резервный файл:

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

Первый случай не работает, ему необходимо в по меньшей мере один файл соответствует (выходы «Нет исходного файла»). Второй случай действительно работает, но он звучит скорее как обходное решение, а правильное/чистое решение. Благодаря! –

4

Вы можете просто ignore_errors на include_vars задачи:

- include_vars: nonexistant_file 
    ignore_errors: yes 

EDIT

С анзибль > 1.6.5 Я получаю

test.yml

--- 

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

    - debug: 
     msg="The show goes on" 

PLAY [локальный]


GATHERING ФАКТЫ ***************************** ********************************** ОК: [localhost]

ЗАПРОС: [include_vars nonexistent_file] ***************************************** не удалось: [localhost] => {" failed ": true," file ": "/home/ilya/spielwiese/ansible/nonexistent_file "} msg: Исходный файл не найден . ... игнорирование

ЗАДАЧА: [debug msg = "Выставка продолжается"] **************************** ************** ok: [localhost] => { "msg": "Шоу продолжается"}

+1

Я пробовал с «ignore_errors», но, похоже, не работает. Ansible будет вызывать ту же ошибку «входной файл не найден в ...».Thanks –

+0

Вы используете 'include_vars' как задачу? Вы пробовали плейлист, как я написал выше? – ProfHase85

+0

Просто попробовал свою игру ('ansible-playbook -i localhost, test.yml') и получил ту же ошибку« входной файл не найден в ... ». Используете ли вы другую команду для запуска вашей пьесы? Я использую unisible 1.9.1. –

Смежные вопросы