如何用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
相关产品推荐
相关产品推荐

