Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOS: discard_config() fails at large catalyst-stack #2023

Open
1 task done
heitmanr opened this issue Nov 16, 2023 · 9 comments
Open
1 task done

IOS: discard_config() fails at large catalyst-stack #2023

heitmanr opened this issue Nov 16, 2023 · 9 comments

Comments

@heitmanr
Copy link

Description of Issue/Question

When using NAPALM to get a kind of preview of required configuration changes, the sequence

  • open()
  • load_merge()
  • compare_config()
    works fine and finds all configs to be changed.

When aborting the change using

  • discard_config()

this runs in a kind of internal napalm/netmiko-timeout.

The Exception raised is:

Pattern not detected: 'HOSTNAME\\#' in output.

Things you might try to fix this:
1. Explicitly set your pattern using the expect_string argument.
2. Increase the read_timeout to a larger value.

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

I assume this is a timeout on my client, since

  • in wireshark, a "TCP FIN" is sent by my laptop to the switch
  • modifying "global_delay_factor" leads to more delay, but my laptop will FIN the SSH-Session anyway.

Last line in "netmiko.log" is
HOSTNAME#copy running-config flash:/candidate_config.txt
When running the python script, this command never gets executed [no flash:/candidate_config.txt file is written into flash]

Trying this command manually per SSH, it takse ~11s but works fine.

Running this at (non-stacked) Catalyst-Switches using the same IOS-Release works fine.

Did you follow the steps from https://github.com/napalm-automation/napalm#faq

  • Yes
  • [] No

Setup

Windows 10 client
Catalyst 2960X, 15.2(7)E8

napalm version

(Paste verbatim output from pip freeze | grep napalm between quotes below)

C:\>pip freeze | grep napalm
napalm==4.1.0
napalm-s350==0.3.1

C:\>

Network operating system version

(Paste verbatim output from show version - or equivalent - between quotes below)

model: WS-C2960X-48FPD-L
os_type: IOS
os_version: (C2960X-UNIVERSALK9-M)_15.2(7)E8

Steps to Reproduce the Issue

I assume, the whole setup is required so it's almost impossible to reproduce in a lab environment.

Error Traceback

The Exception raised:

Pattern not detected: 'HOSTNAME\\#' in output.

Things you might try to fix this:
1. Explicitly set your pattern using the expect_string argument.
2. Increase the read_timeout to a larger value.

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

I'll upload netmiko.log.

@heitmanr
Copy link
Author

netmiko_hostname.log

@ktbyers
Copy link
Contributor

ktbyers commented Nov 16, 2023

@heitmanr When you run this command manually via SSH

HOSTNAME#copy running-config flash:/candidate_config.txt

Does the switch prompt for anything or is there anything else odd about the switches response?

Also do you have the full exception stack trace or a way to get it (so I can see the internal calls on where it is failing in the code)?

@heitmanr
Copy link
Author

@heitmanr When you run this command manually via SSH

HOSTNAME#copy running-config flash:/candidate_config.txt

Does the switch prompt for anything or is there anything else odd about the switches response?

No, since "file prompt quiet" is default in this specific setup... nothing... it takes 11 seconds at this particular switch, that's all...

HOSTNAME#copy running-config flash:/candidate_config.txt
218222 bytes copied in 10.279 secs (21230 bytes/sec)

Also do you have the full exception stack trace or a way to get it (so I can see the internal calls on where it is failing in the code)?

I'll attach the "debug"-log including the traceback.
2023-11_config-discard_netmiko-debug.txt

@heitmanr
Copy link
Author

I've been adding a time.sleep(60) right before calling discard_config() to facilitate following traces.

In Wireshark it looks like:
image
...so tcp-keepalives-in/out don't kick in within those 60s

after "discard_config()" is called, bi-directional traffic can be seen:
image

and ~13..14s later on netmiko gives up and closes the session:
image

It's the ssh-client (netmiko) which disconnects:
image

There is no "candidate_config.txt" in flash, so I don't expect the command to get executed.

HOSTNAME#dir *.txt
Directory of flash:/*.txt

  982  -rwx        2792  Nov 17 2023 10:29:57 +01:00  merge_config.txt

122185728 bytes total (14502400 bytes free)

@heitmanr
Copy link
Author

I've been adding

event manager applet CLI authorization bypass
 event cli pattern ".*" sync no skip no
 action 90 syslog priority notifications msg "$_cli_msg"

to the Switch-Config so I can monitor the commands entering the switch even when they are decrypted by SSH.

At the Syslog-Server the following Output Appears:

Nov 22 2023 11:41:26.988 CET: %SSH-5-SSH2_SESSION: SSH2 Session request from <user-ip> (tty = 0) using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' Succeeded
Nov 22 2023 11:41:27.253 CET: %SSH-5-SSH2_USERAUTH: User '<username>' authentication for SSH2 Session from <user-ip> (tty = 0) using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' Succeeded
Nov 22 2023 11:41:27.638 CET: %HA_EM-5-LOG: CLI: terminal width 511
Nov 22 2023 11:41:27.893 CET: %HA_EM-5-LOG: CLI: terminal length 0
Nov 22 2023 11:41:34.244 CET: %HA_EM-5-LOG: CLI: dir
Nov 22 2023 11:41:37.194 CET: %HA_EM-5-LOG: CLI: dir flash:
Nov 22 2023 11:41:37.858 CET: %SSH-5-SSH2_SESSION: SSH2 Session request from <user-ip> (tty = 2) using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' Succeeded
Nov 22 2023 11:41:38.141 CET: %SSH-5-SSH2_USERAUTH: User '<username>' authentication for SSH2 Session from <user-ip> (tty = 2) using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' Succeeded
Nov 22 2023 11:41:40.791 CET: %HA_EM-5-LOG: CLI: dir flash:/merge_config.txt
Nov 22 2023 11:41:43.346 CET: %HA_EM-5-LOG: CLI: verify /md5 flash:/merge_config.txt
Nov 22 2023 11:41:43.381 CET: %SSH-5-SSH2_CLOSE: SSH2 Session from <user-ip> (tty = 2) for user '' using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' closed
Nov 22 2023 11:41:46.030 CET: %HA_EM-5-LOG: CLI: show archive config incremental-diffs flash:/merge_config.txt  ignorecase
Nov 22 2023 11:42:55.245 CET: %HA_EM-5-LOG: CLI: configure terminal
Nov 22 2023 11:42:55.531 CET: %HA_EM-5-LOG: CLI: file prompt quiet
Nov 22 2023 11:42:55.629 CET: %HA_EM-5-LOG: CLI: end
Nov 22 2023 11:42:58.799 CET: %HA_EM-5-LOG: CLI: copy running-config flash:/candidate_config.txt
Nov 22 2023 11:43:11.082 CET: %SSH-5-SSH2_CLOSE: SSH2 Session from <user-ip> (tty = 0) for user '' using crypto cipher 'aes128-ctr', hmac 'hmac-sha2-256' closed

=> the "copy running-config flash:/candidate_config.txt"-command reaches the switch:

  • some seconds later, the SSH-Sessions is disconnected (by the client)
  • without the command having been executed
    • at least, there is no file in the flash:-filesystem

@heitmanr
Copy link
Author

Workaround (for me, 100% Catalyst IOS):

commands=["delete /force flash:merge_config.txt"]
dut.cli(commands)
#dut.discard_config()

Positive side-effect:

  • discard_config() would enable "file prompts" using "no file prompt quiet"
    (deleting the merge_config.txt is all I need from discard_config() in my particular case.)

@ktbyers
Copy link
Contributor

ktbyers commented Nov 22, 2023

Okay, it looks like we just need to increase the read_timeout on these two lines. I believe the default read_timeout is 10 seconds so if this command takes longer than 10 seconds, then you will get the error that you observed:

https://github.com/napalm-automation/napalm/blob/develop/napalm/ios/ios.py#L672-L673

@ktbyers ktbyers added the bug label Nov 22, 2023
@heitmanr
Copy link
Author

Okay, it looks like we just need to increase the read_timeout on these two lines. I believe the default read_timeout is 10 seconds so if this command takes longer than 10 seconds, then you will get the error that you observed:

https://github.com/napalm-automation/napalm/blob/develop/napalm/ios/ios.py#L672-L673

Oh, I've been using "global_delay_factor" before.

Changed the "optional_args" to:

optional_args={"read_timeout": 20, "session_log": "c:\\temp\\netmiko.log"}
dut = driver(hostname=connection_ip, username=username,  password=userpass, optional_args=optional_args)

Now it takes 11s for the exception to get thrown:

Timestamp:13:44:22 //discard_config.start
Timestamp:13:44:33 //discard_config.error

in

try:
    print_timestamp("discard_config.start")
    dut.discard_config()
except Exception as err:
    print_timestamp("discard_config.error")
    print(f"Discard Config: Exception {err}")
  • the "copy runing-config..." takes about 11s
  • the SSH-Session get's closed after ~12,5s
Nov 23 2023 13:44:24.619 CET: %HA_EM-5-LOG: CLI: copy running-config flash:/candidate_config.txt
Nov 23 2023 13:44:37.213 CET: %SSH-5-SSH2_CLOSE: SSH2 Session from <user-ip> for user...

the netmiko-debug stops now with "EOF"

  • but it didnt wait for 20s
DEBUG:netmiko:Pattern found: (copy\ running\-config\ flash:/candidate_config\.txt) copy running-config flash:/candidate_config.txt
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:paramiko.transport:EOF in transport thread

@ktbyers
Copy link
Contributor

ktbyers commented Nov 27, 2023

@heitmanr Yes, those lines are hard-coded in the napalm driver so it needs to be changed in the napalm code itself.

You possibly could change the behavior by setting: fast_cli=False, and global_delay_factor=4 as optional_args. Doing that might override the default read_timeout value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants