Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Defina las tablas operativas de Junos PyEZ para analizar la salida no estructurada

Cree tablas personalizadas que seleccionen datos de la salida del comando CLI o vty para extraer información operativa de un dispositivo Junos.

Las tablas operativas (op) de Junos PyEZ para la salida no estructurada pueden extraer datos de la salida de texto de:

  • Un comando de CLI ejecutado en un dispositivo Junos

  • Un comando vty ejecutado en un concentrador de PIC flexible (FPC) dado

Luego, los datos extraídos se convierten a JSON. Las tablas de operaciones de Junos PyEZ para salida no estructurada le permiten recuperar y analizar rápidamente la información del estado operativo del dispositivo. Las tablas son especialmente útiles cuando se necesita analizar la salida de comandos que no se puede recuperar en un formato estructurado como XML.

En este tema se tratan los distintos componentes de la tabla.

Resumen de parámetros en tablas de operaciones para analizar la salida no estructurada

Las tablas PyEZ de Junos se formatean mediante YAML. Las definiciones de la tabla de operaciones pueden incluir varios parámetros obligatorios y opcionales. La Tabla 1 resume los parámetros.

Tabla 1: Parámetros en las tablas de operaciones de Junos PyEZ para salida no estructurada

Nombre del parámetro de tabla

Parámetro de tabla

Descripción

Nombre de la tabla

–

Identificador definido por el usuario para la tabla.

Comando

command

CLI o vty comando para ejecutarlo.

Argumentos de comando

args

(Opcional) Cuando define el comando como una plantilla Jinja, args es una matriz asociativa, o diccionario, de pares clave-valor. Las entradas asignan las variables de la plantilla de comandos a los valores predeterminados utilizados cuando se representa la plantilla.

FPC objetivo

target

(Opcional) FPC en la que ejecutar un comando vty.

Elemento de la tabla

item

(Opcional) Cadena o expresión regular que define cómo dividir la salida en secciones. Estas secciones se convierten en la referencia iterable para la vista asociada.

Especifique '*' para extraer y hacer coincidir con la cadena completa en lugar de con líneas individuales.

Clave de elemento de tabla

key

(Opcional) Cadena o lista de cadenas que definen una o varias claves que identifican de forma exclusiva cada elemento de la tabla.

Teclas seleccionadas

key_items

(Opcional) Lista de una o varias claves de elemento de tabla para las que se devuelven datos.

Título de la sección

title

(Opcional) Cadena que selecciona la sección de salida que contiene los datos que se van a analizar.

Delimitador de campo

delimiter

(Opcional) Delimitador que define cómo dividir los datos en la salida del comando compuesto por pares clave-valor. Los datos extraídos se almacenan como pares clave-valor en un diccionario.

Expresión de evaluación

eval

(Opcional) Matriz asociativa, o diccionario, de uno o más pares clave-valor que asignan una clave definida por el usuario a una cadena que contiene una expresión matemática. Cuando recupere los datos, se evalúa la expresión. La clave y el valor calculado se agregan a los datos finales devueltos por la tabla y la vista.

Vista de tabla

view

(Opcional) Vista que se utiliza para extraer datos de campo de los elementos de la tabla.

Plantilla de TextFSM

use_textfsm

(Opcional) Booleano que especifica si se debe usar una plantilla TextFSM para analizar los datos.

Identificador de plataforma de plantilla de TextFSM

platform

(Opcional) Cuando se utiliza una plantilla de TextFSM, especifique la plataforma para la plantilla.

Nombre de la tabla

El nombre de la tabla es un identificador definido por el usuario para la tabla. El archivo o cadena YAML puede contener una o varias tablas. El inicio del documento YAML debe dejarse justificado. En el ejemplo siguiente se define una tabla denominada ChassisFanTable:

Comando

Una tabla operativa de Junos PyEZ para salida no estructurada extrae datos de la salida de texto de un comando CLI o vty. Debe incluir la command propiedad en la definición de tabla para especificar el comando de la CLI que se va a ejecutar en un dispositivo o el comando vty que se va a ejecutar en una FPC determinada. Puede definir el comando como una cadena simple o una plantilla Jinja.

Por ejemplo, en la tabla siguiente se ejecuta el show chassis fan comando en el dispositivo.

En la tabla siguiente, se ejecuta el show cmerror module brief comando vty en la FPC de destino.

Cuando defina el comando como una plantilla Jinja, también debe proporcionar el args parámetro. El args parámetro es un diccionario de pares clave-valor que asignan las variables de la plantilla a los valores utilizados al representar la plantilla. Para obtener información sobre cómo definir el comando como una plantilla Jinja, consulte Argumentos de comando (args).

Argumentos de comando (args)

Puede definir el comando CLI o vty para el command parámetro como una plantilla Jinja que sustituye variables por los argumentos del comando. Cuando utilice una plantilla de Jinja, también debe definir el args parámetro. El args parámetro es un diccionario de pares clave-valor que asignan los nombres de las variables de la plantilla Jinja a los valores utilizados al representar la plantilla. Puede proporcionar valores predeterminados para las variables de plantilla en la definición de tabla y también puede definir los valores en la aplicación Junos PyEZ.

Para definir valores predeterminados para las variables de plantilla, incluya el args parámetro en la definición de tabla y asigne cada variable de plantilla a su valor predeterminado. La siguiente tabla define un comando que usa una plantilla Jinja que tiene una variable, protocol. El args parámetro define el valor predeterminado de protocol. La aplicación utiliza el valor predeterminado cuando se llama al método en el get() script y no proporciona un argumento que anule ese valor predeterminado.

Además, puede definir el args argumento como un diccionario en el método de get() la tabla para:

  • Defina un valor para cualquier variable de plantilla que no tenga un valor predeterminado definido en la tabla

  • Alterar temporalmente el valor predeterminado definido en la tabla para una o varias variables de plantilla

En el siguiente ejemplo, se ejecuta el comando de la tabla anterior utilizando el protocolo "bgp" en lugar del valor predeterminado de "ospf".

FPC de destino (fpc)

Las tablas operativas de Junos PyEZ pueden ejecutar comandos vty en una FPC específica. Cuando se utiliza un comando vty, la tabla debe incluir el target parámetro para definir la FPC de destino. Puede establecer target Null y forzar al usuario a especificar la FPC de destino en la aplicación. Como alternativa, puede establecer target en una FPC predeterminada y, si lo desea, el usuario puede anular este valor en la aplicación.

En la tabla siguiente se ejecuta el show memory comando vty, pero se establece target: Null. Por lo tanto, el usuario debe especificar la FPC de destino en la aplicación Junos PyEZ:

La siguiente tabla ejecuta el show memory comando vty en FPC 1, a menos que el usuario anule este valor en la aplicación Junos PyEZ.

En la aplicación Junos PyEZ, puede definir la FPC de destino o anular la FPC predeterminada definida en la tabla. Para especificar la FPC, establezca el target argumento en el método de get() la tabla en la FPC requerida, por ejemplo:

Elemento de la tabla (elemento)

La propiedad opcional Table item es una cadena o expresión regular que define cómo dividir la salida del comando para el análisis. Si la salida tiene conjuntos de datos similares y repetitivos, puede definir item para que coincida y extraiga cada iteración de los datos. Por ejemplo, show interfaces devuelve un conjunto similar de datos para muchas interfaces. Alternativamente, puede definir item: '*' cuándo necesita extraer los datos como un solo bloque de texto.

Considere el siguiente resultado para el show devices local comando vty:

La siguiente tabla extrae cada sección de la salida que comienza con TSEC Ethernet Device Driver:. En este caso, el valor de se key: name deriva del grupo de captura en la expresión regular definida en item.

También puede definir item como un asterisco ('*') si desea hacer coincidir con toda la sección de salida en lugar de hacer coincidir cada línea. Cuando se incluye item: '*', en la mayoría de los casos, también se debe incluir el title parámetro para especificar el encabezado de la sección de salida que se va a extraer. La extracción de la salida using item: '*' es útil cuando se incluye el regex parámetro en una vista y se desea que cada expresión coincida con toda la cadena de texto. De lo contrario, las regex expresiones se combinan y se comparan con cada línea.

En la tabla siguiente se extrae el bloque de texto que se encuentra bajo el encabezado Receive: y se compara cada expresión regular con toda la cadena de texto:

Clave de elemento de tabla (clave)

La propiedad opcional key define los campos de salida que se utilizan para identificar de forma única un elemento de tabla. Puede identificar un elemento de tabla utilizando una sola clave o una lista de claves. Si la tabla y la vista devuelven datos iterativos, el key valor debe hacer referencia a una variable o nombre de campo definido en la vista.

Tenga en cuenta el siguiente show chassis fan resultado:

En la tabla siguiente se define la clave del elemento de tabla como fan-name, que se asigna al valor debajo de la Item columna de la salida.

Cuando recupera e imprime los datos en la aplicación Junos PyEZ, cada elemento del diccionario resultante utiliza el valor de este campo como clave.

También puede definir key como una lista para identificar un elemento de tabla mediante una clave compuesta. Por ejemplo:

Teclas seleccionadas (key_items)

El key parámetro define los campos de salida que identifican de forma exclusiva un elemento de tabla. Cuando se incluye el key parámetro en una tabla, se puede utilizar el parámetro opcional key_items para devolver solo datos para determinados valores clave. key_items define la clave o lista de claves de los elementos de tabla para los que se van a recuperar datos. Puede definir el key_items parámetro en la definición de tabla o en la aplicación Junos PyEZ.

Tenga en cuenta el siguiente show chassis fan resultado:

La siguiente tabla define la clave del elemento de tabla como fan-name y solo recupera los datos del elemento de tabla con un valor de clave igual a Fan 1.

En la aplicación Junos PyEZ, puede definir la devolución de key_items a y puede anular la key_items definida en la tabla. Establezca el key_items argumento en el método de get() Table en una lista o tupla de los elementos deseados. Por ejemplo:

Título de la sección (título)

Las tablas pueden incluir el parámetro opcional title para definir el punto de partida de una sección en la salida del comando desde el cual extraer y analizar los datos. Cuando la tabla define item: '*', debe incluir title para especificar el encabezado de la sección de salida que se va a extraer

Por ejemplo, considere la siguiente salida de comando, que se incluye dentro de un conjunto más grande de salida:

En la tabla siguiente se utiliza el title parámetro para extraer y analizar datos de la TSEC status counters sección de la salida. En este caso, la tabla se define item como '*', que considera los datos como una sola cadena de texto.

Delimitador de campo (delimitador)

Algunos comandos operativos devuelven una salida compuesta solo por pares clave-valor. Si desea simplemente recuperar todo el conjunto de datos y extraer cada par clave-valor, puede usar el delimiter parámetro en lugar de definir una vista independiente. El delimiter parámetro define cómo dividir cada par de datos. Junos PyEZ utiliza el delimitador para dividir los datos en el límite especificado y almacena cada par clave-valor en un diccionario.

Considere el siguiente resultado para el show link stats comando vty.

En la tabla siguiente se define el delimitador como dos puntos (carácter :)):

Cuando recupera los datos en la aplicación Junos PyEZ, la tabla divide cada línea de salida en el delimitador y almacena los pares clave-valor en un diccionario.

Expresión de evaluación (eval)

Puede utilizar el parámetro opcional eval para agregar o modificar pares clave-valor en los datos finales devueltos por la tabla y la vista. El eval parámetro asigna un nombre de clave a una cadena que contiene una expresión matemática. Puede incluir el eval parámetro tanto en tablas como en vistas, y eval puede definir y calcular varios valores.

Cuando se utiliza eval en una tabla, hace referencia al diccionario de datos completo para el cálculo. La clave y el valor calculado se agregan como un único elemento adicional al diccionario. Cuando se usa eval en una vista, la expresión se calcula en cada iteración de los datos. El valor calculado se agrega a los datos para esa iteración. Si el nombre de la eval clave coincide con una clave definida en la vista, eval sustituye el valor de esa clave por el valor calculado. Si el nombre de la eval clave no coincide con una clave definida en la vista, eval agrega la nueva clave y el valor calculado a los datos.

La eval expresión puede hacer referencia al data diccionario devuelto por la vista. La expresión debe hacer referencia data mediante una variable de plantilla de Jinja, para que Junos PyEZ pueda reemplazar la variable por el diccionario cuando se evalúe la expresión.

A partir de Junos PyEZ versión 2.8.1, las expresiones usadas en las instrucciones Table y View eval se evalúan mediante una implementación restringida para reducir los riesgos de seguridad de la ejecución de código. Junos PyEZ analiza y valida cada expresión con un conjunto compatible de sintaxis, funciones, métodos y operaciones de Python antes de la evaluación. Las expresiones que contienen elementos no compatibles o no seguros se rechazan con un UnsafeExpressionError error. En la tabla 2 se describen las expresiones admitidas.

Tabla 2: Expresiones admitidas en instrucciones eval
Categoría Sintaxis admitida Ejemplo

Aritmética

+ - * / // % **

a+b
a*100

Lógica booleana

and, or

a > 0 and b > 0

Literales

Enteros, flotadores

123
3.14

Literales de cadena

'text'

Literales de diccionario

{'a':1}

Literales de lista

[1,2,3]

Establecer literales

{1,2,3}

Literales de tupla

(1,2,3)

Comparación
Operadores

== != < <= > >=

{{ cpu }} > 80

Diccionario
Comprensiones

{k:v for ...}

{k:v for k,v in {{ data }}.items()}

Lista
Comprensiones

[expr for ...]

[v['errors'] for k,v in {{ data }}.items()]

Establecer
Comprensiones

{expr for ...}

{k for k in {{ data }}.keys()}

Expresiones condicionales

x if cond else y

'busy' if {{ cpu }} > 80 else 'idle'

Funciones

abs()—Valor absoluto
dict()—Crear un diccionario
isinstance()—Comprobación de tipo
len()—Longitud de un iterable
max()—Valor máximo
min()—Valor mínimo
sum()—Suma un iterable

sum([1,2,3])

Generador
expresiones

(expr for ...)

(v for v in {{ data }}.values())

Indexación

[n]

{{ data }}[0]

Membresía

in, not in

'xe' in {{ name }}

Métodos

endswith()—Comprobación del sufijo de cadena
get()—Búsqueda segura de diccionario
items(): devuelve claves y valores de diccionario
keys()—Devolver claves de diccionario
values()—Valores de diccionario devueltos

{{ data }}.items()

Rebanado

[start:end:step]

'{{ cpu }}'[:-1]

Operadores unarios

+x, -x, not x

-{{ cpu }}

En el ejemplo siguiente se utiliza eval en la definición de tabla para incluir una única entrada adicional en el diccionario de datos. La clave del elemento agregado es total_interrupts, y su valor es la suma del número de interrupciones.

También puede definir eval en la tabla para calcular y agregar varios pares clave-valor, por ejemplo:

Para obtener información sobre el uso eval en una vista, consulte Expresión de evaluación (evaluación).

Vista de tabla (vista)

La view propiedad asocia la definición de tabla con una vista determinada. Una vista define cómo se debe analizar la salida de la tabla y asigna los nombres de las variables de Python definidos por el usuario a los campos de salida de los elementos de tabla seleccionados. Puede personalizar la vista para seleccionar solo ciertos campos de los elementos de la tabla.

Si el resultado consta solo de pares clave-valor, puede utilizar el parámetro de la tabla delimiter para extraer los datos y almacenar los pares clave-valor en un diccionario. En este caso, no es necesario definir una vista independiente.

Plantillas de TextFSM (plataforma y use_textfsm)

Las tablas PyEZ de Junos pueden hacer referencia a una plantilla de TextFSM para analizar la salida de comandos desde dispositivos de Juniper Networks o dispositivos de otros proveedores. Debe instalar la ntc-templates biblioteca en su servidor o entorno virtual de Junos PyEZ para poder utilizar plantillas de TextFSM en sus Tablas.

Para usar una plantilla TextFSM para analizar la salida del comando, incluya use_textfsm: True en la Tabla. Puede usar solo la plantilla TextFSM o puede usar la plantilla junto con una vista PyEZ de Junos. Junos PyEZ utiliza los platform valores y command para determinar el nombre de archivo de la plantilla.

Por ejemplo, la siguiente tabla utiliza la plantilla juniper_junos_show_arp_no-resolve.textfsm para analizar la salida de comandos de un dispositivo Junos Juniper Networks:

Para obtener información detallada sobre el uso de tablas PyEZ de Junos con plantillas de TextFSM, consulte Uso de tablas PyEZ de Junos con plantillas de TextFSM.

Tabla de historial de cambios

La compatibilidad de la función depende de la plataforma y la versión que utilice. Utilice el Explorador de características para determinar si una característica es compatible con su plataforma.

Lanzamiento
Descripción
2.8.1
A partir de la versión 2.8.1 de Junos PyEZ, las expresiones usadas en las instrucciones Table y View eval se evalúan mediante una implementación restringida.