来自stdsout

时间:2018-02-19 20:21:54

标签: parsing ansible

我用一些命令运行一个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,这样我就能分开检查它们。但这不是必需的。

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模块。