/ / Python Exscript - JunOS - python, cisco, juniper-network-connect, exscript

Python Exscript - JunOS - python, cisco, juniper-network-connect, exscript

Estoy intentando ejecutar un script para mostrar todos losConfigúrelos y escríbalos en archivos para enrutadores Juniper y CISCO. Hasta ahora, el script CISCO está funcionando como debería, pero la cosa es con el enrutador Juniper.

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()

Después de obtener la lista de dispositivos para consultar, ejecuto esto pero se atasca como si hubiera un límite de búfer ...

Si intento hacer un comando diferente:
("show configuration | display set | match destination ")
- Obtengo la salida escrita en un archivo o pantalla.

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

=========== ==== Pregunta: ¿Cómo puedo hacer que el script CORRE Y PROPORCIONE LA SALIDA DEL comando? show configuration | display set La segunda foto muestra el error que recibo, pero si cambio el comando a: show configuration | display set | match description Recibo la información solicitada. ¿Me falta agregar algo en el módulo para que exscript / python evite el tiempo de espera?

Respuestas

1 para la respuesta № 1

Por defecto, JunOS pagina una salida larga devuelta por cualquier comando. Lo que probablemente ocurra es que el dispositivo Juniper al que se está conectando está paginando la salida del show configuration | display set comando, y Exscript está agotando el tiempo de espera porque el dispositivo está esperando la entrada del usuario para continuar la paginación de la salida del comando, en lugar de devolver un aviso que Exscript reconoce.

Yo haría la siguiente modificación:

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

Esto deshabilitará la paginación de salida para esecomando particular, y debe volver inmediatamente al indicador y permitir que Exscript le devuelva la salida. Por si acaso, también agrego un retorno de carro a mis comandos, es decir:

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

Pero la utilidad de hacer lo anterior es discutible, como si recordara correctamente el execute() El método debería estar haciendo esto por ti de todos modos.


0 para la respuesta № 2

Para manejar dispositivos Junos usando python, le recomendaría que use 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 para la respuesta № 3

Yo uso este script usando PyEZ con JSON para usar múltiples direcciones 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()

el archivo JSON se ve como:

   {
"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"
]
}