У меня есть довольно сложный набор Playbooks и импортированных ролей, создающих платформу приложений. Все определяется в едином hosts.ini
файл, и группы широко используются для определения ролей специализированных серверов: Интернет, база данных, поиск и т. д.
Однако общая платформа поддерживает два отдельных экземпляра приложения, и в некоторых случаях мне нужно настроить определенные связи между двумя из четырех веб-узлов. Например, для списка хостов ниже я хочу настроить тома gluster между app1_node1 и app1_node2, а также app2_node1 и app2_node2.
[web]
app1_node1
app1_node2
app2_node1
app2_node2
И у вас есть playbook, который делает это, но только для двух узлов одновременно. Итак, если файл hosts также содержит следующее:
[webapp1]
app1_node1
app1_node2
[webapp2]
app2_node1
app2_node2
и playbook вызывается с --limit=webapp1
(или webapp2) все работает нормально.
Но я не уверен в лучшем способе построить все за один присест. Я мог бы, например, продублировать playbook и иметь разные операторы hosts в каждом. Но это не кажется хорошей идеей.
Лучшее решение, которое я придумал, - иметь промежуточную программу запуска playbook, которая выглядит так:
---
- name: PLAYBOOK playbook_launcher.yml
hosts: webapp1
tasks:
- name: Include playbook
import_playbook: theplaybook.yml
- hosts: webapp2
tasks:
- name: Include playbook
import_playbook: theplaybook.yml
С фактическим сценарием, имеющим более широкое заявление о хостах.
---
- name: PLAYBOOK theplaybook.yml
hosts: web
Попробуйте использовать:
--limit=webapp1:webapp2