Definir visualizações para tabelas operacionais do Junos PyEZ que analisam saídas não estruturadas
As tabelas operacionais (op) do Junos PyEZ para saída não estruturada extraem dados da saída de texto de um comando CLI executado em um dispositivo Junos ou um comando vty executado em um determinado Concentrador PIC Flexível (FPC). Uma tabela é associada a uma exibição, que é usada para acessar campos nos itens da tabela e mapeá-los para variáveis do Python definidas pelo usuário. Você associa uma Tabela a um Modo de Exibição específico incluindo a view propriedade na definição de Tabela, que usa o nome do Modo de Exibição como seu argumento.
Uma exibição mapeia suas variáveis definidas pelo usuário para dados nos itens de tabela selecionados. Uma exibição permite que você acesse campos específicos na saída como variáveis com propriedades que você pode manipular em Python. O Junos PyEZ lida com a extração dos dados em Python, bem como qualquer conversão de tipo ou normalização de dados. As chaves definidas na View devem ser nomes de variáveis Python válidos.
Este tópico discute os diferentes componentes do Modo de Exibição.
Resumo dos parâmetros em exibições para análise de saída não estruturada
As visualizações do Junos PyEZ, como as tabelas, são formatadas usando o YAML. As exibições que analisam a saída não estruturada podem incluir vários parâmetros. A Tabela 1 resume os parâmetros.
|
Parâmetro de exibição |
Descrição |
|---|---|
|
Ver nome |
Identificador definido pelo usuário para a exibição. |
|
|
(Opcional) Lista de títulos de coluna na saída do comando. |
|
|
(Opcional) Matriz associativa, ou dicionário, de um ou mais pares de valores-chave que mapeiam uma chave definida pelo usuário para uma cadeia de caracteres que contém uma expressão matemática. A expressão é avaliada para cada iteração dos dados. A chave e o valor calculado são adicionados aos dados correspondentes a essa iteração. |
|
|
(Opcional) Matriz associativa, ou dicionário, de pares de chave-valor que mapeiam uma chave definida pelo usuário para uma cadeia de caracteres. Se a string estiver presente na saída, a variável será definida como True, caso contrário, a variável será definida como False. |
|
|
(Opcional) Matriz associativa, ou dicionário, de pares de chave-valor que mapeiam uma chave definida pelo usuário para o nome de uma tabela aninhada que analisa uma seção específica da saída do comando. |
|
|
(Opcional) Lista de uma ou mais chaves definidas em |
|
|
(Opcional) Lista de expressões regulares para corresponder ao conteúdo desejado. |
Ver nome
O nome da exibição é um identificador definido pelo usuário para a exibição. Você associa uma Tabela a uma Exibição específica incluindo a view propriedade na definição de Tabela e fornecendo o nome da Exibição como seu argumento.
O exemplo a seguir define uma View chamada ChassisFanView, que é referenciada view pelo 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
colunas
Você pode usar o parâmetro em uma exibição para extrair e analisar a columns saída do comando formatada em linhas e colunas.
Considere a seguinte show ospf neighbor saída 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 extrair os dados, inclua o columns parâmetro na View e mapeie o nome da variável Python para o nome da coluna. O aplicativo armazena a chave e o valor extraídos da saída do comando para essa coluna como um par chave-valor no dicionário para o item fornecido.
A exibição a seguir extrai os dados de cada coluna na saída do 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
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, os dados de cada vizinho incluem as chaves de coluna e os dados correspondentes.
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 os dados para incluir apenas dados de colunas selecionadas, inclua o filters parâmetro na exibição. Para obter mais informações, consulte filtros.
Algumas saídas de comando incluem títulos de coluna que abrangem várias linhas, por exemplo:
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 um título de coluna de várias linhas em um Modo de Exibição, defina o elemento-chave da coluna igual a uma lista das palavras em cada linha desse título. A exibição a seguir define as colunas para a saída do 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
Expressão de avaliação (eval)
Você pode usar o parâmetro opcional eval para adicionar ou modificar pares de chave-valor nos dados finais retornados pela Tabela e Exibição. O eval parâmetro mapeia um nome de chave para uma cadeia de caracteres que contém uma expressão matemática. Você pode incluir o eval parâmetro em Tabelas e Exibições e eval pode definir e calcular vários valores.
Quando você usa eval em uma tabela, ela faz referência ao dicionário de dados completo para o cálculo. A chave e o valor calculado são adicionados como um único item adicional ao dicionário. Quando você usa eval em uma exibição, a expressão é calculada em cada iteração dos dados. O valor calculado é adicionado aos dados dessa iteração. Se o nome da eval chave corresponder a uma chave definida na Exibição, eval substituirá o valor dessa chave pelo valor calculado. Se o nome da eval chave não corresponder a uma chave definida na Exibição, eval adicionará a nova chave e o valor calculado aos dados.
A eval expressão pode fazer referência ao data dicionário retornado pelo Modo de Exibição. A expressão deve fazer referência data usando uma variável de modelo Jinja, para que o Junos PyEZ possa substituir a variável pelo dicionário quando a expressão for avaliada.
A partir do Junos PyEZ Release 2.8.1, as expressões usadas nas instruções Table e View eval são avaliadas usando uma implementação restrita para reduzir os riscos de segurança de execução de código. O Junos PyEZ analisa e valida cada expressão em relação a um conjunto compatível de sintaxe, funções, métodos e operações do Python antes da avaliação. As expressões que contêm elementos não suportados ou não seguros são rejeitadas com um UnsafeExpressionError erro. A Tabela 2 descreve as expressões com suporte.
| Categoria | Sintaxe suportada | Exemplo |
|---|---|---|
|
Aritmética |
+ - * / // % ** |
|
|
Lógica booleana |
|
|
|
Literais |
Inteiros, floats |
|
|
Literais de cadeia de caracteres |
|
|
|
Literais de dicionário |
|
|
|
Literais de lista |
|
|
|
Literais de conjunto |
|
|
|
Literais de tupla |
|
|
|
Comparação |
|
|
|
Dicionário |
|
|
|
Lista |
|
|
|
Conjunto |
|
{k for k in {{ data }}.keys()} |
|
Expressões condicionais |
|
|
|
Funções |
|
|
|
Gerador |
|
|
|
Indexação |
|
|
|
Membros |
|
|
|
Metodologia |
|
|
|
Fatiamento |
|
|
|
Operadores unários |
|
|
O exemplo a seguir usa eval na definição de View. A cpu entrada modifica o valor existente do cpu campo para cada item no dicionário de dados. A max entrada cria um novo par chave-valor para cada item no dicionário de dados.
---
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 a seguinte saída de exemplo para o 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% ...
O parâmetro do eval Modo de Exibição modifica cada cpu entrada para omitir o sinal de porcentagem (%). Como resultado, os dados incluem '0' em vez de '0%'. Além disso, ele adiciona uma nova chave, max, e seu valor calculado para cada item.
'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 obter exemplos usados eval na definição de tabela, consulte Expressão de avaliação (eval).
existe
Você pode usar o parâmetro opcional exists em uma View para indicar se uma string está presente na saída do comando. exists é um dicionário de pares de valores-chave que mapeiam um nome de variável Python definido pelo usuário para a string a ser correspondida na saída do comando. Se a string estiver presente na saída, a variável será definida como True. Caso contrário, a variável é definida como False.
Considere a saída do 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
A tabela a seguir define exists para testar se a saída do comando inclui uma No detected wedges cadeia de caracteres ou uma No toolkit errors cadeia de caracteres:
---
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
Quando você usa a Table and View para testar as strings e imprimir os valores resultantes em seu aplicativo Junos PyEZ, ambas as variáveis são definidas como True neste caso.
{'no_detected_wedges': True, 'no_toolkit_errors': True}
Campos
A saída do comando pode ser longa e complexa, e você pode precisar de uma lógica diferente para analisar diferentes seções da saída. Em alguns casos, você não pode analisar adequadamente a saída do comando usando uma única Tabela e Exibição. Para analisar esse tipo de saída, você pode incluir o parâmetro opcional fields no View. fields é um dicionário de pares de chave-valor que mapeiam uma chave definida pelo usuário para o nome de uma tabela aninhada que seleciona uma seção específica da saída do comando. Cada Tabela aninhada pode fazer referência à sua própria Exibição, que analisa os dados selecionados por essa Tabela.
Considere a saída do show xmchip 0 pt stats comando vty, que tem duas seções diferentes de dados:
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
A exibição a seguir XMChipStatsView usa o fields parâmetro para definir duas tabelas adicionais, que são usadas para analisar as duas seções diferentes da saída do comando. As _WANPTStatTable Tabelas e _FabricPTStatTable extraem os dados das seções e das Fabric PT statistics WAN PT statistics seções, respectivamente. Nesse caso, as Tabelas usam o delimiter parâmetro para extrair e dividir os dados. Assim, as Tabelas não precisam fazer referência a uma Exibição 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: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, cada chave definida em fields contém os dados selecionados e analisados pela tabela correspondente.
{'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 outro exemplo, considere a saída do 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)
O FPCTTPStatsView View usa o fields parâmetro para fazer referência a várias tabelas aninhadas, que extraem os dados nas diferentes seções da saída. Cada tabela faz referência a sua própria exibição ou usa o delimiter parâmetro para analisar os dados nessa seção.
---
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: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, cada fields chave contém os dados que foram extraídos e analisados pela tabela correspondente.
{'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
O columns parâmetro extrai dados da saída do comando formatado em linhas e colunas. Ao incluir o columns parâmetro em uma exibição, você pode, opcionalmente, incluir o filters parâmetro para filtrar quais dados de coluna estão incluídos na saída final. O filters valor é uma lista de uma ou mais chaves definidas em columns. O conjunto final de dados inclui apenas dados das colunas selecionadas. Você pode fornecer filtros padrão na definição de View e também pode definir ou substituir valores de filtro no aplicativo Junos PyEZ.
Considere a saída do 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
Na exibição a seguir, o columns parâmetro define chaves para todas as colunas na saída do comando correspondente. Com o parâmetro incluído filters , o dicionário de dados resultante inclui apenas os dados das Address colunas e 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
O código do Junos PyEZ a seguir primeiro chama get() sem argumentos, o que recupera os dados usando a lista padrão de filtros definida na View. A segunda chamada para get() inclui o filters argumento, que substitui a lista de filtros definida no View.
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()))
Quando você executa o aplicativo, a primeira chamada para get() usa os filtros definidos na exibição. A segunda chamada usa os filtros definidos na chamada, que substituem os definidos no View.
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
Você pode usar o parâmetro opcional regex em uma exibição para corresponder e extrair campos específicos na saída do comando. regex é um dicionário que mapeia chaves para expressões regulares. Se a tabela correspondente não definir item: '*', o Junos PyEZ combina as expressões regulares e combina o resultado com cada linha de saída. No entanto, se a tabela definir item: '*' a extração dos dados como uma única string de texto, o Junos PyEZ corresponderá cada expressão regular individual à string de texto inteira.
O grupo de captura definido na expressão regular determina os dados extraídos do campo e armazenados no dicionário de dados. Se você definir um grupo de captura, somente o valor desse grupo será armazenado nos dados. Caso contrário, o Junos PyEZ armazena o valor que corresponde à expressão completa. Por exemplo, (d+.d+) recupera e armazena um valor flutuante da expressão de pesquisa de cadeia de caracteres, enquanto (d+).d+ armazena apenas a parte inteira dos dados. Se você definir vários grupos, somente o valor do primeiro grupo será armazenado.
O Junos PyEZ aproveita o pyparsing módulo para definir várias palavras-chave integradas que você pode usar no lugar de uma expressão regular. A Tabela 3 lista a palavra-chave, uma breve descrição e a expressão correspondente, onde pp é derivada de import pyparsing as pp.
|
Palavras-chave |
Descrição |
Expressão |
|---|---|---|
|
|
Palavra contendo apenas caracteres hexadecimais |
hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
& pp.OneOrMore(pp.Word('abcdefABCDEF', min=1)) |
|
|
Palavra que consiste em um valor inteiro ou flutuante |
numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i)) |
|
|
Palavra composta por dígitos e um sinal de porcentagem à direita (%) |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
|
Uma ou mais palavras compostas de caracteres imprimíveis (qualquer caractere que não seja de espaço em branco) |
printables = pp.OneOrMore(pp.Word(pp.printables)) |
|
|
Palavra composta por caracteres alfanuméricos ou alfanuméricos |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
|
Uma ou mais |
words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i)) |
Considere a seguinte show icmp statistics saída de comando. Cada seção de saída está sob um título de seção específico e os dados consistem em um número e uma ou mais palavras.
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 analisar a saída anterior, a Exibição principal define fields, que faz referência a Tabelas e Exibições aninhadas que analisam cada seção da saída. As exibições aninhadas definem o regex parâmetro a ser correspondido aos dados extraídos pela tabela correspondente.
---
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 exemplo, a _ICMPDiscardsTable Tabela seleciona os dados na ICMP Discards seção na saída do comando. O _ICMPDiscardsView Modo de Exibição define duas chaves value e name, que são mapeadas para expressões regulares. value corresponde a um ou mais dígitos e name corresponde a uma ou mais palavras. Como a Tabela não define item: '*', as expressões regulares são combinadas e comparadas com cada linha de dados nessa seção.
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
A _ICMPErrorsTable Tabela seleciona os dados na ICMP Errors seção na saída do comando. A _ICMPErrorsView exibição define as error chaves e name . Os campos usam as palavras-chave numbers internas e words no lugar de definir explicitamente expressões regulares.
_ICMPErrorsTable:
title: ICMP Errors
key: name
view: _ICMPErrorsView
_ICMPErrorsView:
regex:
error: numbers
name: words
Se a Tabela definir item: '*', os dados extraídos serão considerados uma cadeia de texto. Nesse caso, cada expressão regular na exibição correspondente corresponde à cadeia de caracteres inteira.
Considere a saída do 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
A tabela a seguir usa item: '*' para extrair os dados como uma única cadeia de caracteres. O parâmetro do Modo de regex Exibição define três expressões regulares. Cada padrão regex é comparado com a cadeia de caracteres inteira. Como as expressões regulares definem a captura de grupos, o Junos PyEZ armazena apenas os dados que correspondem ao 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: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, os dados incluem os três regex itens, que contêm o valor correspondido pelo grupo de captura para essa expressão.
{'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}
Tabela de histórico de alterações
A compatibilidade com recursos é determinada pela plataforma e versão utilizada. Use o Explorador de recursos para determinar se um recurso é compatível com sua plataforma.
eval são avaliadas usando uma implementação restrita.