Ansible - запуск playbook на определенной группе хостов с тем же соглашением об именах в инвентаре - PullRequest
0 голосов
/ 07 января 2019

Допустим, у меня есть этот тип инвентаря, который состоит из похожих имен для подгрупп в основной группе, но с разными ip сервера в конце. Имена похожи, потому что это соглашение о присвоении имен, которое я хотел бы использовать, и я хочу, чтобы только IP-адреса сервера в конце были другими.

[maingroup] 
group1 
group2

[group1] 
subgroup1
subgroup2 
subgroup3 

[group2]
subgroup1 
subgroup2 
subgroup3 

[subgroup1]
server1
server2
server3

[subgroup2]
server4
server5
server6

Я хотел бы иметь скрипт на python / shell, который принимает некоторые параметры, например:

python test.py maingroup group1 subgroup1 

затем запустите ответную роль на определенном хосте при передаче vars (не уверен, что правильно):

ansible-playbook -i host.yml --extra-vars "variable_maingroup=maingroup variable_group=group variable_subgroup=subgroup"

Я хотел бы убедиться, что я запускаю ansible только на серверах с таким путем: maingroup> group1> subgroup1 и передаю его моей ansible роли в качестве хостов для запуска.

Поэтому мой вопрос заключается в том, как я могу настроить таргетинг только на серверы в подгруппе 1, которая находится под maingroup.group1, так же, как порядок параметров, передаваемых в скрипт, а не в группу 2, и что мне нужно изменить в моей задаче на передать этот хост как var?

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

имел в виду нечто подобное:

- hosts: {{ hostvars[groups['maingroup']['group1']['subgroup1'] }}

Большое спасибо!

1 Ответ

0 голосов
/ 07 января 2019

После некоторых копаний я нашел ответ на свой вопрос, так что это можно сделать с помощью паттернов .

Внутреннее задание / роль:

- hosts: "{{subgroup}}:&{{group}}:&{{maingroup}}"

Команда:

ansible-playbook -i hosts test.yml --extra-vars "maingroup=maingroup group=group1 subgroup=subgroup1"

Это будет запускать только в подгруппе, которая входит в конкретную группу и конкретную основную группу

Как и в команде: она будет работать только в подгруппе1, которая входит в группу1

...