Ansible:如何基于大写存储的变量实现条件执行?
解决Ansible中Oracle SQL返回值的条件匹配问题
你的核心问题是没有正确提取注册变量cdb_on中的实际返回值。从执行结果可以看到,oracle_sql模块的查询结果嵌套在msg字段的二维列表里(msg: [["FALSE"]]),而你之前的条件判断都是直接对整个cdb_on对象进行操作,自然无法匹配到目标值。
正确的条件写法
要匹配字面量"FALSE",需要先提取出msg中的具体值,再进行判断:
- name: run when: cdb_on.msg[0][0] == 'FALSE'
解释之前的错误写法
when: cdb_on | bool == FALSE:直接将整个注册对象转布尔值,结果必然是true(因为cdb_on是一个非空字典),所以条件不成立。when: cdb_on == '"FALSE"'或when: cdb_on == 'FALSE':cdb_on是包含多个字段的字典,和字符串"FALSE"完全不相等,条件永远不成立。when: cdb_on | upper == "FALSE":对字典执行upper过滤没有意义,无法得到目标字符串。
额外说明
如果你希望按布尔值判断,也可以先提取值再转布尔类型:
- name: run when: cdb_on.msg[0][0] | bool == false
内容的提问来源于stack exchange,提问作者uwe A
相关产品推荐
相关产品推荐

