2017-01-24 15 views
0

У меня есть ситуация, когда у нас есть 3 яруса ящиков, в каждом ярусе мы применяем разные настройки переменных (например, где находится dir cache), но есть куча значений по умолчанию. Я также должен переопределить на на узел, который обычно делается через инвентарь vars на самом хосте. Я не уверен, что лучший способ организовать хосты, чтобы precedence works в мою пользу.Ansible: использование вложенных групп с vars

Вот что я пробовал. В каждом случае у меня есть записи в файле инвентаризации, как это:

[bots-fancy] 
fancy-1 

[bots-super-fancy] 
super-1 

[bots-magical] 
magic-1 
magic-2 provider=aws 

На первом, я имел каждый из них с длинной строкой определений переменных. У меня также были разные файлы group_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yaml. Это быстро стало несостоятельным.


попытка 1: с PlayBook переменных В сборник пьес у меня было что-то вроде этого:

--- 
hosts: 
    - bots 
vars_files: 
    - "group_vars/bots/defaults.yml" 
    - "group_vars/bots/{{ groups_names[0] }}.yml" 
roles: 
    - somethign 

это работало (хотя да хрупкими), но это не позволит мне переопределить на на хосте basis. Иногда мне приходилось устанавливать разные вещи на узлах, но не на всей группе.


попытка 2: использование group_vars для каждого

Я добавил

[bots:children] 
bots-fancy 
bots-super-fancy 
bots-magical 

в файл хостов. Удалено любое из vars_files из учебника и создано group_vars для каждой группы. Я добавил настройки по умолчанию/общий доступ к group_vars/bots.yaml. Когда я запустил учебник, он загрузил бы только bots group_vars. В идеале, я хочу, чтобы он загружал bots, а затем переопределял его с помощью bots-fancy. А затем, наконец, значения из файла hosts.

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

ответ

4

Не знаете, в чем проблема. Вы должны быть хорошо с:

хостов:

[bots-a] 
bot1 

[bots-b] 
bot2 

[bots:children] 
bots-a 
bots-b 

: каталоги

./group_vars/bots.yml 
./group_vars/bots-a.yml 
./group_vars/bots-b.yml 

Существует понятие глубины группы в анзибль (по крайней мере в последних версиях). В этом примере, групповые переменные хоста bot2 будут заполнены в следующем порядке:

глубина 0: группа all, all.yml (здесь отсутствует, не обращая внимания)
глубина 1: группа bots, bots.yml
глубина 2: группа , bots-b.yml

Вы можете увидеть подробную информацию и порядок обработки here в исходном коде.

Итак, если вы определяете значения по умолчанию в bots.yml и конкретные значения в bots-b.yml, вы должны достичь того, чего вы ожидаете.