Guardar y cargar xml de tabla Junos PyEZ hacia y desde archivos
Las tablas y vistas de Junos PyEZ le permiten extraer datos dirigidos de la salida de comandos operativos o de la base de datos de configuración seleccionada en un dispositivo Junos. Puede exportar datos de tabla como XML, lo que le permite recuperar información para uno o más dispositivos y procesarlos posteriormente. Junos PyEZ proporciona el savexml()
método para este propósito.
El savexml()
método le permite especificar una ruta de archivo de destino para los datos exportados e, opcionalmente, incluir el nombre de host del dispositivo y la marca de hora de actividad en el nombre de archivo. Puede controlar el formato de la marca de hora con el formato estándar strftime
.
Por ejemplo, suponga que desea recorrer una lista de dispositivos y recopilar datos del transceptor mediante la definición XcvrTable en el jnpr.junos.op.xcvr
módulo. El siguiente código define una lista de nombres de host del dispositivo, solicita al usuario un nombre de usuario y una contraseña, y, luego, se enlaza y hace una conexión a cada dispositivo:
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.op.xcvr import XcvrTable devlist = ['router1.example.com', 'router2.example.com'] user = raw_input('username: ') passwd = getpass('password: ') for host in devlist: sys.stdout.write('connecting to %s ... ' % host) sys.stdout.flush() dev = Device(host,user=user,password=passwd) dev.open() print('ok.') # log data dev.close()
En este punto. el programa aún no recupera datos de transceptor. La ejecución del programa da como resultado el siguiente resultado:
user1@server:~$ python3 xcvr_demo.py username: user1 password: connecting to router1.example.com ... ok. connecting to router2.example.com ... ok.
Para recopilar y registrar los datos del transceptor, asocie la tabla con cada dispositivo de destino, recupere los datos y guárdelos en un archivo mediante el savexml()
método. Puede incluir hostname=True
y timestamp=True
en la lista de savexml()
argumentos para anexar el nombre de host y la marca de hora al nombre de archivo de salida. Si recupera datos para varios dispositivos de esta manera, debe diferenciar el nombre de archivo de salida de cada dispositivo con el nombre de host, la marca de hora o ambos para evitar que los datos de un dispositivo sobrescriban los datos del dispositivo anterior en el mismo archivo.
# log data xcvrs = XcvrTable(dev).get() xcvrs.savexml(path='/var/tmp/xcvrs/xcvr.xml', hostname=True, timestamp=True)
El path
argumento asume que el directorio de destino existe en el sistema de archivos local.
Después de agregar el código adicional al bucle del dispositivo en el programa y, a continuación, ejecutar el programa, puede examinar el contenido del directorio de destino. En este ejemplo, los valores de nombre de host y marca de hora se incrustan en los nombres de archivo.
user1@server:~$ ls /var/tmp/xcvrs xcvr_router1.example.com_20131226093921.xml xcvr_router2.example.com_20131226093939.xml
Puede importar los datos XML en un momento posterior para el procesamiento posterior. Para importar los datos, asocie la tabla con el archivo XML en lugar de un dispositivo de destino. Por ejemplo:
from jnpr.junos.op.xcvr import XcvrTable xmlpath = '/var/tmp/xcvrs/xcvr_router1.example.com_20131226093921.xml' xcvrs = XcvrTable(path=xmlpath) xcvrs.get()