Definir tablas operativas de Junos PyEZ para analizar resultados no estructurados
RESUMEN 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 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. A continuación, los datos extraídos se convierten a JSON. Esto le permite recuperar y analizar rápidamente la información del estado operativo del dispositivo. Las tablas op de Junos PyEZ para salida no estructurada son particularmente útiles cuando necesita analizar la salida de comando que no se puede devolver en un formato estructurado como XML.
En este tema se describen los distintos componentes de la tabla.
Resumen de parámetros en tablas Op para analizar resultados no estructurados
Las tablas PyEZ de Junos se formatean con YAML. Las definiciones de Op Table pueden incluir una serie de parámetros obligatorios y opcionales, que se resumen en la Tabla 1.
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 |
|
Comando CLI o vty para ejecutar. |
Argumentos de comando |
|
(Opcional) Cuando se define el comando como una plantilla Jinja, |
FPC de destino |
|
(Opcional) Concentrador PIC flexible (FPC) en el que ejecutar un comando vty. |
Elemento de tabla |
|
(Opcional) Cadena o expresión regular que define cómo dividir el resultado en secciones. Estas secciones se convierten en la referencia iterable para la vista asociada. Especifique '*' para extraer y hacer coincidir toda la cadena en lugar de cada línea. |
Clave del elemento de tabla |
|
(Opcional) Cadena o lista de cadenas que definen una o más claves que identifican de forma exclusiva cada elemento de tabla. |
Teclas seleccionadas |
|
(Opcional) Lista de una o más claves de elementos de tabla para las que devolver 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 compuesta por pares clave-valor. Los datos extraídos se almacenan como pares clave-valor en un diccionario. |
Expresió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 se recuperan los datos, la expresión se evalúa mediante la función de Python |
Vista de tabla |
|
(Opcional) Vista que se utiliza para extraer datos de campo de los elementos de tabla. |
Plantilla TextFSM |
|
(Opcional) Booleano que especifica si se usa una plantilla TextFSM para analizar los datos. |
Identificador de plataforma de plantilla TextFSM |
|
(Opcional) Cuando se utilice 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 op 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 CLI que se ejecutará en un dispositivo o el comando vty que se ejecutará en un FPC determinado. Puede definir el comando como una cadena simple o una plantilla Jinja.
Por ejemplo, la siguiente tabla 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 con un diccionario de pares clave-valor que asignen las variables de la plantilla a los valores utilizados cuando se representa la plantilla. Para obtener información acerca de cómo definir el comando como una plantilla Jinja, vea Argumentos de comando (args).
Argumentos de comando (args)
Puede definir el comando de CLI o vty para el parámetro mediante una plantilla Jinja y sustituir variables por los argumentos del command comando. Cuando utilice una plantilla Jinja, también debe definir el args parámetro, que es un diccionario de pares clave-valor que asigna los nombres de variables de la plantilla Jinja a los valores utilizados cuando se representa 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. En la tabla siguiente se define un comando mediante una plantilla Jinja que tiene una variable, protocol. El args parámetro define el valor predeterminado de protocol, que se utiliza cuando se llama al método en la get() secuencia de comandos y no proporciona un argumento que invalide 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:
definir un valor para cualquier variable de plantilla que no tenga un valor predeterminado definido en la tabla
invalidar el valor predeterminado definido en la tabla para una o más variables de plantilla
En el ejemplo siguiente 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 op de Junos PyEZ pueden ejecutar comandos vty en un concentrador PIC flexible (FPC) específico. Cuando se utiliza un comando vty, la tabla debe incluir el target parámetro para definir el FPC de destino. Puede establecer target y Null forzar al usuario a especificar la FPC de destino en la aplicación, o puede establecer target en una FPC predeterminada y, opcionalmente, el usuario puede invalidar este valor en la aplicación.
En la tabla siguiente se ejecuta el show memory comando vty, pero se establece target: Null, que requiere que el usuario proporcione la FPC de destino en la aplicación Junos PyEZ:
---
FpcMemory:
command: show memory
target: Null
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
En la tabla siguiente se ejecuta el show memory comando vty en FPC 1, a menos que el usuario invalide 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, para definir la FPC de destino o invalidar la FPC predeterminada definida en la tabla, establezca el target argumento del método de get() la tabla en la FPC deseada, 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 tabla (elemento)
La propiedad Table item opcional es una cadena o expresión regular que define cómo dividir la salida del comando para el análisis. Si el resultado tiene conjuntos de datos similares y repetitivos, puede definir item para que coincidan y extraigan 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.
Tenga en cuenta 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
En la tabla siguiente se extrae cada sección del resultado que comienza por 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 del resultado mediante 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 combinan con cada línea.
En la tabla siguiente se extrae el bloque de texto 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 exclusiva 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 valor debe hacer referencia a una variable o nombre de key campo definido en la vista.
Considere 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 situado 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
Al recuperar e imprimir 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, puede utilizar el parámetro opcional key_items para devolver sólo datos para determinados valores de clave. key_items define la clave o lista de claves de los elementos de tabla para los que se recuperarán datos. Puede definir el key_items parámetro en la definición de tabla o en la aplicación Junos PyEZ.
Considere 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 y sólo se recuperan 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, para definir el key_items devolver o reemplazar el key_items definido en la tabla, establezca el key_items argumento del método de get() la tabla 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 de la salida del comando de la que 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 está encerrada dentro de un conjunto mayor 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 resultados compuestos solo por pares clave-valor. Si simplemente desea recuperar todo el conjunto de datos y extraer cada par clave-valor, puede usar el delimiter parámetro para definir cómo dividir cada par de datos en lugar de definir una vista independiente. 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 el carácter de dos puntos (:)):
--- FPCLinkStatTable: command: show link stats target: fpc1 delimiter: ":"
Cuando se recuperan 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 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 tabla para incluir una sola entrada adicional en el diccionario de datos. La clave del elemento agregado es cchip_errors_from_lkup_chip, 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:
cchip_errors_from_lkup_chip: "reduce(lambda x,y: x+y, [v['interrupts'] for k,v in {{ data }}.items()])"
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-valores, 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 acerca del uso eval en una vista, vea Expresión Eval (eval).
Vista de tabla (ver)
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 variables de Python definidos por el usuario a los campos de salida en los elementos de tabla seleccionados. Puede personalizar la vista para seleccionar solo determinados campos de los elementos de tabla.
Si el resultado solo consta de pares clave-valor, puede usar el parámetro Table 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 TextFSM (plataforma y use_textfsm)
Las tablas PyEZ de Junos pueden hacer referencia a una plantilla de TextFSM para analizar la salida de comandos de los dispositivos de Juniper Networks o de otros proveedores. Debe instalar la ntc-templates biblioteca en su servidor Junos PyEZ o entorno virtual para poder utilizar las plantillas de TextFSM en sus tablas.
Para usar una plantilla TextFSM para analizar la salida del comando, inclúyala use_textfsm: True en la tabla. Puede utilizar una plantilla de TextFSM sola o junto con una vista Junos PyEZ. 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 del comando desde un dispositivo Junos de 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 de Junos PyEZ con plantillas de TextFSM, consulte Usar tablas de Junos PyEZ con plantillas de TextFSM.