¿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, envy composer_opts.
Si ambos se dejan por defecto ( env = "prod"y composer_opts = "--no-dev") todo está bien.
Si cambio enva 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_optsvalor de acuerdo con el envvalor. 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_optsen una cadena vacía cuandoenvsea "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
\nen 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