2015-08-23 9 views
1

У меня есть файл хостов, указав сервер, принадлежащий к нескольким группам:анзибль-Playbook не ограничивает хостов

[web] 
192.168.45.37 

[integration] 
192.168.45.37 

[database] 
192.168.45.37 

Различные группы имеют различные роли, примененные к ним в сборник пьес:

- hosts: all 
    roles: 
    - { role: base, tags: ['base'] } 
    - { role: logstash, tags: ['logstash'] } 
- hosts: database 
    roles: 
    - { role: mysql, tags: ['database', 'mysql'] } 
    - { role: mysql-backup, tags: ['database', 'mysql', 'backup'] } 
- hosts: web 
    roles: 
    - { role: nginx, tags: ['web', 'nginx'] } 
    - { role: ssl-certs, tags: ['web', 'ssl-certs'] } 
- hosts: integration 
    roles: 
    - { role: jetty, tags: ['integration', 'jetty'] } 

Моя проблема в том, что когда я иду запускать плей-лист, пытаясь ограничить его только «ролями», необходимыми для указания «группы» с аргументом «-limit», например

ansible-playbook -i hosts site.yml -l integration 

Он заканчивается бегом все пьес против сервера. Почему он это делает? Могу ли я заставить его просто запустить набор игр/ролей, связанных с этой конкретной группой серверов?

+0

Вместо интеграции -l вы можете использовать интеграцию -t, которая будет использовать теги. – user2182349

+0

Хотя это правда, я обнаружил, что использование «тегов» не выполняет раздел «pre_tasks», который я указал в «site.yml». (Я просто оставил это из описания для простоты). Кроме того, это означает, что я должен быть уверен, что поддерживаю «теги» для каждой группы серверов, не забудьте включить имя группы в список тегов. Мне это кажется глупым. – srkiNZ84

+1

К сожалению, это ожидаемое поведение в Ansible. Он найдет список хостов, которые соответствуют, а затем получите информацию для всех групп, в которых находятся эти хосты. –

ответ

1

Это по дизайну - под обложками лимиты реализованы как список хостов, хотя предельное выражение может быть произвольно сложной комбинацией как хостов, так и групп. Мы не исключаем определения групп, которые не указаны в предельном выражении (похоже, это то, что вы хотите) - это значительно затруднит использование предельных выражений для более сложных вариантов использования.

Например: если у вас была игра, нацеленная на пересечение двух групп, «mysite: & myrole», я думаю, что ожидалось, что если вы пройдете предельное выражение mysite, то оно будет работать. Если мы явно удалили узлы для групповых defs, которые не были указаны в предельном выражении, это не так.

Тэги, безусловно, подходят для использования здесь, и их можно указать на уровне воспроизведения для ролевых объектов, поэтому вам не нужно повторять эту часть для каждой роли/задачи под ней. Секция pre_tasks должна вести себя одинаково с тегами (т. Е. Задачи должны быть помечены для запуска, хотя убедитесь, что вы знаете о «всегда») - если они этого не делают, это определенно проблема, о которой вы должны сообщить.

Смежные вопросы