使用Ansible Expect模块连接到网络设备

114次阅读
没有评论

问题描述

在使用Ansible时遇到了使用expect模块的问题。他希望通过该模块在Ansible playbook中执行telnet命令,连接到一个网络设备(NetApp filer)。用户尝试了telnet模块,但是在ip地址后使用port参数似乎不起作用。用户希望能够在”Connected to port 33.”之后模拟一个回车键按下的操作,但似乎遇到了问题。以下是用户提供的具体情况:

用户手动操作示例:

[sansible@scspr0415857001 ansible]$ telnet 10.233.82.7 2033
Trying 10.233.82.7...
Connected to 10.233.82.7.
Escape character is '^]'.
Connected to port 33.
login: admin
Password: 
rtpsb-f6280-02a-1::>

用户尝试使用expect模块的Playbook示例:

---
- hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Expect Attempt
      expect:
        echo: yes
        command: telnet 10.233.82.7 2033
        responses:
          Question:
            - Connected to port* "echo"
            - login: "admin"
            - Password: "password"

但是运行Playbook后出现了错误,用户提供了完整的错误信息。

解决方案

以下解决方案基于提供的问答数据。请根据具体情况适当调整,并注意版本差异。

要在Ansible playbook中使用expect模块连接到网络设备,确保你的期望模式匹配正确,以便顺利模拟交互。下面是解决方案的步骤:

  1. 修复期望模式
    在你的期望(expect)模块中,确保你的期望响应能够正确匹配连接到端口后返回的信息。在你的情况下,”Connected to port 33.” 似乎是一个重要的提示,但你的模式似乎不太匹配。你可以尝试使用更精确的模式匹配。

  2. 去除 “Question:” 参数
    在你的expect模块中,移除 “Question:” 参数。你的responses部分应该直接列出期望匹配的模式,而不需要”Question:”。下面是修正后的expect模块示例:

---
- hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Expect Attempt
      expect:
        echo: yes
        command: telnet 10.233.82.7 2033
        responses:
          - Connected to port 33.: "echo"
          - login: "admin"
          - Password: "password"

修正后的responses直接以列表形式列出了模式,而不再需要”Question:”。

请确保你的期望匹配与实际返回的信息相匹配,这样你的expect模块就能够正确模拟交互并执行所需的操作。

总结

使用Ansible的expect模块连接到网络设备时,确保期望响应的模式匹配准确,以便能够模拟交互操作。在你的期望模块中,直接列出模式,不再需要”Question:”参数。这将帮助你成功连接并操作网络设备。如果你在期望模块中遇到其他问题,可以查看错误信息以找出问题所在,然后进行相应的调整。

注意:以上解决方案基于提供的问答数据,具体操作可能因版本差异而有所不同。在实际操作中,请根据你的情况进行适当的调整。

正文完