Назад | Перейти на главную страницу

Тонкое управление Ansible (V2.8) для ограничения выполнения Playbook подмножеством узлов

У меня есть довольно сложный набор 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

Это лучший подход, или мне не хватает чего-то очевидного в способе работы Ansible, которое упрощает эту задачу?

Попробуйте использовать:

--limit=webapp1:webapp2