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

如何用Filter或JMESPath检查Ansible任务输出列表是否含指定字符串

解决方案

要实现你需要的逻辑,直接用Ansible原生条件判断即可,不用复杂的json_query。通过set_fact模块组合三个条件,就能生成你需要的变量:

核心任务代码

添加以下set_fact任务,满足条件时将变量设为true:

- name: 标记服务启动成功状态
  set_fact:
    service_start_succeeded: "{{ confluent_start_status.changed == true and confluent_start_status.failed == false and 'start' in confluent_start_status.cmd }}"

条件说明

  • confluent_start_status.changed == true:确认启动操作确实触发了状态变更
  • confluent_start_status.failed == false:确认启动过程没有失败
  • 'start' in confluent_start_status.cmd:用Ansible原生的in操作符,检查cmd列表里是否包含start字符串

完整Playbook示例

- name: 启动已停止的Confluent服务
  command: systemctl start confluent-*
  register: confluent_start_status
  ignore_errors: true

- name: 设置成功启动标记变量
  set_fact:
    service_start_succeeded: "{{ confluent_start_status.changed == true and confluent_start_status.failed == false and 'start' in confluent_start_status.cmd }}"

- name: 调试输出标记变量
  debug:
    var: service_start_succeeded

原debug任务的修正

你原来的debug任务里json_query用法有误,要是只是用来调试cmd是否包含start,可以改成更简单的写法:

- debug:
    msg: "cmd列表包含'start'"
  when: "'start' in confluent_start_status.cmd"

或者直接输出判断结果:

- debug:
    var: "'start' in confluent_start_status.cmd"

内容的提问来源于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 02:40:28