如何从F5 bigip_command模块的stdout结果中过滤提取pool名称
你可以直接通过Ansible内置的regex_findall过滤器匹配提取所有pool名称,在你现有任务流程的末尾新增以下任务即可:
# 遍历所有policy的查询结果,提取pool名称 - name: 提取pool名称 set_fact: all_pools: "{{ all_pools | default([]) + (item.stdout[0] | regex_findall('pool\\s+(\\S+)')) }}" loop: "{{ layer7_pools.results }}" # 可选:对pool列表做去重、拍平处理,避免同一个pool被多条规则匹配导致重复 - name: 整理pool列表 set_fact: valid_pools: "{{ all_pools | flatten | unique }}" # 打印最终结果 - name: 输出提取到的所有pool名称 debug: msg: "{{ valid_pools }}"
逻辑说明
- 正则表达式
pool\s+(\S+)会匹配所有以pool开头的内容,捕获pool关键字后面的非空白字符,也就是pool的名称 - 遍历
layer7_pools.results列表,每个元素对应你之前循环查询的单个policy的返回结果,从每个结果的stdout[0]字段里匹配pool名称 - 最终通过
flatten拍平可能的嵌套结构,unique过滤重复的pool名称
按照你提供的示例返回结果,最终提取到的pool列表为:["policy_test.net_pool1", "policy_test.net_pool2"]
内容的提问来源于stack exchange,提问作者SDay
相关产品推荐
相关产品推荐

