Ansible打印字符串匹配的IOS输出

Ansible打印字符串匹配的IOS输出,ansible,cisco-ios,Ansible,Cisco Ios,我正在尝试使用Ansible点击一组(100+)Cisco Catalyst交换机,检查它们是否安装了特定的线路卡。通过SSH,这可以通过“shmod”命令完成。我想在剧本中解析该命令的输出,然后在某个字符串匹配时显示该命令的输出。现在,根据下面的剧本,我得到了以下错误: 致命:[编辑的主机名]:失败!=>{“failed”:true,“msg”:“The 条件检查“showmod搜索(\“4548\”)失败。错误为: ({%if showmod)上发生意外的模板类型错误| 搜索(\“4548\

我正在尝试使用Ansible点击一组(100+)Cisco Catalyst交换机,检查它们是否安装了特定的线路卡。通过SSH,这可以通过“shmod”命令完成。我想在剧本中解析该命令的输出,然后在某个字符串匹配时显示该命令的输出。现在,根据下面的剧本,我得到了以下错误:

致命:[编辑的主机名]:失败!=>{“failed”:true,“msg”:“The 条件检查“showmod搜索(\“4548\”)失败。错误为: ({%if showmod)上发生意外的模板类型错误| 搜索(\“4548\”)%}True{%else%}False{%endif%}):应为 字符串或缓冲区\n\n错误似乎已出现 “/etc/ansible/playbooks/linecard-4548.yaml”:第22行第5列,但 根据确切的语法,可能\n出现在文件的其他位置 问题。\n\n出现问题的行是:\n\n\n-debug: \“找到了msg='4548卡\”\n^此处\n”}

当前剧本代码:

---
- hosts: redacted-hostname
  gather_facts: yes
  connection: local

  tasks:

  - name: SYS | Define provider
    set_fact:
      provider:
        host: "{{ inventory_hostname }}" 
        username: redacted-user
        password: redacted-password

  - name: IOS | Get Module List
    ios_command:
      provider: "{{ provider }}"
      commands:
          - sh mod | inc 4548
    register: showmod

  - debug: "msg='4548 Card Found'"
    when: showmod.stdout | search("/4548/")  
我在调试中尝试了
when
,无论是否使用
.stdout
,都没有效果。我做了一些研究,在我的例子中,
showmod
是未定义的,但它肯定是未定义的,我得到的错误通常会发生。如果我用下面的代码片段替换调试,playbook运行良好,但它当然会打印每个开关的输出,这不是我想要的

  - name: IOS | Show Output
    debug:
      var: showmod
有什么建议吗?

返回
stdout
作为列表和
stdout\u行
作为列表(而
命令
模块返回
stdout
作为字符串和
stdout\u行
作为列表)

因此,在您的情况下,您可能需要尝试:

- debug: "msg='4548 Card Found'"
  when: showmod.stdout | join(" ") | search("/4548/")  
返回
stdout
作为列表和
stdout\u行
作为列表(而
命令
模块返回
stdout
作为字符串和
stdout\u行
作为列表)

因此,在您的情况下,您可能需要尝试:

- debug: "msg='4548 Card Found'"
  when: showmod.stdout | join(" ") | search("/4548/")