the*_*d71 5 jinja2 ansible ansible-template
我试图在运行时使用set_fact在Ansible中设置一个基于另一个变量的变量.如果使用第一个值,无论实际值是多少.这是我的代码示例:
- 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 %}"
Run Code Online (Sandbox Code Playgroud)
l_env是d无论什么jm_env设置.
首先,YAML中的字典不是有序的(这里Ansible使用的语法是YAML字典),所以你无法保证Ansible jm_env在进行之前首先设置l_env- 你需要将赋值分成两个任务.
其次,你的测试表达式不正确 - '{{jm_env}}==Develop'是一个字符串,因为它被引用; 并且测试if 'string'将始终评估为true(这是您总是d在输出中获得的直接原因).
使用:
- 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 %}"
Run Code Online (Sandbox Code Playgroud)
设置基于事实的条件示例的简单方法之一如下:
- name: Set facts for delete operation results
set_fact:
tr_result: "{{ '{\"status\": \"SUCCESS\"}' if (op_result['output'] == 'Deleted') else '{\"status\" : \"FAILED\"}' }}"
Run Code Online (Sandbox Code Playgroud)
注意:假设op_result是一个 dict 并且已经定义。
代码已经过测试并且运行良好。
| 归档时间: |
|
| 查看次数: |
19624 次 |
| 最近记录: |