【发布时间】:2022-05-24 02:24:43
【问题描述】:
问题
如何保持或断开 telnet 连接而不会出错?
情况
我想用Nornir重新加载路由器,但是触发时终端会显示错误信息EOFError: telnet connection closed。
行动
我尝试在重新加载 telnet 连接后使用r1.close_connections(),但它仍然触发了之前的EOFError。
- 当reloading命令被触发时,路由器必须重启系统,所以telnet会话会被断开。
环境
Python 3.9.6
nornir==3.1.1
nornir-jinja2==0.2.0
nornir-napalm==0.1.2
nornir-netmiko==0.1.1
nornir-rich==0.1.2
nornir-utils==0.1.2
netmiko==3.4.0
nornir-netmiko==0.1.1
预期结果
- 重新加载路由器。
- 当reloading命令被触发时,路由器必须重启系统,所以telnet会话会被断开。
- 等待路由器重新加载时间。
- 显示路由器版本。
执行代码
from time import sleep from nornir import InitNornir from nornir_netmiko import netmiko_send_command as send_cmd, netmiko_send_config def reboot_device(task): task.run( task=netmiko_send_command, use_timing=True, command_string=\"reload\", ) task.run( task=netmiko_send_command, use_timing=True, command_string=\'y\', ) def main(): nr = InitNornir(config_file=\"config.yaml\") r1 = nr.filter(device_name=\"R1\") reload_time = 60 r1.run(task=reboot_device) sleep(reload_time) r1.run( task=netmiko_send_command, use_timing=True, command_string=\"show version\" ) if __name__ == \"__main__\": main()错误信息
2022-05-21 18:35:34,126 - nornir.core.task - ERROR - start() - Host \'R1\': task \'netmiko_send_command\' failed with traceback: Traceback (most recent call last): File \"/usr/local/lib/python3.9/site-packages/nornir/core/task.py\", line 99, in start r = self.task(self, **self.params) File \"/usr/local/lib/python3.9/site-packages/nornir_netmiko/tasks/netmiko_send_command.py\", line 30, in netmiko_send_command result = net_connect.send_command_timing(command_string, **kwargs) File \"/usr/local/lib/python3.9/site-packages/netmiko/utilities.py\", line 500, in wrapper_decorator return func(self, *args, **kwargs) File \"/usr/local/lib/python3.9/site-packages/netmiko/base_connection.py\", line 1303, in send_command_timing new_data = self.read_until_pattern(pattern=re.escape(cmd)) File \"/usr/local/lib/python3.9/site-packages/netmiko/base_connection.py\", line 655, in read_until_pattern return self._read_channel_expect(*args, **kwargs) File \"/usr/local/lib/python3.9/site-packages/netmiko/base_connection.py\", line 589, in _read_channel_expect output += self.read_channel() File \"/usr/local/lib/python3.9/site-packages/netmiko/base_connection.py\", line 526, in read_channel output = self._read_channel() File \"/usr/local/lib/python3.9/site-packages/netmiko/base_connection.py\", line 508, in _read_channel output = self.remote_conn.read_very_eager().decode(\"utf-8\", \"ignore\") File \"/usr/local/lib/python3.9/telnetlib.py\", line 368, in read_very_eager return self.read_very_lazy() File \"/usr/local/lib/python3.9/telnetlib.py\", line 405, in read_very_lazy raise EOFError(\'telnet connection closed\') EOFError: telnet connection closed