Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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

Las tablas operativas (op) de Junos PyEZ para salida no estructurada extraen datos 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 está asociada con 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. Puede asociar una tabla con una vista determinada incluyendo la view propiedad en la definición de tabla, que toma el nombre de la 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 puede 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 tratan los distintos componentes de la vista.

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

Las vistas de PyEZ de Junos, al igual que las tablas, se formatean mediante YAML. Las vistas que analizan la salida no estructurada pueden incluir varios parámetros. La Tabla 1 resume los parámetros.

Tabla 1: Parámetros en vistas para tablas Op PyEZ de Junos 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 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. La expresión se evalúa para cada iteración de los datos. 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 coincidan con el contenido deseado.

Ver nombre

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

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

columnas

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

Considere el siguiente show ospf neighbor resultado de comando:

Para extraer los datos, incluya el columns parámetro en la Vista y asigne el nombre de la variable de Python al nombre de la columna. La aplicación almacena la clave y el valor extraídos 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:

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 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 de varias líneas 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 para la salida del comando anterior:

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 la definición de Vista. La cpu entrada modifica el valor existente del cpu campo para cada elemento del diccionario de datos. 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 Vista 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, max, y su valor calculado para cada elemento.

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

existe

Puede utilizar el parámetro opcional exists en una vista para indicar si hay una cadena 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 con 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 si se debe probar si la salida del comando incluye una No detected wedges cadena o una No toolkit errors cadena:

Cuando utiliza la tabla y la vista 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 puede analizar adecuadamente la salida del comando utilizando 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 analiza 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 de la salida del comando. Las _WANPTStatTable tablas y _FabricPTStatTable las tablas extraen los datos de las WAN PT statistics y las Fabric PT statistics secciones, respectivamente. En este caso, las tablas utilizan el delimiter parámetro para extraer y dividir los datos. Por lo tanto, no es necesario que las tablas hagan referencia a una vista separada.

Cuando recupera e imprime 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 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 que se extrajeron y analizaron en la tabla correspondiente.

Filtros

El columns parámetro extrae datos de la salida del comando con formato de 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 la salida final. El filters valor es 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 la salida del show ospf neighbor comando:

En la vista siguiente, el columns parámetro define claves para todas las columnas de la salida del comando correspondiente. Con el parámetro included filters , el diccionario de datos resultante incluye solo los datos de las Address columnas y State .

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

Cuando ejecuta la aplicación, la primera llamada a get() utiliza los filtros definidos en la vista. La segunda llamada utiliza los filtros definidos en la llamada, que anulan los definidos en la vista.

expresión regular

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 la cadena de texto completa.

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 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. La Tabla 3 enumera la palabra clave, una breve descripción y la expresión correspondiente, donde pp se deriva de import pyparsing as pp.

Tabla 3: palabras clave de parámetros de expresiones regulares

Palabra clave

Descripción

Expresión

hex_numbers

Palabra que contiene solo 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 de caracteres imprimibles (cualquier carácter que no sea un 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 de comando. Cada sección de salida está bajo un título de sección específico y los datos constan de 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 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 en la ICMP Discards sección de la salida del comando. La _ICMPDiscardsView vista define dos claves value y , que namese 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 comparan con cada línea de datos de esa sección.

La _ICMPErrorsTable tabla selecciona los datos en la ICMP Errors sección de la salida del comando. La _ICMPErrorsView vista define las error claves y name . Los campos usan las palabras clave numbers integradas y words en lugar de definir explícitamente 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 la salida del show ithrottle id 0 comando.

En la tabla siguiente se utilizan item: '*' para extraer los datos como una sola cadena. El parámetro Vista regex define tres expresiones regulares. Cada patrón de expresión regular 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.

Cuando recupera e imprime los datos en la aplicación Junos PyEZ, los datos incluyen los tres regex elementos, que contienen el valor coincidente por el grupo de captura para esa expresión.

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.