我用一些命令运行一个ansible playbook到网络设备(juniper)来检查状态。 输出如下:
"Monitor Failure codes:",
" CS Cold Sync monitoring FL Fabric Connection monitoring",
" GR GRES monitoring HW Hardware monitoring",
" IF Interface monitoring IP IP monitoring",
" LB Loopback monitoring MB Mbuf monitoring",
" NH Nexthop monitoring NP NPC monitoring ",
" SP SPU monitoring SM Schedule monitoring",
" CF Config Sync monitoring",
" ",
"Cluster ID: 1",
"Node Priority Status Preempt Manual Monitor-failures",
"",
"Redundancy group: 0 , Failover count: 0",
"node0 1 secondary no no None ",
"node1 125 primary no no None ",
"",
"Redundancy group: 1 , Failover count: 0",
"node0 1 secondary yes no None ",
"node1 125 primary yes no None"
我想过滤然后对Redundancy组下的段进行一些检查:0和1(另一个端口没有兴趣。我无法找出解析它们的最佳方法,编写过滤器插件?或者只是regexp ?在最好的世界中,我想分离冗余组0和1,这样我就能分开检查它们。但这不是必需的。
答案 0 :(得分:0)
如果你需要一些复杂的处理,那么是 - 写一个过滤插件。
但是可以使用正则表达式和其他过滤器完成一些基本处理,请参阅此示例:
- debug:
msg: "Name={{ node_name }}, val1={{ node_val_1 }}"
vars:
node_name: "{{ item.split()[0] }}"
node_val_1: "{{ item.split()[1] }}"
regexp: '^Redundancy group: 0[\s\S]+?^$'
new_line: "\n"
loop_control:
label: "{{ node_name }}"
with_items: >
{{ (
(mylines | join(new_line) + new_line)
| regex_search(regexp, multiline=true)
).splitlines()[1:] }}
这会搜索以Redundancy group: 0
开头并以空行结尾的行范围,然后将这些行提供给循环的debug
模块。