Как выполнить только одну роль Ansible?

Добрый вечер!

Есть проект для Ansible, который содержит несколько ролей. Как запустить плейбук, чтобы выполнялась лишь одна роль, но понимала переменные?

site.yml выглядит так:

---
- hosts: demo
  remote_user: jenkins
  become: yes
  become_method: sudo

  roles:
    - role1
    - role3
    - role4
    - role5
    - role6
    - role7


Запускаю сейчас так:

ansible-playbook -i hosts site.yml

И просто ставлю символ "#" перед теми ролями, которые сейчас не нужно выполнять. Но думается мне, что есть иной путь.
  • Вопрос задан
  • 5423 просмотра
Пригласить эксперта
Ответы на вопрос 4
@mureevms
Если люди до Вас сделали все правильно, то в каталоге role1 (допустим ее и надо выполнить) должен быть каталог tasks, а в нем файл main.yml, вот его и надо передавать аргументом к команде
ansible-playbook -i hosts role1/tasks/main.yml
Ответ написан
Комментировать
Sanes
@Sanes
Может малость не в тему. Интересовался Ansible.
Смысл ролей? У меня стратегия одним плейбуком решить задачу. (Тиражную задачу).
На Git гляньте ход моих мыслей. Заморочил проект,авось не так?
Ответ написан
mikalaikaia
@mikalaikaia Автор вопроса
Решил этот вопрос так:

site.yml выглядит так:

---
- hosts:  demo
  remote_user: jenkins
  become: yes

  roles:
  - '{{ ROLE }}'


Запускаю так:

ansible-playbook -i hosts site.yml -e "ROLE=role1"

Для того, чтобы запускать на еще и на разных группах хостов, нужно привести site.yml к такому виду:

---
- hosts:  '{{ TARGETIP }}'
  remote_user: jenkins
  become: yes

  roles:
  - '{{ ROLE }}'


Запускать так:

ansible-playbook -i hosts site.yml -e "ROLE=role1" -e "TARGETIP=demo"
Ответ написан
Комментировать
@beza2000
Используйте tags.
Примерно так:
...
roles:
- { role: role1, tags: role1}
- { role: role2, tags: role2}
- { role: role3, tags: role3}
...
Выполнить
ansible-playbook -i hosts site.yml -t role1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы