首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible,使用if then else语句的set_fact

Ansible,使用if then else语句的set_fact
EN

Stack Overflow用户
提问于 2017-03-22 02:52:35
回答 2查看 37.9K关注 0票数 13

我正在尝试在运行时使用set_fact在Ansible中设置一个基于另一个变量的变量。If使用第一个值,而不管实际值是什么。下面是我的代码示例:

代码语言:javascript
复制
- 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_envl_env都是d

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 05:36:22

首先,YAML中的字典是无序的( Ansible在这里使用的语法是YAML字典),所以不能保证Ansible会在继续l_env之前首先设置jm_env --您需要将赋值分成两个任务。

其次,您的测试表达式是不正确的-- '{{jm_env}}==Develop'是一个字符串,因为它被引用了;并且测试if 'string'的计算结果总是为true (这是您总是在输出中得到d的直接原因)。

使用:

代码语言:javascript
复制
- 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 %}"
票数 16
EN

Stack Overflow用户

发布于 2018-05-04 22:32:30

设置基于事实的条件示例的简单方法之一如下:

代码语言:javascript
复制
  - name: Set facts for delete operation results
    set_fact:
        tr_result: "{{ '{\"status\": \"SUCCESS\"}' if (op_result['output'] == 'Deleted') else '{\"status\" : \"FAILED\"}' }}"

注意:假设op_result是一个已经定义好的字典。

代码已经过测试,运行良好。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42935820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档