Задать вопрос

Как выполнить только одну роль 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

И просто ставлю символ "#" перед теми ролями, которые сейчас не нужно выполнять. Но думается мне, что есть иной путь.
  • Вопрос задан
  • 5999 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы