Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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.

Tabela 1: Parâmetros em visualizações para tabelas de operações do Junos PyEZ para saída não estruturada

Parâmetro de exibição

Descrição

Ver nome

Identificador definido pelo usuário para a exibição.

columns

(Opcional) Lista de títulos de coluna na saída do comando.

eval

(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.

exists

(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.

fields

(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.

filters

(Opcional) Lista de uma ou mais chaves definidas em columns. O conjunto final de dados inclui apenas dados das colunas selecionadas.

regex

(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:

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:

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:

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.

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:

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:

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.

Tabela 2: Expressões com suporte em instruções eval
Categoria Sintaxe suportada Exemplo

Aritmética

+ - * / // % **

a+b
a*100

Lógica booleana

and, or

a > 0 and b > 0

Literais

Inteiros, floats

123
3.14

Literais de cadeia de caracteres

'text'

Literais de dicionário

{'a':1}

Literais de lista

[1,2,3]

Literais de conjunto

{1,2,3}

Literais de tupla

(1,2,3)

Comparação
Operadores

== != < <= > >=

{{ cpu }} > 80

Dicionário
Compreensões

{k:v for ...}

{k:v for k,v in {{ data }}.items()}

Lista
Compreensões

[expr for ...]

[v['errors'] for k,v in {{ data }}.items()]

Conjunto
Compreensões

{expr for ...}

{k for k in {{ data }}.keys()}

Expressões condicionais

x if cond else y

'busy' if {{ cpu }} > 80 else 'idle'

Funções

abs()—Valor absoluto
dict()—Crie um dicionário
isinstance()— Verificação de tipo
len()— Comprimento de um iterável
max()— Valor máximo
min()— Valor mínimo
sum()—Somar um iterável

sum([1,2,3])

Gerador
Expressões

(expr for ...)

(v for v in {{ data }}.values())

Indexação

[n]

{{ data }}[0]

Membros

in, not in

'xe' in {{ name }}

Metodologia

endswith()— Verificação de sufixo de string
get()—Pesquisa segura no dicionário
items()— Retornar chaves e valores de dicionário
keys()— Retornar chaves de dicionário
values()— Retornar valores de dicionário

{{ data }}.items()

Fatiamento

[start:end:step]

'{{ cpu }}'[:-1]

Operadores unários

+x, -x, not x

-{{ cpu }}

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.

Considere a seguinte saída de exemplo para o show threads comando vty:

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.

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.

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:

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.

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:

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.

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.

Como outro exemplo, considere a saída do show ttp statistics comando vty:

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.

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.

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:

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 .

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.

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.

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.

Tabela 3: Palavras-chave do parâmetro regex

Palavras-chave

Descrição

Expressão

hex_numbers

Palavra contendo apenas caracteres hexadecimais

hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
    & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1))

numbers

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))

percentage

Palavra composta por dígitos e um sinal de porcentagem à direita (%)

percentage = pp.Word(pp.nums) + pp.Literal('%')

printables

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))

word

Palavra composta por caracteres alfanuméricos ou alfanuméricos

word = pp.Word(pp.alphanums) | pp.Word(pp.alphas)

words

Uma ou mais word cadeias de caracteres

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.

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.

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.

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.

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.

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.

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.

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.

Lançamento
Descrição
2.8.1
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.