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.
|
Parámetro de vista |
Descripción |
|---|---|
|
Ver nombre |
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. 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. |
|
|
(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 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:
---
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 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:
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 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:
---
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
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.
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 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:
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 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 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.
---
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 }}[4:12]"
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 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.
'Maintenance': {'cpu': '0',
'max': '5 ms',
'name': 'Maintenance',
'pid-pr': '1 H',
'stack': '680/32768',
'state': 'asleep',
'time': '0/5/5 ms'},
'Timer Services': {'cpu': '0',
'max': '7 ms',
'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, 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.
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 si se debe probar si la salida 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 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.
{'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 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:
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 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.
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: ":"
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.
{'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)
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.
---
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 que se extrajeron y analizaron en 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 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:
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 del comando correspondiente. Con el parámetro included filters , el diccionario de datos resultante incluye solo los datos de las Address columnas y State .
---
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 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.
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()))
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.
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'}}
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.
|
Palabra clave |
Descripción |
Expresión |
|---|---|---|
|
|
Palabra que contiene solo 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 por 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 un 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 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.
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 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 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.
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
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.
_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 la salida 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 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.
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: ":"
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.
{'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}
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.