ansible-playbook не ограничивает хосты

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

[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'] }

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

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

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


person srkiNZ84    schedule 23.08.2015    source источник
comment
Вместо интеграции -l вы можете использовать интеграцию -t, которая будет использовать теги.   -  person user2182349    schedule 24.08.2015
comment
Хотя это правда, я обнаружил, что использование тегов не выполняет раздел pre_tasks, который я указал в site.yml. (Я исключил это из описания для простоты). Кроме того, это означает, что я должен поддерживать теги для каждой группы серверов, обязательно включив имя группы в список тегов. Мне это кажется глупым.   -  person srkiNZ84    schedule 24.08.2015
comment
К сожалению, это ожидаемое поведение в Ansible. Он найдет список соответствующих хостов, а затем получит информацию обо всех группах, в которые входят эти хосты.   -  person Alec Collier    schedule 24.08.2015


Ответы (1)


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

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

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

person nitzmahone    schedule 24.08.2015