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.
|
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 |
|
CLI o vty comando para ejecutarlo. |
|
Argumentos de comando |
|
(Opcional) Cuando define el comando como una plantilla Jinja, |
|
FPC objetivo |
|
(Opcional) FPC en la que ejecutar un comando vty. |
|
Elemento de la tabla |
|
(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 |
|
(Opcional) Cadena o lista de cadenas que definen una o varias claves que identifican de forma exclusiva cada elemento de la tabla. |
|
Teclas seleccionadas |
|
(Opcional) Lista de una o varias claves de elemento de tabla para las que se devuelven datos. |
|
Título de la sección |
|
(Opcional) Cadena que selecciona la sección de salida que contiene los datos que se van a analizar. |
|
Delimitador de campo |
|
(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 |
|
(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 |
|
(Opcional) Vista que se utiliza para extraer datos de campo de los elementos de la tabla. |
|
Plantilla de TextFSM |
|
(Opcional) Booleano que especifica si se debe usar una plantilla TextFSM para analizar los datos. |
|
Identificador de plataforma de plantilla de TextFSM |
|
(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:
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
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.
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
En la tabla siguiente, se ejecuta el show cmerror module brief comando vty en la FPC de destino.
--- CMErrorTable: command: show cmerror module brief target: fpc1 key: module view: CMErrorView
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.
---
DdosPolicerStatsTable:
command: show ddos policer stats {{ protocol }}
args:
protocol: ospf
target: Null
title: "DDOS Policer Statistics:"
key: location
view: DdosPolicerStatsView
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".
from jnpr.junos import Device from jnpr.junos.command.pfe_ddos_policer import DdosPolicerStatsTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = DdosPolicerStatsTable(dev) stats.get(target='fpc0', args={'protocol':'bgp'}) pprint(json.loads(stats.to_json()))
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:
---
FpcMemory:
command: show memory
target: Null
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
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.
---
FpcMemory:
command: show memory
target: fpc1
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
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:
from jnpr.junos import Device from jnpr.junos.command.fpc_memory import FpcMemory from pprint import pprint import json with Device(host='router.example.com') as dev: stats = FpcMemory(dev) stats.get(target='fpc0') pprint(json.loads(stats.to_json()))
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:
TSEC Ethernet Device Driver: .le1, Control 0x4296c218, (1000Mbit)
HW reg base 0xff724000
[0]: TxBD base 0x7853ce20, RxBD Base 0x7853d640
[1]: TxBD base 0x7853d860, RxBD Base 0x7853e080
[2]: TxBD base 0x7853e2a0, RxBD Base 0x785422c0
[3]: TxBD base 0x785426e0, RxBD Base 0x78544700
Receive:
185584608 bytes, 2250212 packets, 0 FCS errors, 0 multicast packets
107271 broadcast packets, 0 control frame packets
0 PAUSE frame packets, 0 unknown OP codes
0 alignment errors, 0 frame length errors
0 code errors, 0 carrier sense errors
0 undersize packets, 0 oversize packets
0 fragments, 0 jabbers, 0 drops
Receive per queue:
[0]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[1]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[2]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[3]: 203586808 bytes, 2250219 packets, 0 dropped
0 jumbo, 0 truncated jumbo
Transmit:
288184646 bytes, 2038370 packets, 0 multicast packets
106531 broadcast packets, 0 PAUSE control frames
0 deferral packets, 0 excessive deferral packets
0 single collision packets, 0 multiple collision packets
0 late collision packets, 0 excessive collision packets
0 total collisions, 0 drop frames, 0 jabber frames
0 FCS errors, 0 control frames, 0 oversize frames
0 undersize frames, 0 fragments frames
Transmit per queue:
[0]: 10300254 bytes, 72537 packets
0 dropped, 0 fifo errors
[1]: 4474302 bytes, 106531 packets
0 dropped, 0 fifo errors
[2]: 260203538 bytes, 1857137 packets
0 dropped, 0 fifo errors
[3]: 199334 bytes, 2179 packets
0 dropped, 0 fifo errors
TSEC status counters:
kernel_dropped:0, rx_large:0 rx_short: 0
rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0
rx_bsy: 0,rx_babr:0, rx_trunc: 0
rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0
rx_errors: 0, rx_ints: 2250110, collisions: 0
eberr:0, tx_babt: 0, tx_underrun: 0
tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0
tx_aborted_errors: 0, tx_ints: 2038385, resets: 1
TSEC Ethernet Device Driver: .le3, Control 0x42979220, (1000Mbit)
HW reg base 0xff726000
[0]: TxBD base 0x78545720, RxBD Base 0x78545f40
[1]: TxBD base 0x78546160, RxBD Base 0x78546980
[2]: TxBD base 0x78546ba0, RxBD Base 0x7854abc0
[3]: TxBD base 0x7854afe0, RxBD Base 0x7854d000
Receive:
0 bytes, 0 packets, 0 FCS errors, 0 multicast packets
0 broadcast packets, 0 control frame packets
0 PAUSE frame packets, 0 unknown OP codes
0 alignment errors, 0 frame length errors
0 code errors, 0 carrier sense errors
0 undersize packets, 0 oversize packets
0 fragments, 0 jabbers, 0 drops
Receive per queue:
[0]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[1]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[2]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[3]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
Transmit:
6817984 bytes, 106531 packets, 0 multicast packets
106531 broadcast packets, 0 PAUSE control frames
0 deferral packets, 0 excessive deferral packets
0 single collision packets, 0 multiple collision packets
0 late collision packets, 0 excessive collision packets
0 total collisions, 0 drop frames, 0 jabber frames
0 FCS errors, 0 control frames, 0 oversize frames
0 undersize frames, 0 fragments frames
Transmit per queue:
[0]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
[1]: 4474302 bytes, 106531 packets
0 dropped, 0 fifo errors
[2]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
[3]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
TSEC status counters:
kernel_dropped:0, rx_large:0 rx_short: 0
rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0
rx_bsy: 0,rx_babr:0, rx_trunc: 0
rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0
rx_errors: 0, rx_ints: 0, collisions: 0
eberr:0, tx_babt: 0, tx_underrun: 0
tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0
tx_aborted_errors: 0, tx_ints: 106531, resets: 1
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.
---
DevicesLocalTable:
command: show devices local
target: fpc1
item: 'TSEC Ethernet Device Driver: (\.?\w+),'
key: name
view: DevicesLocalView
DevicesLocalView:
fields:
TSEC_status_counters: _TSECStatusCountersTable
receive_counters: _ReceiveTable
transmit_per_queue: _TransmitQueueTable
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:
_ReceiveTable:
item: '*'
title: 'Receive:'
view: _ReceiveView
_ReceiveView:
regex:
bytes: '(\d+) bytes'
packets: '(\d+) packets'
FCS_errors: '(\d+) FCS errors'
broadcast_packets: '(\d+) broadcast packets'
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:
Item Status RPM Measurement
Fan 1 OK 5280 Spinning at normal speed
Fan 2 OK 5280 Spinning at normal speed
Fan 3 OK 5280 Spinning at normal speed
Fan 4 OK 5280 Spinning at normal speed
Fan 5 OK 5280 Spinning at normal speed
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.
ChassisFanTable:
command: show chassis fan
key: fan-name
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
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.
dict_keys(['Fan 1', 'Fan 2', 'Fan 3', 'Fan 4', 'Fan 5'])
También puede definir key como una lista para identificar un elemento de tabla mediante una clave compuesta. Por ejemplo:
---
FPCIPV4AddressTable:
command: show ipv4 address
target: fpc1
key:
- name
- addr
view: FPCIPV4AddressView
FPCIPV4AddressView:
columns:
index: Index
addr: Address
name: Name
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:
Item Status RPM Measurement
Fan 1 OK 5280 Spinning at normal speed
Fan 2 OK 5280 Spinning at normal speed
Fan 3 OK 5280 Spinning at normal speed
Fan 4 OK 5280 Spinning at normal speed
Fan 5 OK 5280 Spinning at normal speed
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.
ChassisFanTable:
command: show chassis fan
key: fan-name
key_items:
- Fan 1
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
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:
from jnpr.junos import Device from jnpr.junos.command.chassis_fan import ChassisFanTable from pprint import pprint import json with Device(host='router.example.com') as dev: fans = ChassisFanTable(dev) fans.get(key_items=['Fan 1', 'Fan 2']) pprint(json.loads(fans.to_json()))
user@host:~$ python3 junos-pyez-get-fan-data.py
{'Fan 1': {'fan-measurement': 'Spinning at normal speed',
'fan-name': 'Fan 1',
'fan-rpm': 5280,
'fan-status': 'OK'},
'Fan 2': {'fan-measurement': 'Spinning at normal speed',
'fan-name': 'Fan 2',
'fan-rpm': 5280,
'fan-status': 'OK'}}
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:
... TSEC status counters: kernel_dropped:0, rx_large:0 rx_short: 0 rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0 rx_bsy: 0,rx_babr:0, rx_trunc: 0 rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0 rx_errors: 0, rx_ints: 2250110, collisions: 0 eberr:0, tx_babt: 0, tx_underrun: 0 tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0 tx_aborted_errors: 0, tx_ints: 2038385, resets: 1 ...
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.
_TSECStatusCountersTable:
item: '*'
title: 'TSEC status counters:'
view: _TSECStatusCountersView
_TSECStatusCountersView:
regex:
kernel_dropped: 'kernel_dropped:(\d+)'
rx_large: 'rx_large:(\d+)'
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.
PPP LCP/NCP: 0 HDLC keepalives: 0 RSVP: 0 ISIS: 0 OSPF Hello: 539156 OAM: 0 BFD: 15 UBFD: 0 LMI: 0 LACP: 0 ETHOAM: 0 SYNCE: 0 PTP: 0 L2TP: 0 LNS-PPP: 0 ARP: 4292 ELMI: 0 VXLAN MRESOLVE: 0 Unknown protocol: 42
En la tabla siguiente se define el delimitador como dos puntos (carácter :)):
--- FPCLinkStatTable: command: show link stats target: fpc1 delimiter: ":"
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.
{'ARP': 4292, 'ELMI': 0, 'SYNCE': 0, 'ISIS': 0, 'BFD': 15, 'PPP LCP/NCP': 0,
'OAM': 0, 'ETHOAM': 0, 'LACP': 0, 'LMI': 0, 'Unknown protocol': 42,
'UBFD': 0, 'L2TP': 0, 'HDLC keepalives': 0, 'LNS-PPP': 0,
'OSPF Hello': 539156, 'RSVP': 0, 'VXLAN MRESOLVE': 0, 'PTP': 0}
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.
| Categoría | Sintaxis admitida | Ejemplo |
|---|---|---|
|
Aritmética |
+ - * / // % ** |
|
|
Lógica booleana |
|
|
|
Literales |
Enteros, flotadores |
|
|
Literales de cadena |
|
|
|
Literales de diccionario |
|
|
|
Literales de lista |
|
|
|
Establecer literales |
|
|
|
Literales de tupla |
|
|
|
Comparación |
|
|
|
Diccionario |
|
|
|
Lista |
|
|
|
Establecer |
|
{k for k in {{ data }}.keys()} |
|
Expresiones condicionales |
|
|
|
Funciones |
|
|
|
Generador |
|
|
|
Indexación |
|
|
|
Membresía |
|
|
|
Métodos |
|
|
|
Rebanado |
|
|
|
Operadores unarios |
|
|
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.
---
CChipLiInterruptStatsTable:
command: show xmchip {{ chip_instance }} li interrupt-stats
target: NULL
args:
chip_instance: 0
key:
- li_block
- name
eval:
total_interrupts: "sum([v['interrupts'] for k,v in {{ data }}.items() if isinstance(v, dict) and 'cookie_sz_err' in v['name']])"
view: CChipLiInterruptStatsView
CChipLiInterruptStatsView:
columns:
li_block: LI Block
name: Interrupt Name
interrupts: Number of Interrupts
last_occurance: Last Occurrence
También puede definir eval en la tabla para calcular y agregar varios pares clave-valor, por ejemplo:
---
CChipDRDErrTable:
command: show xmchip {{ instance }} drd error-stats
args:
instance: 0
target: NULL
key: Interrupt Name
item: '*'
eval:
cchip_drd_wan_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_0')])
cchip_drd_fab_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_1')])
view: CChipDRDErrView
CChipDRDErrView:
regex:
cchip_drd_wan_timeouts: 'Total WAN reorder ID timeout errors:\s+(\d+)'
cchip_drd_fab_timeouts: 'Total fabric reorder ID timeout errors:\s+(\d+)'
columns:
interrupt_name: Interrupt Name
interrupt_count: Number of Interrupts
filters:
- interrupt_count
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:
--- ArpTableTextFSM: command: show arp no-resolve platform: juniper_junos key: MAC use_textfsm: True
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.
eval se evalúan mediante una implementación restringida.