You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible 2.9:如何用set_fact根据stdout_lines设置布尔变量?

解决方法

正确设置布尔变量的写法

你可以直接用Ansible的测试器或成员判断生成布尔值,替换原有代码:

方法1:使用is search测试器

- name: Set server running status
  set_fact:
    server_running: "{{ confluent_status.stdout_lines | join('') is search('active (running)') }}"

方法2:使用in成员判断

- name: Set server running status
  set_fact:
    server_running: "{{ 'active (running)' in confluent_status.stdout_lines | join('') }}"

这两种写法都会直接返回布尔值True或False,满足需求。

原代码不生效的原因

你之前用的search过滤器,在Ansible中匹配成功时返回匹配到的字符串对象,失败时返回None,二者都不是标准布尔值。而is search是专门用于返回布尔值的测试器,in操作符则直接判断子串是否存在,二者都能输出你需要的布尔结果。

定义布尔变量的常见方式

除了上述直接表达式赋值,还有几种常用实现方式:

1. 分任务用when条件赋值

如果逻辑更复杂,可拆分为两个任务分别设置:

- name: Mark server as running
  set_fact:
    server_running: true
  when: "'active (running)' in confluent_status.stdout_lines | join('')"

- name: Mark server as not running
  set_fact:
    server_running: false
  when: "'active (running)' not in confluent_status.stdout_lines | join('')"

2. 使用ternary过滤器(适用于复杂条件映射)

若需根据条件在两个值间切换,ternary过滤器也可生成布尔值:

- name: Set server running status
  set_fact:
    server_running: "{{ ('active (running)' in confluent_status.stdout_lines | join('')) | ternary(true, false) }}"

不过对于简单的存在性判断,直接用is search或in的写法最简洁。

内容的提问来源于stack exchange,提问作者adbdkb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:55:20