问题描述
在使用Ansible的IOS_Command模块时遇到了问题。他想要运行一个命令request platform software package clean switch all file flash:
,这个命令会出现一个提示,要求用户输入y
或n
来确认操作,而不需要按回车键。用户的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
。这样可以避免手动输入回答。
请注意,以上解决方案可能需要根据具体情况进行调整和测试,以确保其适用性和正确性。
以上是针对用户提出的问题的解决方案。希望对你有帮助!如果还有其他问题,请随时提问。