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