Definir visualizações das tabelas operacionais do Junos PyEZ que analisam a saída não estruturada
Tabelas operacionais (op) do Junos PyEZ para obter dados de extração de saída não estruturados 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 está associada a uma visão, que é usada para acessar campos nos itens da Tabela e mapeá-los para variáveis Python definidas pelo usuário. Você associa uma Tabela a uma visão específica, incluindo a view
propriedade na definição da Tabela, que tem o nome View como seu argumento.
Uma vista mapeia suas variáveis definidas pelo usuário para dados nos itens de Tabela selecionados. Uma vista permite que você acesse campos específicos na saída como variáveis com propriedades que podem ser manipuladas em Python. O Junos PyEZ lida com a extração dos dados em Python, bem como qualquer tipo de conversão ou normalização de dados. As chaves definidas na visualização devem ser nomes de variáveis python válidos.
Este tópico discute os diferentes componentes da Visão.
Resumo dos parâmetros em visualizações para analisar a saída não estruturada
As visualizações do Junos PyEZ, como tabelas, são formatadas usando YAML. As visualizações que analisam a saída não estruturada podem incluir uma série de parâmetros, que são resumidos na Tabela 1.
Parâmetro de visualização |
Descrição |
---|---|
Veja o nome |
Identificador definido pelo usuário para a visualização. |
|
(Opcional) Lista de títulos da coluna na saída de comando. |
|
(Opcional) Array associativo, ou nívem, de um ou mais pares de valor-chave que mapeiam uma chave definida pelo usuário para uma corda contendo uma expressão matemática. Para cada iteração dos dados, a expressão é avaliada usando a função Python |
|
(Opcional) Array associativo, ou cookies, de pares de valor-chave que mapeiam uma chave definida pelo usuário para uma string. Se a string estiver presente na saída, a variável será definida como True, caso contrário, a variável será definida como Falsa. |
|
(Opcional) Array associativo, ou diagrama, de pares de valor-chave 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 de comando. |
|
(Opcional) Lista de uma ou mais chaves definidas em |
|
(Opcional) Lista de expressões regulares para combinar com o conteúdo desejado. |
Veja o nome
O nome De visualização é um identificador definido pelo usuário para a visualização. Você associa uma Tabela a uma visão específica, incluindo a view
propriedade na definição da Tabela e fornecendo o nome De visualização como argumento.
O exemplo a seguir define uma visão nomeada ChassisFanView
, que é mencionada pelo parâmetro da view
Tabela:
--- 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 columns
parâmetro em uma Visão para extrair e analisar a saída de comando que é formatada em linhas e colunas.
Considere a saída de comando a seguir show ospf neighbor
:
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 Visualização e mapeie seu nome variável Python para o nome da coluna. O aplicativo armazena a chave e o valor extraído da saída de comando para essa coluna como um par de valor-chave no par de valor-chave para o item determinado.
A visão a seguir extrai os dados de cada coluna na show ospf neighbor
saída de 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 para cada vizinho incluem as chaves da 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 Visualização. Para obter mais informações, veja filtros.
Alguma saída de comando inclui 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 multiline em uma vista, definir o elemento-chave da coluna igual a uma lista das palavras em cada linha para esse título. A visão a seguir define as colunas para a saída de 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 Eval (eval)
Você pode usar o parâmetro opcional eval
para adicionar ou modificar pares de valor-chave nos dados finais devolvidos pela Tabela e visualização. O eval
parâmetro mapeia um nome-chave para uma corda que contém uma expressão matemática que é avaliada pela função Python eval
. Você pode incluir o eval
parâmetro em tabelas e visualizações, e eval
pode definir e calcular vários valores.
Quando você usa eval
em uma Tabela, ela faz referência ao diagrama completo de dados para o cálculo, e o valor chave e calculado é adicionado como um único item adicional ao níquete. Quando você usa eval
em uma Visualização, a expressão é calculada em cada iteração dos dados, e o valor calculado é adicionado aos dados para essa iteração. Se o eval
nome-chave corresponde a uma chave definida na Visualização, eval
substitua o valor dessa chave pelo valor calculado. Se o eval
nome-chave não corresponder a uma chave definida na Visualização, eval
adicione a nova chave e o valor calculado aos dados.
A eval
expressão pode fazer referência ao data
náucaro devolvido pela Vista. A expressão deve fazer referência data
usando uma variável modelo Jinja, para que o Junos PyEZ possa substituir a variável pelo nívem quando a expressão for avaliada.
O exemplo a seguir usa eval
na definição De visualização. A cpu
entrada modifica o valor existente do cpu
campo para cada item no níquete de dados, e a max
entrada cria um novo par de valor-chave para cada item no níquete 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 }}'.split('/'))[1]"
Considere a saída de amostra a seguir 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
View modifica cada cpu
entrada para omitir o sinal por cento (%). Como resultado, os dados incluem "0" em vez de "0%". Além disso, ela adiciona uma nova chave, max
e seu valor calculado para cada item.
'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 exemplos que usam eval
na definição de Tabela, veja Eval Expression (eval).
Existe
Você pode usar o parâmetro opcional exists
em uma Visualização para indicar se uma string está presente na saída de comando. exists
é um domínio de pares de valor-chave que mapeiam um nome variável Python definido pelo usuário na string para combinar na saída de comando. Se a corda estiver presente na saída, a variável será definida para True
. Caso contrário, a variável está definida para False
.
Considere a show host_loopback status-summary
saída de 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 de comando inclui uma No detected wedges
string ou uma No toolkit errors
corda:
--- 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 Tabela e a Visualização para testar as cordas e publicar os valores resultantes em seu aplicativo Junos PyEZ, ambas as variáveis estão definidas para True
este caso.
{'no_detected_wedges': True, 'no_toolkit_errors': True}
Campos
A saída de 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 de comando usando uma única tabela e visualização. Para analisar esse tipo de saída, você pode incluir o parâmetro opcional fields
na Visualização. fields
é um diagrama de pares de valor-chave 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 de comando. Cada tabela aninhada pode fazer referência à sua própria Vista, que é usada para analisar os dados selecionados por essa Tabela.
Considere a show xmchip 0 pt stats
saída de 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 visualizaçã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 de comando. As _WANPTStatTable
tabelas e _FabricPTStatTable
as tabelas extraem os dados das WAN PT statistics
seções e das Fabric PT statistics
seções, respectivamente. Neste caso, as Tabelas usam o delimiter
parâmetro para extrair e dividir os dados, para que não precisem fazer referência a uma visã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 embaixo 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 show ttp statistics
saída de 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 parâmetro para fazer referência a fields
várias tabelas aninhadas, que extraem os dados nas diferentes seções da saída. Cada Tabela faz referência à sua própria visã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 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 de comando que é formatado em linhas e colunas. Ao incluir o columns
parâmetro em uma Visualização, você pode incluir opcionalmente o filters
parâmetro para filtrar quais dados da coluna estão incluídos na saída final. O filters
parâmetro define 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 Visualização e também pode definir ou substituir os valores do filtro no aplicativo Junos PyEZ.
Considere a 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
Na visão a seguir, o columns
parâmetro define as chaves para todas as colunas na saída de comando correspondente, mas o filters
parâmetro inclui apenas os dados das colunas e State
do Address
níquete de dados.
--- 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 Junos PyEZ a seguir chama get()
primeiro sem nenhum argumento, que recupera os dados usando a lista padrão de filtros definidos na Visualização. A segunda chamada inclui get()
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()
usar os filtros definidos na Visualização e a segunda chamada usa os filtros definidos na chamada, que se sobrepõem aos definidos na Visualização.
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 Vista para combinar e extrair campos específicos na saída de comando. regex
é um diagrama que mapeia as chaves para expressões regulares. Se a Tabela correspondente não definir item: '*'
, o Junos PyEZ combina as expressões regulares e corresponde ao resultado em relação a cada linha de saída. No entanto, se a Tabela definir item: '*'
extrair os dados como uma única corda de texto, o Junos PyEZ, em vez disso, corresponde a cada expressão regular individual em relação a toda a cadeia de texto.
O grupo de captura definido na expressão regular determina os dados extraídos do campo e armazenados no níquete de dados. Se você definir um grupo de captura, apenas o valor para esse grupo é 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 strings, enquanto (d+).d+
apenas armazena a parte inteiro dos dados. Se você definir vários grupos, apenas o valor para o primeiro grupo é armazenado.
O Junos PyEZ utiliza o pyparsing
módulo para definir uma série de palavras-chave integradas que você pode usar no lugar de uma expressão regular. A Tabela 2 lista a palavra-chave, uma breve descrição e a expressão correspondente, de onde pp
é derivado import pyparsing as pp
.
Palavra |
Descrição |
Expressão |
---|---|---|
|
Palavra que contém apenas caracteres hexadimais |
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 de dígitos e um sinal percentual de rastreamento (%) |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
Uma ou mais palavras compostas de caracteres imprimíveis (quaisquer caracteres não whitespace) |
printables = pp.OneOrMore(pp.Word(pp.printables)) |
|
Palavra composta de caracteres alfa ou alfanumérico |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
Uma ou mais |
words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i)) |
Considere a saída de comando a seguir show icmp statistics
. Cada seção da 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 vista principal define fields
, que faz referência a tabelas e visualizações aninhadas que analisam cada seção da saída. As visualizações aninhadas definem o regex
parâmetro a combinar com os 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 da ICMP Discards
seção na saída de comando. O _ICMPDiscardsView
View define duas chaves e name
, value
qual mapa para expressões regulares. value
combina com um ou mais dígitos, e name
combina com uma ou mais palavras. Como a Tabela não defineitem: '*'
, as expressões regulares são combinadas e combinadas 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 da ICMP Errors
seção na saída de comando. O _ICMPErrorsView
View define as error
teclas e name
as teclas e usa as palavras-chave integradas numbers
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, os dados extraídos item: '*'
serão considerados como uma única corda de texto. Neste caso, cada expressão regular na visualização correspondente corresponde a toda a corda.
Considere a saída de 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 corda. O parâmetro do regex
View define três expressões regulares. Cada padrão de regex é combinado com toda a corda. Como as expressões regulares definem grupos de captura, o Junos PyEZ só armazena 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 combinado 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}