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.
Ver parámetro |
Descripción |
---|---|
Nombre de la vista |
Identificador definido por el usuario para la vista. |
|
(Opcional) Lista de títulos de columna en la salida del comando. |
|
(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 |
|
(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. |
|
(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. |
|
(Opcional) Lista de una o más claves definidas en |
|
(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:
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView ChassisFanView: columns: fan-name: Item fan-status: Status fan-rpm: RPM fan-measurement: Measurement
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:
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
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:
--- OspfNeighborTable: command: show ospf neighbor key: Address view: OspfNeighborView OspfNeighborView: columns: neighbor_address: Address interface: Interface neighbor_state: State neighbor_id: ID neighbor_priority: Pri activity_timer: Dead
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.
from jnpr.junos import Device from jnpr.junos.command.ospf_neighbor import OspfNeighborTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = OspfNeighborTable(dev) stats.get() pprint(json.loads(stats.to_json()))
user@host:~$ python3 junos-pyez-ospf-neighbors.py {'198.51.100.2': {'activity_timer': 39, 'interface': 'ge-0/0/0.0', 'neighbor_address': '198.51.100.2', 'neighbor_id': '192.168.0.2', 'neighbor_priority': 128, 'neighbor_state': 'Full'}, '198.51.100.6': {'activity_timer': 36, 'interface': 'ge-0/0/1.0', 'neighbor_address': '198.51.100.6', 'neighbor_id': '192.168.0.3', 'neighbor_priority': 128, 'neighbor_state': 'Full'}}
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:
FI interrupt statistics ----------------------- -------------------------------------------------------------------------------- Stream Total RLIM Total Cell timeout Total Reorder Total cell Total number request PT/MALLOC Ignored cell timeout drops in of times counter Usemeter errors secure mode entered into saturation Drops secure mode -------------------------------------------------------------------------------- 36 0 0 1 1 0 0 128 0 0 1 49 0 0 142 0 0 1 53 0 0 -------------------------------------------------------------------------------- ...
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:
CChipFiStatsTable: command: show mqss {{ chip_instance }} fi interrupt-stats target: fpc8 args: chip_instance: 0 key: Stream view: CChipFiStatsView CChipFiStatsView: columns: stream: Stream req_sat: - Total RLIM - request - counter - saturation cchip_fi_malloc_drops: - Total - PT/MALLOC - Usemeter - Drops cell_timeout_ignored: - Cell timeout - Ignored cchip_fi_cell_timeout: - Total Reorder - cell timeout - errors drops_in_secure: - Total cell - drops in - secure mode times_in_secure: - Total number - of times - entered into - secure mode
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.
--- FPCThread: command: show threads target: Null key: Name view: FPCThreadView FPCThreadView: columns: pid-pr: PID PR state: State name: Name stack: Stack Use time: Time (Last/Max/Total) cpu: cpu eval: cpu: "'{{ cpu }}'[:-1]" max: "('{{ time }}'.split('/'))[1]"
Considere el siguiente resultado de ejemplo para el show threads
comando vty:
PID PR State Name Stack Use Time (Last/Max/Total) cpu --- -- ------- --------------------- --------- --------------------- 1 H asleep Maintenance 680/32768 0/5/5 ms 0% 2 L running Idle 1452/32768 0/22/565623960 ms 80% 3 H asleep Timer Services 1452/32768 0/7/1966 ms 0% ...
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 max
y su valor calculado para cada elemento.
'Maintenance': {'cpu': '0', 'max': '5', 'name': 'Maintenance', 'pid-pr': '1 H', 'stack': '680/32768', 'state': 'asleep', 'time': '0/5/5 ms'}, 'Timer Services': {'cpu': '0', 'max': '7', 'name': 'Timer Services', 'pid-pr': '3 H', 'stack': '1452/32768', 'state': 'asleep', 'time': '0/7/1966 ms'}, ...
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.
SENT: Ukern command: show host_loopback status-summary Host Loopback Toolkit Status Summary: No detected wedges No toolkit errors
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:
--- HostlbStatusSummaryTable: command: show host_loopback status-summary target: fpc1 view: HostlbStatusSummaryView HostlbStatusSummaryView: exists: no_detected_wedges: No detected wedges no_toolkit_errors: No toolkit errors
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.
{'no_detected_wedges': True, 'no_toolkit_errors': True}
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:
SENT: Ukern command: show xmchip 0 pt stats WAN PT statistics (Index 0) --------------------------- PCT entries used by all WI-1 streams : 0 PCT entries used by all WI-0 streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all WI-1 streams : 0 CPT entries used by all WI-0 streams : 0 CPT entries used by all LI streams : 0 Fabric PT statistics (Index 1) ------------------------------ PCT entries used by all FI streams : 0 PCT entries used by all WI (Unused) streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all FI streams : 0 CPT entries used by all WI (Unused) streams : 0 CPT entries used by all LI streams : 0
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.
XMChipStatsTable: command: show xmchip 0 pt stats target: fpc1 view: XMChipStatsView XMChipStatsView: fields: wan_pt_stats: _WANPTStatTable fabric_pt_stats: _FabricPTStatTable _WANPTStatTable: title: WAN PT statistics (Index 0) delimiter: ":" _FabricPTStatTable: title: Fabric PT statistics (Index 1) delimiter: ":"
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.
{'fabric_pt_stats': {'CPT entries used by all FI streams': 0, 'CPT entries used by all LI streams': 0, 'CPT entries used by all WI (Unused) streams': 0, 'CPT entries used by all multicast packets': 0, 'PCT entries used by all FI streams': 0, 'PCT entries used by all LI streams': 0, 'PCT entries used by all WI (Unused) streams': 0}, 'wan_pt_stats': {'CPT entries used by all LI streams': 0, 'CPT entries used by all WI-0 streams': 0, 'CPT entries used by all WI-1 streams': 0, 'CPT entries used by all multicast packets': 0, 'PCT entries used by all LI streams': 0, 'PCT entries used by all WI-0 streams': 0, 'PCT entries used by all WI-1 streams': 0}}
Como otro ejemplo, considere la salida del show ttp statistics
comando vty:
TTP Statistics: Receive Transmit ---------- ---------- L2 Packets 4292 1093544 L3 Packets 542638 0 Drops 0 0 Netwk Fail 0 0 Queue Drops 0 0 Unknown 0 0 Coalesce 0 0 Coalesce Fail 0 0 TTP Transmit Statistics: Queue 0 Queue 1 Queue 2 Queue 3 ---------- ---------- ---------- ---------- L2 Packets 1093544 0 0 0 L3 Packets 0 0 0 0 TTP Receive Statistics: Control High Medium Low Discard ---------- ---------- ---------- ---------- ---------- L2 Packets 0 0 4292 0 0 L3 Packets 0 539172 3466 0 0 Drops 0 0 0 0 0 Queue Drops 0 0 0 0 0 Unknown 0 0 0 0 0 Coalesce 0 0 0 0 0 Coalesce Fail 0 0 0 0 0 TTP Receive Queue Sizes: Control Plane : 0 (max is 4473) High : 0 (max is 4473) Medium : 0 (max is 4473) Low : 0 (max is 2236) TTP Transmit Queue Size: 0 (max is 6710)
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.
--- FPCTTPStatsTable: command: show ttp statistics target: fpc2 view: FPCTTPStatsView FPCTTPStatsView: fields: TTPStatistics: _FPCTTPStatisticsTable TTPTransmitStatistics: _FPCTTPTransmitStatisticsTable TTPReceiveStatistics: _FPCTTPReceiveStatisticsTable TTPQueueSizes: _FPCTTPQueueSizesTable _FPCTTPStatisticsTable: title: TTP Statistics view: _FPCTTPStatisticsView _FPCTTPStatisticsView: columns: rcvd: Receive tras: Transmit _FPCTTPTransmitStatisticsTable: title: TTP Transmit Statistics view: _FPCTTPTransmitStatisticsView _FPCTTPTransmitStatisticsView: columns: queue0: Queue 0 queue1: Queue 1 queue2: Queue 2 queue3: Queue 3 filters: - queue2 _FPCTTPReceiveStatisticsTable: title: TTP Receive Statistics key: name key_items: - Coalesce view: _FPCTTPReceiveStatisticsView _FPCTTPReceiveStatisticsView: columns: control: Control high: High medium: Medium low: Low discard: Discard _FPCTTPQueueSizesTable: title: TTP Receive Queue Sizes delimiter: ":"
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.
{'TTPQueueSizes': {'Control Plane': '0 (max is 4473)', 'High': '0 (max is 4473)', 'Low': '0 (max is 2236)', 'Medium': '0 (max is 4473)'}, 'TTPReceiveStatistics': {'Coalesce': {'control': 0, 'discard': 0, 'high': 0, 'low': 0, 'medium': 0, 'name': 'Coalesce'}}, 'TTPStatistics': {'Coalesce': {'name': 'Coalesce', 'rcvd': 0, 'tras': 0}, 'Coalesce Fail': {'name': 'Coalesce Fail', 'rcvd': 0, 'tras': 0}, 'Drops': {'name': 'Drops', 'rcvd': 0, 'tras': 0}, 'L2 Packets': {'name': 'L2 Packets', 'rcvd': 4292, 'tras': 1093544}, 'L3 Packets': {'name': 'L3 Packets', 'rcvd': 542638, 'tras': 0}, 'Netwk Fail': {'name': 'Netwk Fail', 'rcvd': 0, 'tras': 173}, 'Queue Drops': {'name': 'Queue Drops', 'rcvd': 0, 'tras': 0}, 'Unknown': {'name': 'Unknown', 'rcvd': 0, 'tras': 0}}, 'TTPTransmitStatistics': {'L2 Packets': {'queue2': 0}, 'L3 Packets': {'queue2': 0}}}
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:
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
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.
--- OspfNeighborFiltersTable: command: show ospf neighbor key: Address view: OspfNeighborFiltersView OspfNeighborFiltersView: columns: neighbor_address: Address interface: Interface neighbor_state: State neighbor_id: ID neighbor_priority: Pri activity_timer: Dead filters: - neighbor_address - neighbor_state
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.
from jnpr.junos import Device from Tables.show_ospf_neighbor_filter import OspfNeighborFiltersTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = OspfNeighborFiltersTable(dev) stats.get() pprint(json.loads(stats.to_json())) print('\n') stats.get(filters=['neighbor_address', 'neighbor_id', 'neighbor_state']) pprint(json.loads(stats.to_json()))
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.
user@host:~$ python3 junos-pyez-ospf-filters.py {'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_state': 'Full'}, '198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_state': 'Full'}} {'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_id': '192.168.0.2', 'neighbor_state': 'Full'}, '198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_id': '192.168.0.3', 'neighbor_state': 'Full'}}
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
.
Palabra clave |
Descripción |
Expresión |
---|---|---|
|
Palabra que contiene sólo caracteres hexadecimales |
hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1)) & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1)) |
|
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)) |
|
Palabra compuesta de dígitos y un signo de porcentaje final (%) |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
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)) |
|
Palabra compuesta de caracteres alfanuméricos o alfanuméricos |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
Una o más |
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.
ICMP Statistics: 0 requests 0 throttled 0 network unreachables 0 ttl expired 0 redirects 0 mtu exceeded 0 source route denials 0 filter prohibited 0 other unreachables 0 parameter problems 0 ttl captured 0 icmp/option handoffs 0 igmp v1 handoffs 0 tag te requests 0 tag te to RE ICMP Errors: 0 unknown unreachables 0 unsupported ICMP type 0 unprocessed redirects 0 invalid ICMP type 0 invalid protocol 0 bad input interface 0 bad route lookup 0 bad nh lookup 0 bad cf mtu 0 runts ICMP Discards: 0 multicasts 0 bad source addresses 0 bad dest addresses 0 IP fragments 0 ICMP errors 0 unknown originators ICMP Debug Messages: 0 throttled ICMP Rate Limit Settings: 500 pps per iff 1000 pps total
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.
--- ICMPStatsTable: command: show icmp statistics target: fpc1 view: ICMPStatsView ICMPStatsView: fields: discards: _ICMPDiscardsTable errors: _ICMPErrorsTable rate: _ICMPRateTable _ICMPDiscardsTable: title: ICMP Discards key: name view: _ICMPDiscardsView _ICMPDiscardsView: regex: value: \d+ name: '(\w+(\s\w+)*)' _ICMPErrorsTable: title: ICMP Errors key: name view: _ICMPErrorsView _ICMPErrorsView: regex: error: numbers name: words _ICMPRateTable: title: ICMP Rate Limit Settings key: name view: _ICMPRateView _ICMPRateView: regex: rate: numbers name: words
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.
_ICMPDiscardsTable: title: ICMP Discards key: name view: _ICMPDiscardsView _ICMPDiscardsView: regex: value: \d+ name: '(\w+(\s\w+)*)'
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.
_ICMPErrorsTable: title: ICMP Errors key: name view: _ICMPErrorsView _ICMPErrorsView: regex: error: numbers name: words
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.
SENT: Ukern command: show ithrottle id 0 ID Usage % Cfg State Oper State Name -- ------- --------- ---------- -------- 0 50.0 1 1 TOE ithrottle Throttle Times: In hptime ticks In ms --------------- ------ Timer Interval 333333 5.000 Allowed time 166666 2.500 Allowed excess 8333 0.125 Start time 488655082 n/a Run time this interval 0 0.000 Deficit 0 0.000 Run time max 17712 0.266 Run time total 144154525761 2162317 Min Usage Perc: 25.0 Max Usage Perc: 50.0 AdjustUsageEnable: 1 Throttle Stats: Starts : 65708652 Stops : 65708652 Checks : 124149442 Enables : 0 Disables : 0 AdjUp : 6 AdjDown : 4
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.
IthrottleIDTable: command: show ithrottle id {{ id }} args: id: 0 item: '*' target: fpc1 view: IthrottleIDView IthrottleIDView: regex: min_usage: 'Min Usage Perc: (\d+\.\d+)' max_usage: 'Max Usage Perc: (\d+\.\d+)' usg_enable: 'AdjustUsageEnable: (\d)' fields: throttle_stats: _ThrottleStatsTable _ThrottleStatsTable: title: Throttle Stats delimiter: ":"
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.
{'max_usage': 50.0, 'min_usage': 25.0, 'throttle_stats': {'AdjDown': 4, 'AdjUp': 6, 'Checks': 124149442, 'Disables': 0, 'Enables': 0, 'Starts': 65708652, 'Stops': 65708652}, 'usg_enable': 1}