Est-il possible de changer la valeur par défaut d'une variable de rôle en fonction d'une condition (c'est-à-dire la valeur d'une autre variable)?
Détails
J'ai deux variables liées pour une commande, env
et composer_opts
.
Si les deux sont laissés par défaut ( env = "prod"
et composer_opts = "--no-dev"
) tout va bien.
Si je passe env
à dev
, la valeur par défaut pour l'autre casse ma commande, j'ai donc toujours besoin de définir les deux. Serait-il possible d'éviter cela en définissant une valeur conditionnelle par défaut avec un script personnalisé / if?
Important: je ne veux pas toujours définir la composer_opts
valeur en fonction de la env
valeur. Je veux le définir uniquement s'il n'est pas déjà défini (c'est-à-dire une valeur dynamique par défaut).
Pseudocode
Je voudrais faire quelque chose comme ça (le code suivant n'est pas valide, juste un pseudocode pour exprimer mon besoin)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
sur une chaîne vide lorsqueenv
est "dev", écrasant tout ensemble de valeurs réelles. Je pense que le conditionnel devrait être étendue comme ceci:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. Ça a l'air bien? Pouvez-vous mettre à jour votre question en conséquence?Bien que la réponse de @ Navern fonctionne, j'ai trouvé que la notation Jinja2 intégrée (
"{% if env == 'prod' %} ...
) était extrêmement sensible à la notation et donc plutôt fragile. Par exemple, lors de l'habillage de la ligne en question pour une meilleure lisibilité, comme dans ce code non testé :Je me suis retrouvé avec des résultats inattendus, tels que des espaces supplémentaires ou
\n
danscomposer_opts
.L'approche que j'utilise est beaucoup plus stupide, mais aussi plus stable:
J'ai également trouvé cet article de blog utile qui suit essentiellement la même approche.
la source
|
place de>
vous pourriez ne pas avoir de problème d'espace. (ou vous en aurez plus LOL)Ansible set_fact basé sur la condition dans une doublure:
la source