From 2d2362815bbc3a50b0342f38d14c5ec651bedee0 Mon Sep 17 00:00:00 2001 From: Ronan Fourneuve Date: Thu, 27 Nov 2025 14:57:15 +0100 Subject: [PATCH] Ok Fini --- fastprod_backend/Pipfile | 1 + fastprod_backend/Pipfile.lock | 11 +- ...-CPE-BAT-A_2025-11-27 13:41:22.690142.conf | 168 +++++++++++++ fastprod_backend/fastprod/api.py | 13 +- .../ESW1-CPE-BAT-A_20251127142806.conf | 236 ++++++++++++++++++ .../ESW1-CPE-BAT-A_20251127143602.conf | 236 ++++++++++++++++++ .../R1-CPE-BAT-A_20251127144037.conf | 168 +++++++++++++ fastprod_backend/nornir.log | 197 +++++++++++++++ 8 files changed, 1024 insertions(+), 6 deletions(-) create mode 100644 fastprod_backend/R1-CPE-BAT-A_2025-11-27 13:41:22.690142.conf create mode 100644 fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127142806.conf create mode 100644 fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127143602.conf create mode 100644 fastprod_backend/fastprod/snapshots/R1-CPE-BAT-A_20251127144037.conf diff --git a/fastprod_backend/Pipfile b/fastprod_backend/Pipfile index 3950a5f..46fb730 100644 --- a/fastprod_backend/Pipfile +++ b/fastprod_backend/Pipfile @@ -10,6 +10,7 @@ pyyaml = "*" nornir-napalm = "*" nornir-netmiko = "*" nornir-utils = "*" +flask-cors = "*" [dev-packages] diff --git a/fastprod_backend/Pipfile.lock b/fastprod_backend/Pipfile.lock index eef2c54..6153f78 100644 --- a/fastprod_backend/Pipfile.lock +++ b/fastprod_backend/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "4d947c85d832e63deaf3652f8245d778c586afc05cd61da7299f47e32e965e60" + "sha256": "8a160178df2ab018e137bb2e0047666e852a705a22b9a93b793b5d3aa4c43b65" }, "pipfile-spec": 6, "requires": { @@ -395,6 +395,15 @@ "markers": "python_version >= '3.9'", "version": "==3.1.2" }, + "flask-cors": { + "hashes": [ + "sha256:c7b2cbfb1a31aa0d2e5341eea03a6805349f7a61647daee1a15c46bbe981494c", + "sha256:d81bcb31f07b0985be7f48406247e9243aced229b7747219160a0559edd678db" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", + "version": "==6.0.1" + }, "idna": { "hashes": [ "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", diff --git a/fastprod_backend/R1-CPE-BAT-A_2025-11-27 13:41:22.690142.conf b/fastprod_backend/R1-CPE-BAT-A_2025-11-27 13:41:22.690142.conf new file mode 100644 index 0000000..7a37fbe --- /dev/null +++ b/fastprod_backend/R1-CPE-BAT-A_2025-11-27 13:41:22.690142.conf @@ -0,0 +1,168 @@ +! +upgrade fpd auto +version 12.4 +service timestamps debug datetime msec +service timestamps log datetime msec +no service password-encryption +! +hostname R1-CPE-BAT-A +! +boot-start-marker +boot-end-marker +! +logging message-counter syslog +! +no aaa new-model +ip source-route +no ip icmp rate-limit unreachable +ip cef +! +! +! +! +no ip domain lookup +ip domain name r1.cpe.local +no ipv6 cef +! +multilink bundle-name authenticated +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +file prompt quiet +username cisco privilege 15 password 0 cisco +archive + log config + hidekeys +! +! +! +! +! +ip tcp synwait-time 5 +ip ssh version 2 +ip scp server enable +! +! +! +! +interface Loopback1 + description Loopback pour R1-CPE-BAT-A + ip address 1.1.1.1 255.255.255.255 +! +interface Loopback2 + description Loopback2 pour R1-CPE-BAT-A + ip address 1.1.1.2 255.255.255.255 +! +interface Loopback10 + description created from config file uploaded from postman + ip address 10.10.10.10 255.255.255.255 +! +interface FastEthernet0/0 + ip address 172.16.100.62 255.255.255.192 + duplex half +! +interface Serial1/0 + no ip address + shutdown + serial restart-delay 0 +! +interface Serial1/1 + ip address 10.1.1.1 255.255.255.252 + shutdown + serial restart-delay 0 +! +interface Serial1/2 + no ip address + shutdown + serial restart-delay 0 +! +interface Serial1/3 + no ip address + shutdown + serial restart-delay 0 +! +interface GigabitEthernet2/0 + no ip address + negotiation auto +! +interface GigabitEthernet2/0.10 + description "Gateway for teacher vlan" + encapsulation dot1Q 10 + ip address 172.16.10.253 255.255.255.0 + vrrp 10 ip 172.16.10.252 +! +interface GigabitEthernet2/0.20 + description "Gateway for student vlan" + encapsulation dot1Q 20 + ip address 172.16.20.253 255.255.255.0 + vrrp 20 ip 172.16.20.252 +! +interface GigabitEthernet2/0.99 + encapsulation dot1Q 99 + ip address 172.16.100.125 255.255.255.192 + vrrp 99 ip 172.16.100.124 +! +router ospf 1 + router-id 1.1.1.1 + log-adjacency-changes + passive-interface FastEthernet0/0 + passive-interface GigabitEthernet2/0.99 + network 10.1.1.0 0.0.0.3 area 0 + network 172.16.10.0 0.0.0.255 area 0 + network 172.16.20.0 0.0.0.255 area 0 + network 172.16.100.0 0.0.0.63 area 0 + network 172.16.100.64 0.0.0.63 area 0 +! +ip forward-protocol nd +no ip http server +no ip http secure-server +! +! +! +no cdp log mismatch duplex +! +! +! +! +! +! +control-plane +! +! +! +! +! +! +! +gatekeeper + shutdown +! +! +line con 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous + stopbits 1 +line aux 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous + stopbits 1 +line vty 0 4 + login local + transport input ssh +! +end \ No newline at end of file diff --git a/fastprod_backend/fastprod/api.py b/fastprod_backend/fastprod/api.py index de6f75f..731a524 100644 --- a/fastprod_backend/fastprod/api.py +++ b/fastprod_backend/fastprod/api.py @@ -1,10 +1,13 @@ from flask import Flask,jsonify,request,abort, make_response,send_file from werkzeug.exceptions import HTTPException from nornir import InitNornir +from flask_cors import CORS + import os from werkzeug.utils import secure_filename import json + ALLOWED_EXTENSIONS = {'conf'} UPLOAD_FOLDER = 'fastprod/upload_files/' @@ -20,6 +23,8 @@ def allowed_file(filename): app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER +CORS(app) + from services.devices import ( get_inventory, add_device,get_device_by_name,delete_device,get_device_interfaces,get_device_interfaces_ip,get_device_technical_info) from services.config import (get_config_by_device,run_config_from_file_by_device) @@ -75,7 +80,7 @@ def get_technical_info(device_name): if request.method == 'GET': device = get_device_by_name(device_name) technical_info = get_device_technical_info(device) - return jsonify(interfaces_ip=technical_info) + return jsonify(facts=technical_info) @app.route("/devices//config", methods=['GET','POST']) def get_config(device_name): @@ -109,15 +114,13 @@ def snapshot(device_name): data = get_snapshots_by_device(device) return jsonify({ "result": True, - "data": data + "snapshots": data }) if request.method == 'POST': snapshot_path = create_snapshot_by_device(device) return jsonify({ "result": True, - "data": { - "snapshot_path": snapshot_path - } + "snapshots": snapshot_path }) @app.route("/snapshots/", methods=['GET']) diff --git a/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127142806.conf b/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127142806.conf new file mode 100644 index 0000000..cd3eccc --- /dev/null +++ b/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127142806.conf @@ -0,0 +1,236 @@ +! +version 12.4 +service timestamps debug datetime msec +service timestamps log datetime msec +no service password-encryption +no service dhcp +! +hostname ESW1-CPE-BAT-A +! +boot-start-marker +boot-end-marker +! +! +no aaa new-model +memory-size iomem 5 +no ip routing +no ip icmp rate-limit unreachable +no ip cef +! +! +! +! +no ip domain lookup +ip domain name esw1.local +! +multilink bundle-name authenticated +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +macro name add_vlan +end +vlan database +vlan $v +exit +@ +macro name del_vlan +end +vlan database +no vlan $v +exit +@ +! +vtp file nvram:vlan.dat +username cisco privilege 15 password 0 cisco +archive + log config + hidekeys +! +! +! +! +ip tcp synwait-time 5 +ip ssh version 2 +! +! +! +! +interface Loopback1 + no ip address +! +interface FastEthernet0/0 + description *** Unused for Layer2 EtherSwitch *** + no ip address + no ip route-cache + duplex auto + speed auto +! +interface FastEthernet0/1 + description *** Unused for Layer2 EtherSwitch *** + no ip address + no ip route-cache + shutdown + duplex auto + speed auto +! +interface FastEthernet1/0 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/1 + description "port vlan teacher" + switchport access vlan 10 + duplex full + speed 100 +! +interface FastEthernet1/2 + description "port vlan student" + switchport access vlan 20 + duplex full + speed 100 +! +interface FastEthernet1/3 + duplex full + speed 100 +! +interface FastEthernet1/4 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/5 + duplex full + speed 100 +! +interface FastEthernet1/6 + duplex full + speed 100 +! +interface FastEthernet1/7 + duplex full + speed 100 +! +interface FastEthernet1/8 + duplex full + speed 100 +! +interface FastEthernet1/9 + duplex full + speed 100 +! +interface FastEthernet1/10 + duplex full + speed 100 +! +interface FastEthernet1/11 + duplex full + speed 100 +! +interface FastEthernet1/12 + duplex full + speed 100 +! +interface FastEthernet1/13 + duplex full + speed 100 +! +interface FastEthernet1/14 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/15 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet2/0 + no ip address + no ip route-cache + shutdown + duplex auto + speed auto +! +interface Vlan1 + no ip address + no ip route-cache +! +interface Vlan99 + ip address 172.16.100.123 255.255.255.192 +! +ip forward-protocol nd +! +! +no ip http server +no ip http secure-server +! +no cdp log mismatch duplex +! +! +! +! +! +! +control-plane +! +! +! +! +! +! +! +! +! +banner exec ^C + +*************************************************************** +This is a normal Router with a Switch module inside (NM-16ESW) +It has been pre-configured with hard-coded speed and duplex + +To create vlans use the command "vlan database" in exec mode +After creating all desired vlans use "exit" to apply the config + +To view existing vlans use the command "show vlan-switch brief" + +Alias(exec) : vl - "show vlan-switch brief" command +Alias(configure): va X - macro to add vlan X +Alias(configure): vd X - macro to delete vlan X +*************************************************************** + +^C +alias configure va macro global trace add_vlan $v +alias configure vd macro global trace del_vlan $v +alias exec vl show vlan-switch brief +! +line con 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous +line aux 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous +line vty 0 4 + login local + transport input ssh +! +! +end \ No newline at end of file diff --git a/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127143602.conf b/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127143602.conf new file mode 100644 index 0000000..cd3eccc --- /dev/null +++ b/fastprod_backend/fastprod/snapshots/ESW1-CPE-BAT-A_20251127143602.conf @@ -0,0 +1,236 @@ +! +version 12.4 +service timestamps debug datetime msec +service timestamps log datetime msec +no service password-encryption +no service dhcp +! +hostname ESW1-CPE-BAT-A +! +boot-start-marker +boot-end-marker +! +! +no aaa new-model +memory-size iomem 5 +no ip routing +no ip icmp rate-limit unreachable +no ip cef +! +! +! +! +no ip domain lookup +ip domain name esw1.local +! +multilink bundle-name authenticated +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +macro name add_vlan +end +vlan database +vlan $v +exit +@ +macro name del_vlan +end +vlan database +no vlan $v +exit +@ +! +vtp file nvram:vlan.dat +username cisco privilege 15 password 0 cisco +archive + log config + hidekeys +! +! +! +! +ip tcp synwait-time 5 +ip ssh version 2 +! +! +! +! +interface Loopback1 + no ip address +! +interface FastEthernet0/0 + description *** Unused for Layer2 EtherSwitch *** + no ip address + no ip route-cache + duplex auto + speed auto +! +interface FastEthernet0/1 + description *** Unused for Layer2 EtherSwitch *** + no ip address + no ip route-cache + shutdown + duplex auto + speed auto +! +interface FastEthernet1/0 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/1 + description "port vlan teacher" + switchport access vlan 10 + duplex full + speed 100 +! +interface FastEthernet1/2 + description "port vlan student" + switchport access vlan 20 + duplex full + speed 100 +! +interface FastEthernet1/3 + duplex full + speed 100 +! +interface FastEthernet1/4 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/5 + duplex full + speed 100 +! +interface FastEthernet1/6 + duplex full + speed 100 +! +interface FastEthernet1/7 + duplex full + speed 100 +! +interface FastEthernet1/8 + duplex full + speed 100 +! +interface FastEthernet1/9 + duplex full + speed 100 +! +interface FastEthernet1/10 + duplex full + speed 100 +! +interface FastEthernet1/11 + duplex full + speed 100 +! +interface FastEthernet1/12 + duplex full + speed 100 +! +interface FastEthernet1/13 + duplex full + speed 100 +! +interface FastEthernet1/14 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet1/15 + switchport mode trunk + duplex full + speed 100 +! +interface FastEthernet2/0 + no ip address + no ip route-cache + shutdown + duplex auto + speed auto +! +interface Vlan1 + no ip address + no ip route-cache +! +interface Vlan99 + ip address 172.16.100.123 255.255.255.192 +! +ip forward-protocol nd +! +! +no ip http server +no ip http secure-server +! +no cdp log mismatch duplex +! +! +! +! +! +! +control-plane +! +! +! +! +! +! +! +! +! +banner exec ^C + +*************************************************************** +This is a normal Router with a Switch module inside (NM-16ESW) +It has been pre-configured with hard-coded speed and duplex + +To create vlans use the command "vlan database" in exec mode +After creating all desired vlans use "exit" to apply the config + +To view existing vlans use the command "show vlan-switch brief" + +Alias(exec) : vl - "show vlan-switch brief" command +Alias(configure): va X - macro to add vlan X +Alias(configure): vd X - macro to delete vlan X +*************************************************************** + +^C +alias configure va macro global trace add_vlan $v +alias configure vd macro global trace del_vlan $v +alias exec vl show vlan-switch brief +! +line con 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous +line aux 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous +line vty 0 4 + login local + transport input ssh +! +! +end \ No newline at end of file diff --git a/fastprod_backend/fastprod/snapshots/R1-CPE-BAT-A_20251127144037.conf b/fastprod_backend/fastprod/snapshots/R1-CPE-BAT-A_20251127144037.conf new file mode 100644 index 0000000..7a37fbe --- /dev/null +++ b/fastprod_backend/fastprod/snapshots/R1-CPE-BAT-A_20251127144037.conf @@ -0,0 +1,168 @@ +! +upgrade fpd auto +version 12.4 +service timestamps debug datetime msec +service timestamps log datetime msec +no service password-encryption +! +hostname R1-CPE-BAT-A +! +boot-start-marker +boot-end-marker +! +logging message-counter syslog +! +no aaa new-model +ip source-route +no ip icmp rate-limit unreachable +ip cef +! +! +! +! +no ip domain lookup +ip domain name r1.cpe.local +no ipv6 cef +! +multilink bundle-name authenticated +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +file prompt quiet +username cisco privilege 15 password 0 cisco +archive + log config + hidekeys +! +! +! +! +! +ip tcp synwait-time 5 +ip ssh version 2 +ip scp server enable +! +! +! +! +interface Loopback1 + description Loopback pour R1-CPE-BAT-A + ip address 1.1.1.1 255.255.255.255 +! +interface Loopback2 + description Loopback2 pour R1-CPE-BAT-A + ip address 1.1.1.2 255.255.255.255 +! +interface Loopback10 + description created from config file uploaded from postman + ip address 10.10.10.10 255.255.255.255 +! +interface FastEthernet0/0 + ip address 172.16.100.62 255.255.255.192 + duplex half +! +interface Serial1/0 + no ip address + shutdown + serial restart-delay 0 +! +interface Serial1/1 + ip address 10.1.1.1 255.255.255.252 + shutdown + serial restart-delay 0 +! +interface Serial1/2 + no ip address + shutdown + serial restart-delay 0 +! +interface Serial1/3 + no ip address + shutdown + serial restart-delay 0 +! +interface GigabitEthernet2/0 + no ip address + negotiation auto +! +interface GigabitEthernet2/0.10 + description "Gateway for teacher vlan" + encapsulation dot1Q 10 + ip address 172.16.10.253 255.255.255.0 + vrrp 10 ip 172.16.10.252 +! +interface GigabitEthernet2/0.20 + description "Gateway for student vlan" + encapsulation dot1Q 20 + ip address 172.16.20.253 255.255.255.0 + vrrp 20 ip 172.16.20.252 +! +interface GigabitEthernet2/0.99 + encapsulation dot1Q 99 + ip address 172.16.100.125 255.255.255.192 + vrrp 99 ip 172.16.100.124 +! +router ospf 1 + router-id 1.1.1.1 + log-adjacency-changes + passive-interface FastEthernet0/0 + passive-interface GigabitEthernet2/0.99 + network 10.1.1.0 0.0.0.3 area 0 + network 172.16.10.0 0.0.0.255 area 0 + network 172.16.20.0 0.0.0.255 area 0 + network 172.16.100.0 0.0.0.63 area 0 + network 172.16.100.64 0.0.0.63 area 0 +! +ip forward-protocol nd +no ip http server +no ip http secure-server +! +! +! +no cdp log mismatch duplex +! +! +! +! +! +! +control-plane +! +! +! +! +! +! +! +gatekeeper + shutdown +! +! +line con 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous + stopbits 1 +line aux 0 + exec-timeout 0 0 + privilege level 15 + logging synchronous + stopbits 1 +line vty 0 4 + login local + transport input ssh +! +end \ No newline at end of file diff --git a/fastprod_backend/nornir.log b/fastprod_backend/nornir.log index 536db61..1cba1b8 100644 --- a/fastprod_backend/nornir.log +++ b/fastprod_backend/nornir.log @@ -68,3 +68,200 @@ TypeError: expected string or bytes-like object, got 'list' 2025-11-27 13:53:07,676 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts 2025-11-27 13:53:27,844 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts 2025-11-27 13:55:22,325 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts +2025-11-27 14:27:45,418 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:27:45,421 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:27:45,425 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:27:58,534 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:28:03,171 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts +2025-11-27 14:28:26,673 - nornir.core - INFO - run() - Running task 'napalm_cli' with args {'commands': ['show ip int br']} on 1 hosts +2025-11-27 14:29:34,616 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:31:40,826 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:31:47,954 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:34:06,500 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:34:06,510 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:34:06,526 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:34:09,203 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts +2025-11-27 14:34:19,454 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:34:20,018 - nornir.core.task - ERROR - start() - Host 'ESW1-CPE-BAT-A': task 'napalm_get' failed with traceback: +Traceback (most recent call last): + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir/core/task.py", line 98, in start + r = self.task(self, **self.params) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir_napalm/plugins/tasks/napalm_get.py", line 44, in napalm_get + result[g] = method(**options) + ^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 1215, in get_interfaces + output = self._send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 208, in _send_command + output = self.device.send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator + return_val = func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/utilities.py", line 667, in wrapper_decorator + return func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1791, in send_command + new_data = self.command_echo_read(cmd=cmd, read_timeout=10) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1494, in command_echo_read + new_data = self.read_until_pattern( + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 755, in read_until_pattern + raise ReadTimeout(msg) +netmiko.exceptions.ReadTimeout: + +Pattern not detected: 'show\\ interfaces' 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. + + + +2025-11-27 14:34:20,648 - nornir.core.task - ERROR - start() - Host 'ESW1-CPE-BAT-A': task 'napalm_get' failed with traceback: +Traceback (most recent call last): + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir/core/task.py", line 98, in start + r = self.task(self, **self.params) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir_napalm/plugins/tasks/napalm_get.py", line 44, in napalm_get + result[g] = method(**options) + ^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 3676, in get_config + output = self._send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 208, in _send_command + output = self.device.send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator + return_val = func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/utilities.py", line 667, in wrapper_decorator + return func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1791, in send_command + new_data = self.command_echo_read(cmd=cmd, read_timeout=10) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1494, in command_echo_read + new_data = self.read_until_pattern( + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 755, in read_until_pattern + raise ReadTimeout(msg) +netmiko.exceptions.ReadTimeout: + +Pattern not detected: 'show\\ running\\-config' 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. + + + +2025-11-27 14:34:26,321 - nornir.core - WARNING - run() - Task 'napalm_get' has not been run – 0 hosts selected +2025-11-27 14:34:29,743 - nornir.core - WARNING - run() - Task 'napalm_get' has not been run – 0 hosts selected +2025-11-27 14:35:36,177 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:35:36,181 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:35:36,182 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:35:58,683 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts +2025-11-27 14:40:22,059 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:40:22,065 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:40:22,069 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:40:30,793 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:40:30,804 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:40:30,817 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:40:36,971 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_config']} on 1 hosts +2025-11-27 14:40:43,753 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:40:43,762 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:40:43,767 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:43:35,049 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces']} on 1 hosts +2025-11-27 14:43:35,051 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_interfaces_ip']} on 1 hosts +2025-11-27 14:43:35,053 - nornir.core - INFO - run() - Running task 'napalm_get' with args {'getters': ['get_facts']} on 1 hosts +2025-11-27 14:43:45,140 - nornir.core.task - ERROR - start() - Host 'R1-CPE-BAT-A': task 'napalm_get' failed with traceback: +Traceback (most recent call last): + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir/core/task.py", line 98, in start + r = self.task(self, **self.params) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir_napalm/plugins/tasks/napalm_get.py", line 44, in napalm_get + result[g] = method(**options) + ^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 1215, in get_interfaces + output = self._send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 208, in _send_command + output = self.device.send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator + return_val = func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/utilities.py", line 667, in wrapper_decorator + return func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1791, in send_command + new_data = self.command_echo_read(cmd=cmd, read_timeout=10) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1494, in command_echo_read + new_data = self.read_until_pattern( + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 755, in read_until_pattern + raise ReadTimeout(msg) +netmiko.exceptions.ReadTimeout: + +Pattern not detected: 'show\\ interfaces' 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. + + + +2025-11-27 14:43:45,145 - nornir.core.task - ERROR - start() - Host 'R1-CPE-BAT-A': task 'napalm_get' failed with traceback: +Traceback (most recent call last): + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir/core/task.py", line 98, in start + r = self.task(self, **self.params) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/nornir_napalm/plugins/tasks/napalm_get.py", line 44, in napalm_get + result[g] = method(**options) + ^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 1316, in get_interfaces_ip + show_ip_interface = self._send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/napalm/ios/ios.py", line 208, in _send_command + output = self.device.send_command(command) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 111, in wrapper_decorator + return_val = func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/utilities.py", line 667, in wrapper_decorator + return func(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1791, in send_command + new_data = self.command_echo_read(cmd=cmd, read_timeout=10) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 1494, in command_echo_read + new_data = self.read_until_pattern( + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/cpe/.local/share/virtualenvs/fastprod_backend-xSm6n0LL/lib/python3.12/site-packages/netmiko/base_connection.py", line 755, in read_until_pattern + raise ReadTimeout(msg) +netmiko.exceptions.ReadTimeout: + +Pattern not detected: 'show\\ ip\\ interface' 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. + + +