Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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.

Tabela 1: Parâmetros de visualização para tabelas de opções do Junos PyEZ para saídas não estruturadas

Parâmetro de visualização

Descrição

Veja o nome

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

columns

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

eval

(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 eval . A chave e o valor calculado são adicionados aos dados correspondentes a essa iteração.

exists

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

fields

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

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

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 :

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:

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.

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:

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:

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.

Considere a saída de amostra a seguir para o show threads comando vty:

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, maxe seu valor calculado para cada item.

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.

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:

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.

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:

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.

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.

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

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.

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.

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:

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.

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.

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.

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.

Tabela 2: palavras-chave do parâmetro regex

Palavra

Descrição

Expressão

hex_numbers

Palavra que contém apenas caracteres hexadimais

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 de dígitos e um sinal percentual de rastreamento (%)

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

printables

Uma ou mais palavras compostas de caracteres imprimíveis (quaisquer caracteres não whitespace)

printables = pp.OneOrMore(pp.Word(pp.printables))

word

Palavra composta de caracteres alfa ou alfanumérico

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

words

Uma ou mais word cordas

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.

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.

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.

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.

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.

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.

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.