Как идемпотентно установить роль из 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 шт):
В документации есть возможность перечислить все зависимости в 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 }}"
Ссылки