¿Es posible cambiar el valor predeterminado de una variable de rol de acuerdo con alguna condición (es decir, el valor de otra variable)?
Detalles
Tengo dos variables relacionadas para un comando, env
y composer_opts
.
Si ambos se dejan por defecto ( env = "prod"
y composer_opts = "--no-dev"
) todo está bien.
Si cambio env
a dev
, el valor predeterminado para el otro romperá mi comando, por lo que siempre necesito configurar ambos. ¿Sería posible evitar esto estableciendo un valor predeterminado condicional con un script personalizado / if?
Importante: no quiero establecer siempre el composer_opts
valor de acuerdo con el env
valor. Quiero configurarlo solo si aún no está configurado (es decir, un valor predeterminado dinámico).
Pseudocódigo
Me gustaría hacer algo como esto (el siguiente código no es válido, solo pseudocódigo para expresar mi necesidad)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
en una cadena vacía cuandoenv
sea "dev", sobrescribiendo cualquier conjunto de valores real. Creo que el condicional debe extenderse como esto:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. ¿Se ve bien? ¿Puedes responder tu pregunta en consecuencia?Si bien la respuesta de @ Navern funciona, descubrí que la notación Jinja2 incrustada (
"{% if env == 'prod' %} ...
) es extremadamente susceptible a la notación y, por lo tanto, bastante frágil. Por ejemplo, al ajustar la línea en cuestión para una mejor legibilidad, como en este código no probado :Terminé con resultados inesperados, como espacios
\n
en blanco adicionales o encomposer_opts
.El enfoque que uso es mucho más tonto, pero también más estable:
También encontré que esta publicación de blog es útil, que esencialmente sigue el mismo enfoque.
fuente
|
lugar de>
no podría tener el problema de espacios en blanco. (o obtendrás más de eso LOL)Ansible set_fact basado en la condición en un revestimiento:
fuente