J'obtiens la valeur de la variable "env" dans le fichier modèle Jinja2 en utilisant une variable définie dans group_vars comme:
env: "{{ defined_variable.split('-')[0] }}"
env
trois valeurs possibles pourraient être abc
, def
, xyz
.
Sur la base de cette valeur, je souhaite utiliser l'URL du serveur, dont j'ai défini les valeurs possibles dans defaults/main.yml
comme:
server_abc: https://xxxx.xxx.com
server_def: https://xxxxx.xxx.com
server_xyz: https://xxxx.xxx.com
Dans le modèle Jinja2, j'essaie de faire:
{% if 'abc' == "{{env}}" %}
serverURL: '{{ server_abc }}'
{% Elif 'def' == "{{env}}" %}
serverURL: '{{ server_def}}'
{% Elif 'xyz' == "{{env}}" %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server Url not found'
{% endif %}
Cependant, il finit toujours par définir ServerURL = "server URL not found"
même si env
est fourni avec la valeur de abc
, def
ou xyz
.
Si j'essaie de remplacer env dans le modèle Jinja2 (codé en dur) comme ci-dessous, la condition est vraie:
{% if 'abc' == "abc" %}
serverURL: '{{ server_abc }}'
Cela implique donc que la syntaxe est vraie, mais la valeur de "{{env}}"
au moment de l'exécution n'est pas évalué.
Une suggestion, que puis-je faire pour résoudre ce problème?
Vous n'avez pas besoin de guillemets et d'accolades pour faire référence aux variables à l'intérieur des expressions. La syntaxe correcte est:
{% if 'abc' == env %}
serverURL: '{{ server_abc }}'
{% Elif 'def' == env %}
serverURL: '{{ server_def }}'
{% Elif 'xyz' == env %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server URL not found'
{% endif %}
Sinon, vous comparez deux chaînes, par exemple abc
et {{env}}
et vous obtenez toujours un résultat négatif.