我正在尝试在运行时使用set_fact在Ansible中设置一个基于另一个变量的变量。If使用第一个值,而不管实际值是什么。下面是我的代码示例:
- 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 %}"无论设置什么jm_env,l_env都是d。
发布于 2017-03-22 05:36:22
首先,YAML中的字典是无序的( Ansible在这里使用的语法是YAML字典),所以不能保证Ansible会在继续l_env之前首先设置jm_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 %}"发布于 2018-05-04 22:32:30
设置基于事实的条件示例的简单方法之一如下:
- name: Set facts for delete operation results
set_fact:
tr_result: "{{ '{\"status\": \"SUCCESS\"}' if (op_result['output'] == 'Deleted') else '{\"status\" : \"FAILED\"}' }}"注意:假设op_result是一个已经定义好的字典。
代码已经过测试,运行良好。
https://stackoverflow.com/questions/42935820
复制相似问题