Parsing 来自stdsout的Ansible解析值

Parsing 来自stdsout的Ansible解析值,parsing,ansible,Parsing,Ansible,我正在运行ansible playbook,并向网络设备(juniper)发送一些命令以检查状态。 输出如下所示: "Monitor Failure codes:", " CS Cold Sync monitoring FL Fabric Connection monitoring", " GR GRES monitoring HW Hardware monitoring",

我正在运行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" 

我想对冗余组0和1下的段进行筛选,然后进行一些检查(另一个端口没有任何用处。我想不出解析它们的最佳方法,写过滤插件?还是只写regexp?在最好的情况下,我想将冗余组0和1分开,这样我就可以分别检查它们。但这不是必需的。

如果你需要一些复杂的处理,那么是的,写一个过滤插件

但一些基本处理可以通过正则表达式和其他过滤器完成,请参见以下示例:

- 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:] }}

这将搜索以
冗余组:0开始并以空行结束的行范围,然后将这些行馈送到循环
调试
模块中。

Hmm,我刚刚进行了复制/粘贴,当我执行剧本时,我收到了此错误。致命:[testnode.1]:失败!=>{“msg”:“mylines”未定义“}我用:register:status保存了命令的输出,我对这个不太熟悉,所以我尝试用status替换myline,然后我得到了{“msg”:“'None'没有属性'splitlines'”}对不起,我猜不出你的变量名……是的,你不能:),我把评论贴了一半。首先调试
状态
。你应该有类似于
状态的东西。stdout
或其他东西。很好,现在它可以工作了:)