我试图在运行时根据另一个变量在 Ansible 中使用 set_fact 设置一个变量。无论实际值是多少,都使用第一个值。这是我的代码示例:
- 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
is d
无论jm_env
is set.
首先,YAML 中的字典不是有序的(这里 Ansible 使用的语法是 YAML 字典),所以你不能保证 Ansible 会首先设置jm_env
在继续之前l_env
-- 您需要将作业分成两个任务。
其次,你的测试表达式不正确——'{{jm_env}}==Develop'
是一个字符串,因为它被引号括起来;和测试if 'string'
将始终评估为true
(这是你总是得到的直接原因d
在输出中)。
Use:
- 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 %}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)