Можно ли игнорировать отсутствующую роль в Ansible?

Я использую Vagrant+Ansible в проекте. Я хочу сделать необязательным для пользователя предоставление роли под названием «рабочая область», которая будет включена в подготовку. Это позволяет пользователю установить свою собственную подсказку, редактор и т. д.

Если в плейбуке указана несуществующая роль, все вылетает с ошибкой

ОШИБКА! Роль "рабочая область" не найдена...

Я бы хотел, чтобы он просто проигнорировал это и двигался дальше. Я попытался добавить failed_when: false, но неудивительно, что это не дало никакого эффекта. Можно ли сформулировать условие when: ..., которое может проверить, существует ли роль? Или есть другой способ решить это красиво?


person Hubro    schedule 30.09.2017    source источник


Ответы (1)


Глядя на документацию ansible для Conditionals, я не думаю, что напрямую возможно проверить, существует ли роль.

Обойти это с помощью проверки наличия каталога для роли было бы немного сложно, так как есть несколько мест, где ansible выполняет поиск ролей, а некоторые основаны на текущей платформе, среде или конфигурации.

Тем не менее, я попробовал немного другой подход, который, кажется, работает: вместо того, чтобы настаивать на предопределенном имени роли, можно запросить имя роли через переменную ansible. Затем вы можете включить эту роль следующим образом:

- name: Minimal playbook example
  hosts: localhost
  connection: local
  vars:
    role_name: ""
  roles:
    - role: "{{ role_name }}"
      when: role_name != ""

Если пользователь не указывает собственное имя роли, эта роль не включается. Также обратите внимание, что для того, чтобы это работало, вам необходимо указать значение по умолчанию для переменной имени роли, в противном случае ansible не сможет работать с неопределенной переменной (добавление проверки is defined в предложение when не помогает).

person marbu    schedule 30.09.2017