J'essaie de définir une variable dans Ansible avec set_fact au moment de l'exécution en fonction d'une autre variable. Si utilise la première valeur, peu importe la valeur réelle. Voici mon exemple de code:
- name: Global_vars - get date info
set_fact:
jm_env: "{{lookup('env', 'Environment')}}"
l_env: "{% if '{{jm_env}}==Develop' %}d{% Elif '{{jm_env}}==Staging'%}s{% else %}p{% endif %}"
l_env
est d
peu importe ce que jm_env
est défini.
Tout d'abord, les dictionnaires en YAML ne sont pas ordonnés (et la syntaxe utilisée par Ansible ici est un dictionnaire YAML), vous n'avez donc aucune garantie que Ansible définirait d'abord jm_env
avant de passer à l_env
- vous devez scinder l'affectation en deux tâches.
Deuxièmement, vos expressions de test sont incorrectes - '{{jm_env}}==Develop'
est une chaîne car elle est citée; et tester if 'string'
sera toujours évalué à true
(c’est la raison directe pour laquelle vous obtenez toujours d
dans le résultat).
Utilisation:
- name: Set the jm_env
set_fact:
jm_env: "{{lookup('env', 'Environment')}}"
- name: Set the l_env
set_fact:
l_env: "{% if jm_env=='Develop' %}d{% Elif jm_env=='Staging'%}s{% else %}p{% endif %}"
L'un des moyens simples de définir l'exemple de condition basé sur des faits comme suit:
- name: Set facts for delete operation results
set_fact:
tr_result: "{{ '{\"status\": \"SUCCESS\"}' if (op_result['output'] == 'Deleted') else '{\"status\" : \"FAILED\"}' }}"
Remarque: Supposons que op_result est un dict & déjà défini.
Le code a été testé et fonctionne bien.