【发布时间】:2017-12-24 21:32:21
【问题描述】:
我正在尝试使用 Ansible 连接一堆 (100 多台) Cisco Catalyst 交换机,并检查它们是否安装了特定的线卡。通过 SSH,这可以使用“sh mod”命令来完成。我想在剧本中解析该命令的输出,然后在某个字符串匹配时显示该命令的输出。现在使用下面的剧本我收到以下错误:
致命:[编辑主机名]:失败! => {“失败”:真,“味精”:“ 条件检查'showmod |搜索(\"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 ^ here\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 是未定义的,但它肯定是。如果我用以下 sn-p 替换调试,则 playbook 运行良好,但它当然会打印每个不是我想要的开关的输出。
- name: IOS | Show Output
debug:
var: showmod
有什么建议吗?
【问题讨论】: