Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Definir vistas para las tablas operativas de Junos PyEZ que analizan la salida no estructurada

Tablas operativas (operativas) de Junos PyEZ para datos de extracción de salida no estructurados de la salida de texto de un comando de CLI ejecutado en un dispositivo Junos o un comando vty ejecutado en un concentrador de PIC flexible (FPC) dado. Una tabla se asocia con una vista, que se usa para acceder a los campos de los elementos de la tabla y asignarlos a variables Python definidas por el usuario. Asocie una tabla con una vista determinada incluyendo la view propiedad en la definición de tabla, que toma el nombre de vista como su 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 el resultado como variables con propiedades que se pueden manipular en Python. Junos PyEZ maneja la extracción de los datos en Python, así como cualquier tipo de conversión 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 diferentes componentes de la vista.

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

Las vistas de Junos PyEZ, como las tablas, se formatean con YAML. Las vistas que analizan la salida no estructurada pueden incluir varios parámetros, que se resumen en la Tabla 1.

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

Parámetro de vista

Descripción

Ver nombre

Identificador definido por el usuario para la vista.

columns

(Opcional) Lista de títulos de columnas en el resultado del comando.

eval

(Opcional) Matriz asociativa o diccionario de uno o más pares de 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 el resultado, 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 del resultado del comando.

filters

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

regex

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

Ver nombre

El nombre de vista es un identificador definido por el usuario para la vista. Asocie una tabla con una vista determinada incluyendo la view propiedad en la definición de tabla y proporcionando el nombre de vista como su argumento.

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

Columnas

Puede usar el columns parámetro en una vista para extraer y analizar la salida de comandos con formato en filas y columnas.

Tenga en cuenta el siguiente show ospf neighbor resultado de comando:

Para extraer los datos, incluya el columns parámetro en la vista y asigne su nombre de variable Python al nombre de la columna. La aplicación almacena la clave y el valor extraídas del resultado 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 en el resultado del show ospf neighbor comando:

Cuando recupera e imprime los datos en la aplicación Junos PyEZ, los datos de cada vecino incluyen las claves de columna y los datos correspondientes.

Para filtrar los datos para que solo incluyan 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 columnas que abarcan varias líneas, por ejemplo:

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

Expresión Eval (eval)

Puede usar 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 la función Python eval evalúa. Puede incluir el eval parámetro en tablas y vistas, y eval puede definir y calcular varios valores.

Cuando se usa 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 solo elemento adicional al diccionario. Cuando se usa 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 al uso de una variable de plantilla Jinja, de modo que Junos PyEZ pueda reemplazar la variable con el diccionario cuando se evalúa la expresión.

En el ejemplo siguiente se utiliza eval en la definición de vista. 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 la siguiente salida de ejemplo para el show threads comando vty:

El parámetro View eval modifica cada cpu entrada para omitir el signo de porcentaje (%). Como resultado, los datos incluyen "0" en lugar de "0%". Además, agrega una nueva clave y maxsu valor calculado para cada artículo.

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

Existe

Puede usar el parámetro opcional exists en una vista para indicar si una cadena está presente en la salida del comando. exists es un diccionario de pares clave-valor que asignan un nombre de variable Python definido por el usuario a la cadena para que coincida en el resultado del comando. Si la cadena está presente en el resultado, 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.

La siguiente tabla define exists para probar si el resultado del comando incluye una No detected wedges cadena o una No toolkit errors cadena:

Cuando usa la tabla y la vista para probar las cadenas e imprimir los valores resultantes en la aplicación Junos PyEZ, ambas variables se establecen True en este caso.

Campos

La salida de 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 puede analizar adecuadamente el resultado del comando mediante 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 del resultado 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 siguiente XMChipStatsView vista utiliza el fields parámetro para definir dos tablas adicionales, que se utilizan para analizar las dos secciones diferentes del resultado del comando. Las _WANPTStatTable tablas y _FabricPTStatTable extracción de los datos de las WAN PT statistics secciones y Fabric PT statistics , respectivamente. En este caso, las tablas usan el delimiter parámetro para extraer y dividir los datos, por lo que no necesitan hacer referencia a una vista independiente.

Cuando se recuperan e imprimen 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:

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

Cuando se recuperan e imprimen los datos en la aplicación Junos PyEZ, cada fields clave contiene los datos que se extrajeron y analizaron en la tabla correspondiente.

Filtros

El columns parámetro extrae datos de la salida de comandos que se formatean en filas y columnas. Cuando se incluye el columns parámetro en una vista, opcionalmente puede incluir 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 solo incluye 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 siguiente vista, el columns parámetro define claves para todas las columnas en la salida de comando correspondiente, pero el filters parámetro solo incluye los datos de las Address columnas y State del diccionario de datos.

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

Cuando se ejecuta la aplicación, la primera llamada para get() usar los filtros definidos en la vista y la segunda llamada usa los filtros definidos en la llamada, que reemplazan los definidos en la vista.

Regex

Puede usar 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 hace coincidir el resultado con cada línea de salida. Sin embargo, si la tabla define item: '*' para 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 el valor de ese grupo se almacena en los datos. De lo contrario, Junos PyEZ almacena el valor que coincide con la expresión completa. Por ejemplo, (d+.d+) recupera y almacena un valor flotante de la expresión de búsqueda de cadena, mientras que (d+).d+ solo almacena la parte entera de los datos. Si define varios grupos, solo 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 de parámetro regex

Palabra clave

Descripción

Expresión

hex_numbers

Palabra que solo contiene 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 por dígitos y un signo de porcentaje final (%)

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

printables

Una o más palabras compuestas por caracteres imprimibles (caracteres que no sean espacios en blanco)

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

word

Palabra compuesta por caracteres alfa 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 la siguiente show icmp statistics salida de comando. Cada sección de salida está bajo un título de sección específica, y los datos constan de un número y una o más palabras.

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

Por ejemplo, la _ICMPDiscardsTable tabla selecciona los datos en la ICMP Discards sección en el resultado del comando. La _ICMPDiscardsView vista define dos claves y name, value 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 se comparan con cada línea de datos de esa sección.

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

Si la tabla define , los datos extraídas item: '*'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.

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

Cuando se recuperan e imprimen los datos en la aplicación Junos PyEZ, los datos incluyen los tres regex elementos, que contienen el valor que coincide con el grupo de captura para esa expresión.