IOS_Command Module – 延迟提示问题(Cisco 3850 – IOS XE)

67次阅读
没有评论

问题描述

在使用Ansible的IOS_Command模块时遇到了问题。他想要运行一个命令request platform software package clean switch all file flash:,这个命令会出现一个提示,要求用户输入yn来确认操作,而不需要按回车键。用户的Ansible代码等待这个提示,但是在运行时超时了。用户尝试将提示改为[confirm],回答改为\r,这样可以看到输出,但是清理操作并没有执行。用户认为prompt参数应该等待提示出现,但是似乎并不是这样。用户想知道这个模块是如何工作的,以及如何解决这个问题。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1,可以尝试将提示改为],并升级Ansible到2.8.1版本。这个方法在某些情况下可以解决问题。

方案2

根据回答1的描述,request platform software命令在处理用户交互方面可能有些棘手。如果你使用的是Ansible 2.4.版本,可能无法成功处理这种情况。这可能是由于paramiko的行为导致的。用户提到在2018年底使用Ansible 2.4.版本时,尝试了很多方法都没有成功。可能需要使用其他方法来处理SW清理任务,比如使用IB NetMRI。
但是,自Ansible 2.8版本以来,许多与Cisco XE集成相关的问题已经得到解决。现在可以使用request platform software命令来执行清理操作。

方案3

根据回答1的描述,可以尝试使用expect模块来处理这个问题。expect模块可以模拟用户的交互操作,可以等待特定的提示并自动回答。以下是一个示例代码:

- name: CLEAN UP OLD SOFTWARE
  expect:
    command: "request platform software package clean switch all file flash:"
    responses:
      "Do you want to proceed? [y/n]": "y"
  vars:
    ansible_command_timeout: 90
  when: compliant_ios_version == ansible_net_version

在上面的示例中,我们使用expect模块来执行命令,并设置了一个期望的提示和回答。当命令执行时,expect模块会等待特定的提示出现,并自动回答为y。这样可以避免手动输入回答。

请注意,以上解决方案可能需要根据具体情况进行调整和测试,以确保其适用性和正确性。

以上是针对用户提出的问题的解决方案。希望对你有帮助!如果还有其他问题,请随时提问。

正文完