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

Как запустить разные роли для разных хостов в одной доступной пьесе?

У меня есть 3 доступных playbook.

my_ansible
├── hosts
├── play1.yaml
├── play2.yaml
├── play3.yaml
└── roles
    ├── role1
    ├── role2
    └── role3

хозяева

[play1]
host1

[play2]
host2

[play3]
host3

Теперь, когда я бегу play3, Я хочу бежать play2(role2) на host2 и play1(role1) на host1.

Я проверяю, ролевая зависимость, но это относится к тому же хосту, значит, если я добавлю role-dependency в role3 для role1 и role2, то эти 2 роли будут работать против host3.

Я хочу убедиться, play1 работает на host1 только, play2 работает на host2 только и play3 работает на host3 только.

Я пытаюсь найти playbook зависимость, но пока не повезло.

Если есть лучший способ решить эту проблему, я тоже готов пойти по этому пути.

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

Можно включить пьесы в основную книгу. [...] Игры и задачи в каждой из перечисленных книг будут запускаться в том порядке, в котором они перечислены, как если бы они были определены здесь напрямую.

Видеть Документация Ansible по повторному использованию playbooks включает

Чтобы добиться этого play3 бежит play2 и play1 также нужно просто определить мастер-сценарий следующим образом:

---
- import_playbook: play3.yml
- import_playbook: play2.yml
- import_playbook: play1.yml

Не уверен, что понимаю, но я думаю, вы говорите, что ваша проблема в том, что вы не хотите запускать play3, не запустив сначала play2 и play1?

Я не знаю, как это сделать, но могу придумать несколько способов сделать это более удобным.

Сначала просто поместите все три воспроизведения в один файл, а затем, когда вы запустите один, вы запустите их все. Если вы хотите иногда запускать play1 без play2 и play3, используйте теги. С помощью тегов вы можете сделать так, чтобы play1 и play2 имели тег play3, чтобы случайно не запустить play3 без play1 и play2.

Обычно я помещаю свою команду ansible-playbook в файл сценария, поэтому мне не нужно ее запоминать. Если вам нравится это делать, вы можете заставить сценарий запускать три пьесы. Особенно приятно, когда у вас есть коллеги, которые не так хорошо знают ансибл. EG Я создаю файл с именем run.sh это содержит:

ansible-playbook -i hosts myplay.yaml $@

В $@ bash для добавления любых аргументов, поэтому я могу сделать ./run.sh -t play1 и тому подобное.

Надеюсь, это поможет!