我正在尝试使用 Ansible 连接一堆(100 多台)Cisco Catalyst 交换机并检查它们是否安装了某个线卡。通过 SSH,这可以使用“sh mod”命令来完成。我想在剧本中解析该命令的输出,然后在某个字符串匹配时显示该命令的输出。现在使用下面的剧本,我收到以下错误:
致命:[编辑主机名]:失败!=> {"failed": true, "msg": "条件检查 'showmod | search(\"4548\")' 失败。错误是:在 ({% if showmod | search(\ "4548\") %} True {% else %} False {% endif %}): 预期的字符串或缓冲区\n\n错误似乎在 '/etc/ansible/playbooks/linecard-4548.yaml' 中:第 22 行第 5 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n - 调试:\"msg='4548 Card Found'\ "\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
是未定义的,但它肯定是。如果我用以下代码段替换调试,则剧本运行良好,但当然它会为每个不是我想要的开关打印输出。
- name: IOS | Show Output
debug:
var: showmod
有什么建议么?