É possível alterar o valor padrão da variável de função de acordo com alguma condição (ou seja, o valor de outra variável)?
Detalhes
Eu tenho duas variáveis relacionadas para um comando env
e composer_opts
.
Se ambos forem deixados no padrão ( env = "prod"
e composer_opts = "--no-dev"
) tudo está ok.
Se eu mudar env
para dev
, o padrão para o outro interromperá meu comando, portanto, sempre preciso definir os dois. Seria possível evitar isso definindo um valor padrão condicional com um script personalizado / if?
Importante: não quero sempre definir o composer_opts
valor de acordo com o env
valor. Quero defini-lo apenas se ainda não estiver definido (ou seja, um valor padrão dinâmico).
Pseudo-código
Gostaria de fazer algo assim (o código a seguir não é válido, apenas pseudocódigo para expressar minha necessidade)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
como string vazia quandoenv
for "dev", substituindo qualquer valor real definido. Eu acho que a condicional deve ser alargado como este:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. Parece bom? Você pode atualizar sua pergunta de acordo?Embora a resposta do @ Navern funcione, achei a notação Jinja2 (
"{% if env == 'prod' %} ...
) embutida extremamente sensível à notação e, portanto, bastante frágil. Por exemplo, ao agrupar a linha em questão para melhor legibilidade, como neste código não testado :Acabei com resultados inesperados, como espaço
\n
em branco adicional ou incomposer_opts
.A abordagem que uso é muito mais estúpida, mas também mais estável:
Também achei este post útil, o que essencialmente segue a mesma abordagem.
fonte
|
vez de>
não ter o problema de espaço em branco. (ou você vai ter mais do mesmo LOL)Ansible set_fact com base na condição em um liner:
fonte