Ansible中如何从MQ通道状态输出提取CHANNEL与STATUS字段
提取MQ通道STATUS值的通用方法
完全可以通过定位STATUS字符串的方式提取对应值,用正则表达式就能搞定,不用管输出里有没有RQMNAME这类额外字段,也不需要写分支判断逻辑。
核心思路
利用正则精准匹配STATUS(开头、)结尾的内容,直接提取括号内的状态值。对应的正则模式是:STATUS\(([^)]+)\)
同理,提取CHANNEL值也能用同样思路,正则模式:CHANNEL\(([^)]+)\)
Ansible 实现示例
假设你已经通过命令获取到通道状态并注册为mq_channel_status变量,直接用regex_search过滤器提取:
- name: 提取通道名称和状态 set_fact: channel_name: "{{ mq_channel_status.stdout_lines[0] | regex_search('CHANNEL\\(([^)]+)\\)', '\\1') | first }}" channel_status: "{{ mq_channel_status.stdout_lines[0] | regex_search('STATUS\\(([^)]+)\\)', '\\1') | first }}"
测试验证
对于普通通道输出:
['CHANNEL(SVRCONN.CHL) CHLTYPE(SVRCONN) CONNAME(1.2.3.4) STATUS(RUNNING) SUBSTATE(RECEIVE)']
提取结果:channel_name=SVRCONN.CHL,channel_status=RUNNING对于集群通道输出:
['CHANNEL(CLUSTER_CHL) CHLTYPE(CLUSRCVR) CONNAME(2.3.4.5) RQMNAME(CLUS00) STATUS(RUNNING) SUBSTATE(RECEIVE)']
提取结果:channel_name=CLUSTER_CHL,channel_status=RUNNING
这种方法不依赖字段的顺序和数量,只要STATUS的格式不变,后续新增其他字段也不会影响提取结果。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

