Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Definir vistas para tablas operativas de Junos PyEZ que analizan resultados no estructurados

Las tablas operativas (op) de Junos PyEZ para salida no estructurada extraen datos de la salida de texto de un comando CLI ejecutado en un dispositivo Junos o un comando vty ejecutado en un concentrador PIC flexible (FPC) determinado. Una tabla está asociada a una vista, que se utiliza para acceder a los campos de los elementos de la tabla y asignarlos a variables de Python definidas por el usuario. Para asociar una tabla a una vista determinada, se incluye la view propiedad en la definición de tabla, que toma el nombre de vista como argumento.

Una vista asigna las variables definidas por el usuario a los datos de los elementos de tabla seleccionados. Una vista le permite acceder a campos específicos en la salida como variables con propiedades que se pueden manipular en Python. Junos PyEZ maneja la extracción de los datos en Python, así como cualquier conversión de tipo o normalización de datos. Las claves definidas en la vista deben ser nombres de variables de Python válidos.

En este tema se describen los distintos componentes de la vista.

Resumen de parámetros en vistas para analizar resultados no estructurados

Las vistas de Junos PyEZ, al igual que las tablas, se formatean con YAML. Las vistas que analizan resultados no estructurados pueden incluir varios parámetros, que se resumen en la Tabla 1.

Tabla 1: Parámetros en vistas para tablas Op de Junos PyEZ para salida no estructurada

Ver parámetro

Descripción

Nombre de la vista

Identificador definido por el usuario para la vista.

columns

(Opcional) Lista de títulos de columna en la salida del comando.

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. Para cada iteración de los datos, la expresión se evalúa mediante la función Python eval . La clave y el valor calculado se agregan a los datos correspondientes a esa iteración.

exists

(Opcional) Matriz asociativa, o diccionario, de pares clave-valor que asignan una clave definida por el usuario a una cadena. Si la cadena está presente en la salida, la variable se establece en True; de lo contrario, la variable se establece en False.

fields

(Opcional) Matriz asociativa, o diccionario, de pares clave-valor que asignan una clave definida por el usuario al nombre de una tabla anidada que analiza una sección específica de la salida del comando.

filters

(Opcional) Lista de una o más claves definidas en columns. El conjunto final de datos incluye solo datos de las columnas seleccionadas.

regex

(Opcional) Lista de expresiones regulares para que coincida con el contenido deseado.

Nombre de la vista

El nombre de la vista es un identificador definido por el usuario para la vista. Para asociar una tabla a una vista determinada, incluya la view propiedad en la definición de tabla y proporcione el nombre de vista como argumento.

En el ejemplo siguiente se define una vista denominada ChassisFanView, a la que hace referencia el view parámetro Table:

Columnas

Puede usar el parámetro en una vista para extraer y analizar la columns salida del comando que tiene formato en filas y columnas.

Considere el siguiente show ospf neighbor resultado de comando:

Para extraer los datos, incluya el parámetro en la vista y asigne el nombre de columns la variable de Python al nombre de la columna. La aplicación almacena la clave y el valor extraído de la salida del comando para esa columna como un par clave-valor en el diccionario para el elemento dado.

La siguiente vista extrae los datos de cada columna de la salida del show ospf neighbor comando:

Al recuperar e imprimir los datos en la aplicación Junos PyEZ, los datos de cada vecino incluyen las teclas de columna y los datos correspondientes.

Para filtrar los datos para incluir solo datos de las columnas seleccionadas, incluya el filters parámetro en la vista. Para obtener más información, consulte filtros.

Algunos resultados de comandos incluyen títulos de columna que abarcan varias líneas, por ejemplo:

Para definir un título de columna multilínea en una vista, establezca el elemento clave de columna igual a una lista de las palabras de cada fila para ese título. La siguiente vista define las columnas de la salida del comando anterior:

Expresión eval (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 que es evaluada por la función Python eval . 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, y la clave y el valor calculado se agregan como un único elemento adicional al diccionario. Cuando se utiliza eval en una vista, la expresión se calcula en cada iteración de los datos y el valor calculado se agrega a los datos para esa iteración. Si el nombre de clave eval coincide con una clave definida en la vista, eval reemplaza el valor de esa clave por el valor calculado. Si el nombre de clave eval 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 Jinja, de modo que Junos PyEZ pueda reemplazar la variable con el diccionario cuando se evalúe la expresión.

En el ejemplo siguiente se utiliza eval la definición de View. La cpu entrada modifica el valor existente del cpu campo para cada elemento del diccionario de datos y la max entrada crea un nuevo par clave-valor para cada elemento del diccionario de datos.

Considere el siguiente resultado de ejemplo para el show threads comando vty:

El parámetro de la vista modifica cada cpu entrada para omitir el signo de eval porcentaje (%). Como resultado, los datos incluyen '0' en lugar de '0%'. Además, agrega una nueva clave maxy su valor calculado para cada elemento.

Para obtener ejemplos que se utilizan eval en la definición de tabla, vea Expresión Eval (eval).

Existe

Puede utilizar el parámetro opcional exists en una vista para indicar si hay una cadena presente en la salida del comando. exists es un diccionario de pares clave-valor que asignan un nombre de variable de Python definido por el usuario a la cadena para que coincida en la salida del comando. Si la cadena está presente en la salida, la variable se establece en True. De lo contrario, la variable se establece en False.

Considere la salida del show host_loopback status-summary comando vty.

En la tabla siguiente se define exists para comprobar si el resultado del comando incluye una No detected wedges cadena o una No toolkit errors cadena:

Cuando utilice Table and View para probar las cadenas e imprimir los valores resultantes en su aplicación Junos PyEZ, ambas variables se establecen en True este caso.

Campos

La salida del comando puede ser larga y compleja, y es posible que necesite una lógica diferente para analizar diferentes secciones de la salida. En algunos casos, no se puede analizar adecuadamente la salida del comando con una sola tabla y vista. Para analizar este tipo de salida, puede incluir el parámetro opcional fields en la vista. fields es un diccionario de pares clave-valor que asignan una clave definida por el usuario al nombre de una tabla anidada que selecciona una sección específica de la salida del comando. Cada tabla anidada puede hacer referencia a su propia vista, que se utiliza para analizar los datos seleccionados por esa tabla.

Considere la salida del show xmchip 0 pt stats comando vty, que tiene dos secciones diferentes de datos:

La vista siguiente XMChipStatsView utiliza el fields parámetro para definir dos tablas adicionales, que se utilizan para analizar las dos secciones diferentes de la salida del comando. Las _WANPTStatTable tablas y _FabricPTStatTable extraen los datos de las WAN PT statistics secciones y Fabric PT statistics respectivamente. En este caso, las tablas utilizan el delimiter parámetro para extraer y dividir los datos, por lo que no es necesario hacer referencia a una vista independiente.

Al recuperar e imprimir los datos en la aplicación Junos PyEZ, cada clave definida en fields contiene los datos seleccionados y analizados por la tabla correspondiente.

Como otro ejemplo, considere la salida del show ttp statistics comando vty:

View FPCTTPStatsView utiliza el fields parámetro para hacer referencia a varias tablas anidadas, que extraen los datos de las distintas secciones de la salida. Cada tabla hace referencia a su propia vista o utiliza el delimiter parámetro para analizar los datos de esa sección.

Cuando recupera e imprime los datos en la aplicación Junos PyEZ, cada fields clave contiene los datos extraídos y analizados por la tabla correspondiente.

Filtros

El columns parámetro extrae datos de la salida del comando con formato en filas y columnas. Al incluir el columns parámetro en una vista, puede incluir opcionalmente el filters parámetro para filtrar qué datos de columna se incluyen en el resultado final. El filters parámetro define una lista de una o más claves definidas en columns. El conjunto final de datos incluye solo datos de las columnas seleccionadas. Puede proporcionar filtros predeterminados en la definición de vista y también puede definir o anular valores de filtro en la aplicación Junos PyEZ.

Considere el resultado del show ospf neighbor comando:

En la vista siguiente, el columns parámetro define claves para todas las columnas de la salida de comandos correspondiente, pero el filters parámetro sólo incluye los datos de las Address columnas y State del diccionario de datos.

El siguiente código de Junos PyEZ llama get() primero sin argumentos, lo que recupera los datos mediante la lista predeterminada de filtros definida en la vista. La segunda llamada a incluye el filters argumento, que invalida get() la lista de filtros definida en la vista.

Al ejecutar la aplicación, la primera llamada a get() utiliza los filtros definidos en la vista y la segunda llamada utiliza los filtros definidos en la llamada, que invalidan los definidos en la vista.

Regex

Puede utilizar el parámetro opcional regex en una vista para hacer coincidir y extraer campos específicos en la salida del comando. regex es un diccionario que asigna claves a expresiones regulares. Si la tabla correspondiente no define item: '*', Junos PyEZ combina las expresiones regulares y compara el resultado con cada línea de salida. Sin embargo, si la tabla define item: '*' extraer los datos como una sola cadena de texto, Junos PyEZ hace coincidir cada expresión regular individual con toda la cadena de texto.

El grupo de captura definido en la expresión regular determina los datos que se extraen del campo y se almacenan en el diccionario de datos. Si define un grupo de captura, solo se almacena en los datos el valor de ese grupo. De lo contrario, Junos PyEZ almacena el valor que coincida con la expresión completa. Por ejemplo, (d+.d+) recupera y almacena un valor float de la expresión de búsqueda de cadenas, mientras que (d+).d+ solo almacena la parte entera de los datos. Si define varios grupos, sólo se almacena el valor del primer grupo.

Junos PyEZ aprovecha el pyparsing módulo para definir una serie de palabras clave integradas que puede usar en lugar de una expresión regular. En la Tabla 2 se enumera la palabra clave, una breve descripción y la expresión correspondiente, donde pp se deriva de import pyparsing as pp.

Tabla 2: Palabras clave del parámetro regex

Palabra clave

Descripción

Expresión

hex_numbers

Palabra que contiene sólo caracteres hexadecimales

hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
    & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1))

numbers

Palabra que consta de un valor entero o flotante

numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
     pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i))

percentage

Palabra compuesta de dígitos y un signo de porcentaje final (%)

percentage = pp.Word(pp.nums) + pp.Literal('%')

printables

Una o más palabras compuestas de caracteres imprimibles (cualquier carácter que no sea de espacio en blanco)

printables = pp.OneOrMore(pp.Word(pp.printables))

word

Palabra compuesta de caracteres alfanuméricos o alfanuméricos

word = pp.Word(pp.alphanums) | pp.Word(pp.alphas)

words

Una o más word cadenas

words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i))

Considere el siguiente show icmp statistics resultado del comando. Cada sección de salida está bajo un título de sección específico, y los datos consisten en un número y una o más palabras.

Para analizar la salida anterior, la vista principal define fields, que hace referencia a tablas y vistas anidadas que analizan cada sección de la salida. Las vistas anidadas definen el regex parámetro para que coincida con los datos extraídos por la tabla correspondiente.

Por ejemplo, la _ICMPDiscardsTable tabla selecciona los datos de la ICMP Discards sección en la salida del comando. La _ICMPDiscardsView vista define dos claves value y name, que se asignan a expresiones regulares. value coincide con uno o más dígitos y name coincide con una o más palabras. Dado que la tabla no define item: '*', las expresiones regulares se combinan y combinan con cada línea de datos de esa sección.

La _ICMPErrorsTable tabla selecciona los datos de la sección de la ICMP Errors salida del comando. La _ICMPErrorsView vista define las error claves y name utiliza las palabras clave numbers integradas y words en lugar de definir explícitamente las expresiones regulares.

Si la tabla define item: '*', los datos extraídos se consideran una cadena de texto. En este caso, cada expresión regular de la vista correspondiente coincide con toda la cadena.

Considere el resultado del show ithrottle id 0 comando.

En la tabla siguiente se utilizan item: '*' para extraer los datos como una sola cadena. El parámetro View regex define tres expresiones regulares. Cada patrón regex se compara con toda la cadena. Dado que las expresiones regulares definen grupos de captura, Junos PyEZ solo almacena los datos que coinciden con el grupo.

Al recuperar e imprimir los datos en la aplicación Junos PyEZ, los datos incluyen los tres regex elementos, que contienen el valor coincidente con el grupo de captura para esa expresión.