ktbyers / netmiko

Multi-vendor library to simplify Paramiko SSH connections to network devices
MIT License
3.49k stars 1.26k forks source link

Nornir netmiko.exceptions.ReadTimeout CISCO IOS #3433

Closed Abdellah5836 closed 1 month ago

Abdellah5836 commented 1 month ago

I'm using Nornir with Netmiko to deploy configuration on cisco IOS routers as follow:

from nornir import InitNornir
from nornir_utils.plugins.functions import print_result
from nornir_netmiko import netmiko_send_command, netmiko_send_config
from pprint import pprint

configCommands = ['router ospf 1']
# switch01 = ['router ospf 1']
# switch02 = []
showCommands = ['show ip int br', 'show ip route | begin Gateway']
configFile = "C:\\Users\\pc\\Desktop\\python_programmability\\llpyAuto01\\autoPy05\\nornirTutorials\\config.yaml"
resultList = list()
connect = InitNornir(config_file=configFile)
if connect.filter(hostname='10.10.1.1'):
    configCommands.append('router-id 1.1.1.1')
    configCommands.append('default-information orginate')
    configCommands.append('network 10.10.1.0 0.0.0.3 area 0')
elif connect.filter(hostname='10.10.1.2'):
    configCommands.append('router-id 2.2.2.2')
    configCommands.append('network 10.10.1.0 0.0.0.3 area 0')
    configCommands.append('network 10.10.1.4 0.0.0.3 area 0')
elif connect.filter(hostname='10.10.1.6'):
    configCommands.append('router-id 3.3.3.3')
    configCommands.append('network 10.10.1.4 0.0.0.3 area 0')

for cmd in configCommands:
    result = connect.run(task=netmiko_send_config, command_string=cmd, read_timeout=40)
    resultList.append(result)

for res in resultList:
    print_result(res)

groups YAML file that contains: groups.yaml

---
ios:
  platform: "ios"
  secret: passwd

hosts YAML file: hosts.yaml

---
Router-1:
  hostname: 10.10.1.1
  groups:
  - ios

switch-1:
  hostname: 10.10.1.2
  groups:
  - ios

switch-2:
  hostname: 10.10.1.6
  groups:
  - ios

defaults YAML file: defaults.yaml


---
username: abdo
password: passwd
secret: passwd

config YAML file: config.yaml


---
inventory:
  plugin: SimpleInventory
  options:
    host_file: "C:\\Users\\pc\\Desktop\\python_programmability\\llpyAuto01\\autoPy05\\nornirTutorials\\hosts.yaml"
    group_file: "C:\\Users\\pc\\Desktop\\python_programmability\\llpyAuto01\\autoPy05\\nornirTutorials\\groups.yaml"
    defaults_file: "C:\\Users\\pc\\Desktop\\python_programmability\\llpyAuto01\\autoPy05\\nornirTutorials\\defaults.yaml"

runner:
  plugin: threaded
  options:
    num_workers: 4

Running my Python code would return the following exception:

netmiko_send_config*************************************************************
* Router-1 ** changed : False **************************************************
vvvv netmiko_send_config ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ERROR
Traceback (most recent call last):
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir\core\task.py", line 99, in start
    r = self.task(self, **self.params)
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir_netmiko\tasks\netmiko_send_config.py", line 36, in netmiko_send_config
    net_connect.enable()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\cisco_base_connection.py", line 26, in enable
    return super().enable(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 2042, in enable
    output += self.read_until_prompt()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 837, in read_until_prompt        
    return self.read_until_pattern(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 746, in read_until_pattern       
    raise ReadTimeout(msg)
netmiko.exceptions.ReadTimeout:

Pattern not detected: 'R1' in output.

Things you might try to fix this:
1. Adjust the regex pattern to better identify the terminating string. Note, in
many situations the pattern is automatically based on the network device's prompt.
2. Increase the read_timeout to a larger value.

You can also look at the Netmiko session_log or debug log for more information.

^^^^ END netmiko_send_config ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* switch-1 ** changed : False **************************************************
vvvv netmiko_send_config ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ERROR
Traceback (most recent call last):
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir\core\task.py", line 99, in start
    r = self.task(self, **self.params)
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir_netmiko\tasks\netmiko_send_config.py", line 36, in netmiko_send_config
    net_connect.enable()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\cisco_base_connection.py", line 26, in enable
    return super().enable(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 2042, in enable
    output += self.read_until_prompt()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 837, in read_until_prompt        
    return self.read_until_pattern(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 746, in read_until_pattern       
    raise ReadTimeout(msg)
netmiko.exceptions.ReadTimeout:

Pattern not detected: 'SW1' in output.

Things you might try to fix this:
1. Adjust the regex pattern to better identify the terminating string. Note, in
many situations the pattern is automatically based on the network device's prompt.
2. Increase the read_timeout to a larger value.

You can also look at the Netmiko session_log or debug log for more information.

^^^^ END netmiko_send_config ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* switch-2 ** changed : False **************************************************
vvvv netmiko_send_config ** changed : False vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ERROR
Traceback (most recent call last):
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir\core\task.py", line 99, in start
    r = self.task(self, **self.params)
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\nornir_netmiko\tasks\netmiko_send_config.py", line 36, in netmiko_send_config
    net_connect.enable()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\cisco_base_connection.py", line 26, in enable
    return super().enable(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 2042, in enable
    output += self.read_until_prompt()
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 837, in read_until_prompt        
    return self.read_until_pattern(
  File "C:\Users\pc\Desktop\python_programmability\llpyAuto01\lib\site-packages\netmiko\base_connection.py", line 746, in read_until_pattern       
    raise ReadTimeout(msg)
netmiko.exceptions.ReadTimeout:

Pattern not detected: 'SW2' in output.

Things you might try to fix this:
1. Adjust the regex pattern to better identify the terminating string. Note, in
many situations the pattern is automatically based on the network device's prompt.
2. Increase the read_timeout to a larger value.

You can also look at the Netmiko session_log or debug log for more information.

^^^^ END netmiko_send_config ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netmiko_send_config*************************************************************
netmiko_send_config*************************************************************
netmiko_send_config*************************************************************

Please help resolve the issue, thanks in advance.