Как идемпотентно установить роль из Ansible Galaxy средствами ansible?

У меня есть роль, в задачу которой входит установка nodejs. Как ещё один вариант - я добавил поддержку установки через snap. Для этого мне надо фактически выполнить ansible-galaxy install don_rumata.ansible_role_install_snap. Можно использовать command+creates, но это больше похоже на быдлохак. Можно git, но тогда теряется связь с galaxy. Слышал про requirements.yml, но в примерах не нашёл возможность использования when. В общем нужно что-то типа:

- name: Install role "install-snap"
  when:
    - ansible_system == 'Linux'
    - nodejs_install_over_snap == true
  ansible_galaxy:
    name: don_rumata.ansible_role_install_snap
    state: present
  delegate_to: localhost

Ответы (1 шт):

Автор решения: Hellseher

В документации есть возможность перечислить все зависимости в requirements.yml и потом в ручную, перед запуском основного плейбука, их подтягивать.

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory

Можно так же загнать это в таск и запускать как инициирующий в роли:

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

Ссылки

→ Ссылка