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

Problem with Catalyst 1300 - random detect pattern and noting more. #3474

Open
iniagolov opened this issue Aug 8, 2024 · 7 comments
Open

Comments

@iniagolov
Copy link

iniagolov commented Aug 8, 2024

Screenshot_20240808_210625-1300

Netmiko version

netmiko==4.4.0

Netmiko device_type (if relevant to the issue)

cisco_xr

======

Code

from netmiko import ConnectHandler
import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("netmiko")
net_connect = ConnectHandler(host="192.168.10.1", username="username", password="password", device_type="cisco_xr", secret="", port=22,)

Error Traceback

cat test.log
DEBUG:paramiko.transport:starting thread (client mode): 0xf6409890
DEBUG:paramiko.transport:Local version/idstring: SSH-2.0-paramiko_3.4.0
DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-OpenSSH_7.3p1.RL
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.3p1.RL)
DEBUG:paramiko.transport:=== Key exchange possibilities ===
DEBUG:paramiko.transport:kex algos: diffie-hellman-group16-sha512, diffie-hellman-group14-sha1
DEBUG:paramiko.transport:server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ssh-dss
DEBUG:paramiko.transport:client encrypt: aes128-ctr, aes192-ctr, aes256-ctr, chacha20-poly1305@openssh.com, aes128-gcm@openssh.com, aes256-gcm@openssh.com
DEBUG:paramiko.transport:server encrypt: aes128-ctr, aes192-ctr, aes256-ctr, chacha20-poly1305@openssh.com, aes128-gcm@openssh.com, aes256-gcm@openssh.com
DEBUG:paramiko.transport:client mac: hmac-sha2-256, hmac-sha2-512, hmac-sha1
DEBUG:paramiko.transport:server mac: hmac-sha2-256, hmac-sha2-512, hmac-sha1
DEBUG:paramiko.transport:client compress: none
DEBUG:paramiko.transport:server compress: none
DEBUG:paramiko.transport:client lang: <none>
DEBUG:paramiko.transport:server lang: <none>
DEBUG:paramiko.transport:kex follows: False
DEBUG:paramiko.transport:=== Key exchange agreements ===
DEBUG:paramiko.transport:Kex: diffie-hellman-group16-sha512
DEBUG:paramiko.transport:HostKey: rsa-sha2-512
DEBUG:paramiko.transport:Cipher: aes128-ctr
DEBUG:paramiko.transport:MAC: hmac-sha2-256
DEBUG:paramiko.transport:Compression: none
DEBUG:paramiko.transport:=== End of kex handshake ===
DEBUG:paramiko.transport:kex engine KexGroup16SHA512 specified hash_algo <built-in function openssl_sha512>
DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Adding ssh-rsa host key for 192.168.10.1: b'4ff6f5c57f4c093a942519d34b17ae3d'
DEBUG:paramiko.transport:Got EXT_INFO: {'server-sig-algs': b'rsa-sha2-256,rsa-sha2-512'}
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (password) successful!
DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes
DEBUG:paramiko.transport:[chan 0] Max packet out: 32768 bytes
DEBUG:paramiko.transport:Secsh channel 0 opened.
DEBUG:paramiko.transport:[chan 0] Sesch channel 0 request ok
DEBUG:paramiko.transport:[chan 0] Sesch channel 0 request ok
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 



ciskoS1#
DEBUG:netmiko:Pattern found: ([>#]) 



ciskoS1#
DEBUG:netmiko:write_channel: b'terminal width 511\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: 

ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: termi
DEBUG:netmiko:read_channel: nal widt
DEBUG:netmiko:read_channel: h 511

ciskoS1#
DEBUG:netmiko:Pattern found: (terminal width 511) 


ciskoS1#terminal width 511
DEBUG:netmiko:In disable_paging
DEBUG:netmiko:Command: terminal length 0

DEBUG:netmiko:write_channel: b'terminal length 0\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: t
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: erminal length 0

% Unrecognized command

DEBUG:netmiko:Pattern found: (terminal\ length\ 0) 

ciskoS1#terminal length 0
DEBUG:netmiko:

ciskoS1#terminal length 0
DEBUG:netmiko:Exiting disable_paging
DEBUG:netmiko:read_channel: ciskoS1#
DEBUG:netmiko:Pattern found: ([>#]) 

% Unrecognized command
ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

ciskoS1#
DEBUG:netmiko:
Parenthesis found in pattern.

pattern: (\#|>)


This can be problemtic when used in read_until_pattern().

You should ensure that you use either non-capture groups i.e. '(?:' or that the
parenthesis completely wrap the pattern '(pattern)'
DEBUG:netmiko:Pattern found: (\#|>) 


ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:[find_prompt()]: prompt is ciskoS1#

======

Code

>>> net_connect.send_command("show ver")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator
    return_val = func(self, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/utilities.py", line 596, in wrapper_decorator
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 1826, in send_command
    raise ReadTimeout(msg)
netmiko.exceptions.ReadTimeout: 
Pattern not detected: '\x1b\\[KciskoS1\\#' 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

Error Traceback

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 


ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:[find_prompt()]: prompt is ciskoS1#
DEBUG:netmiko:write_channel: b'show ver\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: s
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: how ver

Active-image: flash://system/images/image_c1300_4.1.3.36_official_key.bin

DEBUG:netmiko:Pattern found: (show\ ver) 


ciskoS1#


ciskoS1#


ciskoS1#show ver
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel:   Version: 4.1.3.36

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel:   MD5 Digest: 90803a985c9110cef9aa4d576206b629
  Date: 19-May-2024
  Time: 08:17:26
Inactive-image: flash://system/images/_image_c1300_4.1.3.36_official_key.bin
  Version: 4.1.3.36
  MD5 Digest: 90803a985c9110cef9aa4d576206b629
  Date: 19-May-2024
  Time: 08:17:26
ciskoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel:

======

Litle info from switch

ciskoS1#show version 
Active-image: flash://system/images/image_c1300_4.1.3.36_official_key.bin
  Version: 4.1.3.36
  MD5 Digest: 90803a985c9110cef9aa4d576206b629
  Date: 19-May-2024
  Time: 08:17:26
Inactive-image: flash://system/images/_image_c1300_4.1.3.36_official_key.bin
  Version: 4.1.3.36
  MD5 Digest: 90803a985c9110cef9aa4d576206b629
  Date: 19-May-2024
  Time: 08:17:26
ciskoS1#

@ktbyers
Copy link
Owner

ktbyers commented Aug 8, 2024

That is not "ios_xr" i.e. your device_type is wrong.

Also disabling of output paging is not working and there are ANSI escape codes are in the output?

It is a bit unclear what the actual operating system of the catalyst 1300 is? You can try "cisco_ios", but you will need to figure out why terminal length 0 is not working.

Also you probably need to disable the output paging, from looking at the CLI manual for Cat 1300, it looks like `Example
The following example dumps all output immediately after entering a show command.

terminal datadump

Also need to set:

net_connect.ansi_escape_codes = True

So your code should become:

from netmiko import ConnectHandler
import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("netmiko")
net_connect = ConnectHandler(
    host="192.168.10.1", 
    username="username", 
    password="password", 
    device_type="cisco_ios",   # Note change
    secret="", port=22,
)

net_connect.send_command("terminal datadump", expect_string=r"#")
net_connect.ansi_escape_codes = True

# Then try your "show" command using the "send_command" method.

Let me know if this works and we can build a driver for this platform.

Reference to notes on Operating System for Catalyst 1200 (and assume 1300):

https://www.reddit.com/r/Cisco/comments/185xmg0/os_used_in_the_catalyst_1200/

@iniagolov
Copy link
Author

iniagolov commented Aug 8, 2024

Of course I would like you to create a driver for this platform, just tell me what I can help with.

Code:

from netmiko import ConnectHandler
import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("netmiko")
net_connect = ConnectHandler(host="192.168.10.1", username="username", password="password", device_type="cisco_ios", secret="", port=22, )
net_connect.send_command("terminal datadump", expect_string=r"#")
net_connect.ansi_escape_codes = True
net_connect.send_command("show ver")
net_connect.send_command("show interface status")
net_connect.disconnect()

Result

>>> net_connect.disconnect()
>>> net_connect = ConnectHandler(host="192.168.10.1", username="networkmanager", password="N@Man390erp", device_type="cisco_ios", secret="", port=22, )
>>> net_connect.send_command("terminal datadump", expect_string=r"#")
'\nciscoS1#'
>>> net_connect.ansi_escape_codes = True
>>> net_connect.send_command("show ver")
'\nActive-image: flash://system/images/image_c1300_4.1.3.36_official_key.bin\n  Version: 4.1.3.36\n  MD5 Digest: 90803a985c9110cef9aa4d576206b629\n  Date: 19-May-2024\n  Time: 08:17:26\nInactive-image: flash://system/images/_image_c1300_4.1.3.36_official_key.bin\n  Version: 4.1.3.36\n  MD5 Digest: 90803a985c9110cef9aa4d576206b629\n  Date: 19-May-2024\n  Time: 08:17:26\nciscoS1#'
>>> 
>>> net_connect.send_command("show interface status")
'\n                                             Flow Link          Back   Mdix\nPort     Type         Duplex  Speed Neg      ctrl State       Pressure Mode\n-------- ------------ ------  ----- -------- ---- ----------- -------- -------\ngi1/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/2  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/3  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/4  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/5  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/6  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/7  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/8  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/9  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/10 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/11 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/12 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/13 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/14 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/15 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/17 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/18 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/19 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/20 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/21 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/22 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     \ngi1/0/24 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \nte1/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \nte1/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \ngi2/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     \ngi2/0/2  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/3  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/4  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/5  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/6  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/7  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/8  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/9  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/10 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/11 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/12 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/13 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/14 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/15 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/17 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/18 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/19 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/20 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/21 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/22 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/24 1G-Copper      --      --     --     --  Down           --     --    \nte2/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \nte2/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \n\n                                          Flow    Link        \nCh       Type    Duplex  Speed  Neg      control  State       \n-------- ------- ------  -----  -------- -------  ----------- \nPo1      10G     Full    10000  Enabled  Off      Up          \nPo2      10G     Full    10000  Enabled  Off      Up          \nPo3      1G      Full    1000   Enabled  Off      Up          \nPo4         --     --      --      --       --    Not Present \nPo5         --     --      --      --       --    Not Present \nPo6         --     --      --      --       --    Not Present \nPo7         --     --      --      --       --    Not Present \nPo8         --     --      --      --       --    Not Present \nciscoS1#'
>>> 
>>> net_connect.disconnect()
>>> 

Debug result
test.log

@ktbyers
Copy link
Owner

ktbyers commented Aug 8, 2024

@iniagolov Did that all work properly from an end-user perspective?

@iniagolov
Copy link
Author

>>> net_connect.send_command("show interface status")
'\n                                             Flow Link          Back   Mdix\nPort     Type         Duplex  Speed Neg      ctrl State       Pressure Mode\n-------- ------------ ------  ----- -------- ---- ----------- -------- -------\ngi1/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/2  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/3  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/4  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/5  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/6  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/7  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/8  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/9  1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/10 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/11 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/12 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/13 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/14 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/15 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi1/0/17 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/18 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/19 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/20 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/21 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/22 1G-Copper      --      --     --     --  Down           --     --    \ngi1/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     \ngi1/0/24 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \nte1/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \nte1/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \ngi2/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     \ngi2/0/2  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/3  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/4  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/5  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/6  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/7  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/8  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/9  1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/10 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/11 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/12 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/13 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/14 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/15 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/17 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/18 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/19 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/20 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/21 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/22 1G-Copper      --      --     --     --  Down           --     --    \ngi2/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    \ngi2/0/24 1G-Copper      --      --     --     --  Down           --     --    \nte2/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \nte2/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    \n\n                                          Flow    Link        \nCh       Type    Duplex  Speed  Neg      control  State       \n-------- ------- ------  -----  -------- -------  ----------- \nPo1      10G     Full    10000  Enabled  Off      Up          \nPo2      10G     Full    10000  Enabled  Off      Up          \nPo3      1G      Full    1000   Enabled  Off      Up          \nPo4         --     --      --      --       --    Not Present \nPo5         --     --      --      --       --    Not Present \nPo6         --     --      --      --       --    Not Present \nPo7         --     --      --      --       --    Not Present \nPo8         --     --      --      --       --    Not Present \nciscoS1#'
>>> 

work

but this not work!

>>> net_connect.send_command("show interface status", use_textfsm=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator
    return_val = func(self, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/utilities.py", line 596, in wrapper_decorator
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 1834, in send_command
    return_val = structured_data_converter(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/utilities.py", line 560, in structured_data_converter
    structured_output_tfsm = get_structured_data_textfsm(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/utilities.py", line 380, in get_structured_data_textfsm
    output = _textfsm_parse(textfsm_obj, raw_output, attrs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/utilities.py", line 344, in _textfsm_parse
    tfsm_parse(raw_output, attrs)
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/textfsm/clitable.py", line 282, in ParseCmd
    self.table = self._ParseCmdItem(self.raw, template_file=template_files[0])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/textfsm/clitable.py", line 315, in _ParseCmdItem
    for record in fsm.ParseText(cmd_input):
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/textfsm/parser.py", line 895, in ParseText
    self._CheckLine(line)
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/textfsm/parser.py", line 944, in _CheckLine
    if self._Operations(rule, line):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/textfsm/parser.py", line 1024, in _Operations
    raise TextFSMError('State Error raised. Rule Line: %s. Input Line: %s'
textfsm.parser.TextFSMError: State Error raised. Rule Line: 17. Input Line:                                              Flow Link          Back   Mdix
>>> 

Debug

DEBUG:netmiko:read_channel: 08-Aug-2024 23:11:35 %COPY-I-FILECPY: Files Copy - source URL running-config destination URL flash://system/configuration/startup-config
08-Aug-2024 23:11:40 %COPY-N-TRAP: The copy operation was completed successfully

DEBUG:netmiko:Clear buffer detects data in the channel
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:write_channel: b'\n'
DEBUG:netmiko:read_channel: 


ciscoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:[find_prompt()]: prompt is ciscoS1#
DEBUG:netmiko:write_channel: b'show interface status\n'
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 


ciscoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 


ciscoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 


ciscoS1#
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: show inter
DEBUG:netmiko:read_channel: face status
DEBUG:netmiko:Pattern found: (show\ interface\ status) 


ciscoS1#


ciscoS1#


ciscoS1#show interface status
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 

                                             Flow Link          Back   Mdix
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
Port     Type         Duplex  Speed Neg      ctrl State       Pressure Mode
-------- ------------ ------  ----- -------- ---- ----------- -------- -------
gi1/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
gi1/0/2  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/3  1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: gi1/0/4  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/5  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/6  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/7  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/8  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/9  1G-Copper      --      --     --     --  Down           --     --    
gi1/0/10 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/11 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/12 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/13 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
DEBUG:netmiko:read_channel: 
gi1/0/14 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
DEBUG:netmiko:read_channel: 
gi1/0/15 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
DEBUG:netmiko:read_channel: 
gi1/0/17 1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: gi1/0/18 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/19 1G-Copper      --      --     --     --  Down           --     --    
DEBUG:netmiko:read_channel: 
gi1/0/20 1G-Copper      --      --     --     --  Down           --     --    
gi1/0/21 1G-Copper      --      --     --     --  Down           --     --    
DEBUG:netmiko:read_channel: 
gi1/0/22 1G-Copper      --      --     --     --  Down           --     --    
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
gi1/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     
gi1/0/24 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
te1/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    

DEBUG:netmiko:read_channel: te1/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    
gi2/0/1  1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     

DEBUG:netmiko:read_channel: gi2/0/2  1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: gi2/0/3  1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: gi2/0/4  1G-Copper      --      --     --     --  Down           --     --    
gi2/0/5  1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: gi2/0/6  1G-Copper      --      --     --     --  Down           --     --    
gi2/0/7  1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: gi2/0/8  1G-Copper      --      --     --     --  Down           --     --    
gi2/0/9  1G-Copper      --      --     --     --  Down           --     --    
gi2/0/10 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/11 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/12 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
gi2/0/13 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/14 1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: gi2/0/15 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/16 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
gi2/0/17 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/18 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
DEBUG:netmiko:read_channel: 
gi2/0/19 1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: gi2/0/20 1G-Copper      --      --     --     --  Down           --     --    
gi2/0/21 1G-Copper      --      --     --     --  Down           --     --    
DEBUG:netmiko:read_channel: 
gi2/0/22 1G-Copper      --      --     --     --  Down           --     --    
DEBUG:netmiko:read_channel: 
gi2/0/23 1G-Copper    Full    1000  Enabled  Off  Up          Disabled Off    
DEBUG:netmiko:read_channel: 
gi2/0/24 1G-Copper      --      --     --     --  Down           --     --    

DEBUG:netmiko:read_channel: te2/0/1  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    

DEBUG:netmiko:read_channel: te2/0/2  10G-Fiber    Full    10000 Disabled Off  Up          Disabled Off    

DEBUG:netmiko:read_channel: 
                                          Flow    Link        
Ch       Type    Duplex  Speed  Neg      control  State       
-------- ------- ------  -----  -------- -------  ----------- 
DEBUG:netmiko:read_channel: 

DEBUG:netmiko:read_channel: Po1      10G     Full    10000  Enabled  Off      Up          
DEBUG:netmiko:read_channel: 
Po2      10G     Full    10000  Enabled  Off      Up          
DEBUG:netmiko:read_channel: 
Po3      1G      Full    1000   Enabled  Off      Up          
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
Po4         --     --      --      --       --    Not Present 
Po5         --     --      --      --       --    Not Present 
Po6         --     --      --      --       --    Not Present 
Po7         --     --      --      --       --    Not Present 
Po8         --     --      --      --       --    Not Present 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
DEBUG:netmiko:read_channel: 
ciscoS1#

@iniagolov
Copy link
Author

iniagolov commented Aug 8, 2024

That doesn't work either

from netmiko import ConnectHandler
import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("netmiko")
net_connect = ConnectHandler(host="192.168.10.1", username="networkmanager", password="N@Man390erp", device_type="cisco_ios", secret="", port=22, )
net_connect.send_command("terminal datadump", expect_string=r"#")
net_connect.ansi_escape_codes = True

net_connect.send_config_set('int gi1/0/3,no shutdown')

net_connect.disconnect()

Result

>>> net_connect.send_config_set('int gi1/0/3,no shutdown')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator
    return_val = func(self, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 2289, in send_config_set
    output += self.config_mode()
              ^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/cisco_base_connection.py", line 53, in config_mode
    return super().config_mode(
           ^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 2124, in config_mode
    output += self.read_until_prompt(read_entire_line=True)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 839, in read_until_prompt
    return self.read_until_pattern(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/networkmanager.tss.bg/.venv/lib/python3.11/site-packages/netmiko/base_connection.py", line 748, in read_until_pattern
    raise ReadTimeout(msg)
netmiko.exceptions.ReadTimeout: 

Pattern not detected: '\x1b\\[KciscoS1.*' 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.

>>> 

Debug
test.log

@ktbyers
Copy link
Owner

ktbyers commented Aug 8, 2024

TextFSM likely won't wors as Catalyst 1300 is not really IOS so parsing will fail.

@ktbyers
Copy link
Owner

ktbyers commented Aug 8, 2024

This is not valid syntactically:

 net_connect.send_config_set('int gi1/0/3,no shutdown')

You need to provide a list of commands i.e.

cmds = ['int gi1/0/3', 'no shutdown']
net_connect.send_config_set(cmds)

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

No branches or pull requests

2 participants