/ / Python Exscript - JunOS - питън, cisco, juniper-network-connect, exscript

Python Exscript - JunOS - питън, сиско, хвойна-мрежа-свързване, exscript

Опитвам се да тичам скрипт, за да покажа всичкитеда ги конфигурирате и да ги записвате на файлове за маршрутизаторите на хвойна и CISCO. Досега скриптът CISCO работи така, както би трябвало, но това е с руна от хвойна.

for ii in JUNIPER:
print ii
cmd2 = "show configuration | display set"
conn.connect(ii)
conn.login(account1)
conn.execute(cmd2)
print conn.response
#filerouter = open(ii, "w")
#filerouter.write(conn.response)
#filerouter.close()

След като получих списъка на устройствата за заявка, изпълнявам това, но се забива, сякаш има ограничение на буфера ... -

Ако се опитам да направя различна команда:
("show configuration | display set | match destination ")
- Изходът е написан на файл или екран.

C:Python27>python.exe C:UsersuserrrDownloadsshrun.py
"clear" is not recognized as an internal or external command,
operable program or batch file.
Generating configs for ROUTER:  R1.test.site
Generating connect for ROUTER:  R2.test.site
==============
===========
routername
Traceback (most recent call last):
File "C:UsersuserrrDownloadsshrun.py", line 40, in <module>
conn.execute(cmd2)
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsProtocol.py", line 900, in execute
return self.expect_prompt()
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsProtocol.py", line 999, in expect_prompt
result = self.expect(self.get_prompt())
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsProtocol.py", line 980, in expect
result = self._expect(prompt)
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsProtocol.py", line 956, in _expect
result = self._domatch(to_regexs(prompt), True)
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsSSH2.py", line 329, in _domatch
if not self._fill_buffer():
File "C:Python27libsite-packagesexscript-2.1.440-py2.7.eggExscriptprotocolsSSH2.py", line 303, in _fill_buffer
raise TimeoutException(error)
Exscript.protocols.Exception.TimeoutException: Timeout while waiting for response from device

=========== ==== Въпрос - Как мога да получа скрипта за ИЗПЪЛНЕНИЕ И ПРЕДОСТАВЯНЕ НА ИЗХОДА на командата: show configuration | display set втората снимка показва грешката, която получавам, но ако променя командата: show configuration | display set | match description Получавам исканата информация. Липсва ли да добавя нещо в модула, така че exscript / python да се избегне timeout?

Отговори:

1 за отговор № 1

По подразбиране JunOS странизира дългия изход, върнат от всяка команда. Това, което вероятно се случва, е, че устройството на Juniper, с което се свързвате, извежда страници от изхода на show configuration | display set командата и Exscript е тайминга, защото устройството чака на входа на потребителя, за да продължи да странизира изхода на командата, вместо да връща подкана, която Exscript разпознава.

Бих направил следната промяна:

for ii in JUNIPER:
print ii
cmd2 = "show configuration | display set | no-more"
conn.connect(ii)
conn.login(account1)
conn.execute(cmd2)
print conn.response

Това ще забрани извеждането на страници за товатрябва да се върнете незабавно в подканата и да позволите на Exscript да ви върне изхода. За добрата мярка добавям и връщане към моите команди, т.е.:

cmd2 = "show configuration | display set | no-morer"

Но полезността да се прави това е спорно, сякаш си спомням правилно execute() метод трябва да се направи това за вас така или иначе.


0 за отговор № 2

За да боравите с устройства на Juno, използващи Python, бих препоръчал да използвате PyEZ - https://github.com/Juniper/py-junos-eznc

from jnpr.junos import Device
from lxml import etree

dev = Device("hostname", user="username", password="Password123")
dev.open()

cnf = dev.rpc.get_config()    # similar to "show configuration | no-more" on cli
print (etree.tounicode(cnf))

dev.close()

0 за отговор № 3

Използвам този скрипт, използвайки PyEZ с JSON за използване на множество IP адреси.

from jnpr.junos import Device
from lxml import etree
import json


config_file = open("config.json")
config = json.load(config_file)
config_file.close()


for host in config["ip"]:

dev = Device(host=host, user=config["username"],
password=config["password"], port=22)
dev.open()
data = dev.rpc.get_config(options={"format":"set"})
file_name = dev.facts["fqdn"]
print(etree.tostring(data))
dev.close()

f = open(file_name + ".txt", "w")
f.write(etree.tostring(data))
f.close()

файлът JSON изглежда така:

   {
"username": "user",
"password": "password",
"ip": [
"10.255.6.100",
"10.255.6.101",
"10.255.6.102",
"10.255.6.103",
"10.255.6.104"
]
}