Опитвам се да тичам скрипт, за да покажа всичкитеда ги конфигурирате и да ги записвате на файлове за маршрутизаторите на хвойна и 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"
]
}