2017-01-10 14 views
1

Я хочу запустить роль Ansible условно, т. Е. Только когда не существует какого-либо бинарного файла (что для меня подразумевает отсутствие какой-либо конкретной установки приложения).Условное включение роли не работает в Ansible

Что-то вроде шаблона here.

Используя следующий код в моем PlayBook:

- hosts: my_host 

    tasks: 
     - name: check app existence 
     command: /opt/my_app/somebinary 
     register: myapp_exists 
     ignore_errors: yes 

    roles: 
     - { role: myconditional_role, when: myapp_exists|failed } 
     - another_role_to_be_included_either_way 

Вот результат:

PLAY *************************************************************************** 

TASK [setup] ******************************************************************* 
ok: [my_host ] 

TASK [ myconditional_role : create temporary installation directory] *********************** 
fatal: [my_host]: FAILED! => {"failed": true, "msg": "ERROR! The conditional check 'myapp_exists|failed' failed. The error was: ERROR! |failed expects a dictionary"} 

Почему не удается условная проверка?

Использование ansible 2.0.0.2 на Ubuntu 16.04.01

КСТАТИ: «создать временный каталог установки» это имя первой основной задачи условно включенной роли.

ответ

2

Задачи выполняются после ролей, поэтому myapp_exists не определено.
Вместо этого используйте pre_tasks.

Также имейте в виду, что when на самом деле не является условной ролью, он просто присоединяет этот оператор when к каждой задаче вашей роли.

+0

так что любой предложенный шаблон для условного включения роли для конкретного варианта использования? – pkaramol

+1

Я бы переместил файл задач main.yml внутри своей основной задачи и включил install.yml, если это необходимо. –

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

  • Нет связанных вопросов^_^