【问题标题】:Ansible Print IOS output on string matchAnsible 在字符串匹配时打印 IOS 输出
【发布时间】: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

有什么建议吗?

【问题讨论】:

    标签: ansible cisco-ios


    【解决方案1】:

    ios_commandstdout 作为列表返回,stdout_lines 作为列表列表返回(而command 模块将stdout 作为字符串返回,stdout_lines 作为列表返回)。

    所以在你的情况下,你可能想试试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2015-12-23
      • 1970-01-01
      • 2016-10-23
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多