Використання python бібліотеки Exscript для роботи з обладнанням Cisco і Huawei по SSH

В роботі Python додатки постало завдання отримувати дані з мережевого устаткування і проводити його налаштування віддалено, по SSH. Можна скористатися Paramiko, а можна не вигадувати велосипед і використовувати засновану на ньому бібліотеку Exscript. Під катом — приклади коду для підключення та отримання інформації з команд. Через відсутність документації до Exscript цей матеріал може кому-небудь здорово стати в нагоді.



Для початку імпортуємо бібліотеку (якщо немає в системі — скачати можна на гіті)

from Exscript import Account
from Exscript.protocols import SSH2


Для Cisco, наприклад, попингуем Гугл, але ніщо не заважає використовувати команди для конфігурування:

acc = Account('USERNAMESSHAAA', 'PASS')
con = SSH2()
con.connect('ROUTER_IP')
con.login(acc)
con.execute('terminal length 0')
con.execute('ping vrf INTERNET 8.8.8.8')
con.send('exit')
output = con.response


У Output буде:
ping vrf INTERNET 8.8.8.8

Wed May 11 19:13:25.551 FET
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:
!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/20/21 ms
RP/2/RSP2/CPU1:Msk-1-sr9000#


Саме на Huawei виникла задача, з якою довго боровся — небажання Exscript чекати виконання операції, що вимагає часу і відправки підтвердження. Наприклад, при діагностиці пар в лінії потрібно було підтвердити переривання сервісу for a while натисканням на y і підтвердженням за Enter, а потім почекати кілька секунд, поки завершиться тест. На цьому Exscript вішалася, методом проб і помилок вивів рішення.

Приклад роботи в консолі при ручному підключенні до комутатора для виконання завдання:

sys
Enter system view, return user view with Ctrl+Z.
[SW]int g0/0/5
[SW-GigabitEthernet0/0/5]v
Warning: The command will stop service for a while, continue?[Y/N]:y
Pair A length: 56meter(s)
Pair B length: 56meter(s)
Pair C length: 56meter(s)
Pair D length: 56meter(s)
Pair A state: Open
Pair B state: Open
Pair C state: Open
Pair D state: Open
[SW-GigabitEthernet0/0/5]

А ось так можна зробити в Exscript, обмежуючи випадковий тест на аплинках через вирахування в Description тригера заборони To_Smth_Important_Device:

acc = Account('USERNAMESSHAAA', 'PASS') 
con = SSH2()
con.connect('ROUTER_IP') 
con.login(acc) 
con.execute('screen-length 0 temporary') 
con.execute('sys')
con.execute('interface GigabitEthernet0/0/2')
con.execute('disp th')
upck = "
upck = con.response
if 'To' not in upck:
con.set_prompt(r Y')
con.execute('vi')
con.set_prompt('Pair D state.{0,20}')
con.execute('Y')
output = con.response
else:
output = 'UPLINK DETECTED! TEST ON UPLINKS RESTRICTED!'
con.send('quit\r')
con.send('quit\r')
con.send('quit\r')


У Output:

/N]:Y
Info: This operation may take a few seconds. Please wait for a moment........done.
Pair A length: 56meter(s)
Pair B length: 56meter(s)
Pair C length: 56meter(s)
Pair D length: 56meter(s)
Pair A state: Open
Pair B state: Open
Pair C state: Open
Pair D state: Open


Парсити висновок можна на свій розсуд.

Спасибі за увагу!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.