web-dev-qa-db-fra.com

Comparaison de chaînes Ansible Jinja2

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?

5
Ruchir Bharadwaj

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.

18
techraf