Можно ли изменить значение переменной роли по умолчанию в соответствии с некоторым условием (т. Е. Значением другой переменной)?
Детали
У меня есть две связанные переменные для команды, env
и composer_opts
.
Если оба остаются по умолчанию ( env = "prod"
и composer_opts = "--no-dev"
), все в порядке.
Если я поменяю env
на dev
, по умолчанию для другого будет нарушена моя команда, поэтому мне всегда нужно устанавливать оба. Можно ли избежать этого, установив условное значение по умолчанию с помощью специального сценария / if?
Важно: я не хочу всегда устанавливать composer_opts
значение в соответствии со env
значением. Я хочу установить его, только если он еще не установлен (т.е. динамическое значение по умолчанию).
ПСЕВДОКОД
Я хотел бы сделать что-то вроде этого (следующий код не является допустимым, просто псевдокод, чтобы выразить мою потребность)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
пустую строку, когдаenv
равен «dev», перезаписывая любое установленное значение. Я думаю , что условное должен быть продлен так:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. Это выглядит хорошо? Можете ли вы соответственно обновить свой вопрос?В то время как @ ответ Navern в делает работу, я обнаружил , внедренный jinja2 обозначение (
"{% if env == 'prod' %} ...
) чрезвычайно восприимчивы к обозначениям и , таким образом , довольно хрупкие. Например, при переносе рассматриваемой строки для лучшей читабельности, такой как в этом непроверенном коде :Я закончил с неожиданными результатами, такими как дополнительные пробелы или
\n
вcomposer_opts
.Подход, который я использую, гораздо тупее, но также и более устойчив:
Я также нашел этот пост в блоге полезным, который по сути следует тому же подходу.
источник
|
вместо>
вас, возможно, не будет проблемы с пробелами. (или вы получите больше LOL)Ansible set_fact, основанный на условии в одном лайнере:
источник