Есть ли способ использовать динамические переменные в файлах ansible inventory group_vars?

Недавно в компьютерном классе моей школы мне поручили управлять кластером серверов, и я обнаружил, что ansible очень помогает. Будучи новичком в этом, мне нужна помощь в следующем сценарии:

Все серверы в кластере должны быть настроены почти одинаково в зависимости от определенных условий.

Чтобы применить некоторые переменные ко всем машинам в кластере, я научился использовать файлы group_vars с файлом inventory. Тем не менее, есть ситуация, что я не придумал, что делать.

В зависимости от конкретной операции, которую должны выполнять эти серверы, некоторым переменным следует присвоить значения, соответствующие желаемому условию; значение каждого условия может быть установлено в переменную. После некоторого размышления я пришел к выводу, что проще всего использовать опцию -e ansible-playbook (т.е. внешние переменные).

Но где я застрял, так это в том, чтобы соответствующие переменные в файлах group_vars принимали новые значения на основе заданного значения переменной условия операции.

Назовем переменную условия операции opv. Переменные в файле group_vars, скажем, var0, var1, var2

  • для opv=0, var0=v00, var1=v01, var2=v02
  • для opv=1, var0=v10, var1=v11, var2=v12
  • для opv=2, var0=v20, var1=v21, var2=v22 и т. д.

Есть ли элегантный способ выполнить вышеизложенное? Заранее спасибо за любые советы/подсказки. Я готов копать. Итак, просто указатели великолепны.


person micassac    schedule 07.11.2018    source источник


Ответы (1)


Вы должны переключиться на формат yaml вместо ini, чтобы вы могли легко использовать vars и даже шаблоны jinja в вашем group_vars.

#group_vars/all.yml

var0: "v{{ opv }}0"
var1: "v{{ opv }}1"
var2: "v{{ opv }}2"
person hd.deman    schedule 07.11.2018
comment
спасибо за предложение. Я попробую и поделюсь своими результатами здесь. - person micassac; 08.11.2018
comment
Я считаю, что объединив вашу подсказку вместе с указателями в stackoverflow.com/questions/41094864/, теперь у меня есть способ элегантно решить эту проблему. Примет ваш ответ. Спасибо. - person micassac; 08.11.2018