Definir tabelas operacionais do Junos PyEZ para analisar a saída estruturada
RESUMO Crie tabelas personalizadas que selecionem itens específicos da saída RPC XML para extrair informações operacionais de um dispositivo Junos.
Tabelas operacionais (op) junos PyEZ para dados de extração de saída estruturados da saída XML de um RPC executado em um dispositivo Junos. Isso permite recuperar e revisar rapidamente as informações de estado operacional relevantes para o dispositivo.
Tabelas do Junos PyEZ são formatadas usando YAML. As definições da Tabela op podem incluir uma série de parâmetros necessários e opcionais, que são resumidos na Tabela 1.
Nome do parâmetro da tabela |
Parâmetro da tabela |
Descrição |
---|---|---|
Nome da tabela |
– |
Identificador definido pelo usuário para a Tabela. |
Comando RPC |
|
Solicite o nome da tag do RPC para execução. |
Argumentos padrão do RPC |
|
(Opcional) Opções e argumentos de comando padrão para o RPC. |
Chave de argumento opcional do RPC |
|
(Opcional) Faça referência ao primeiro argumento opcional de um comando quando esse argumento não requer uma palavra-chave específica. Se você não incluir esta propriedade, você deve especificar a palavra-chave, ou nome da opção, para argumentos opcionais que estão incluídos na lista de argumentos do |
Item da tabela |
|
Expressão XPath em relação ao elemento de nível superior dentro do Esses itens se tornam a referência para a visão associada. |
Chave do item da tabela |
|
(Opcional) Expressão XPath ou uma lista de expressões XPath que seleciona a tag ou as tags cujos valores identificam exclusivamente o item da Tabela para itens que não usam o Se o item usar o |
Vista da tabela |
|
Visualização usada para extrair dados de campo dos itens da Tabela. |
Considere a seguinte Tabela de operações do Junos PyEZ, EthPortTable
que está incluída na distribuição Junos PyEZ. A Tabela extrai informações de estado operacional para interfaces Ethernet no dispositivo alvo:
--- EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
As seções a seguir discutem os diferentes componentes da Tabela.
Nome da tabela
O nome da Tabela é um identificador definido pelo usuário para a Tabela. O arquivo ou string YAML pode conter uma ou mais tabelas. O início do documento YAML deve ser deixado justificado. Por exemplo:
--- EthPortTable: # Table definition
Comando RPC (rpc)
Tabelas op Junos PyEZ para extração de saída estruturada informações específicas da saída XML de um RPC. Você deve incluir a rpc
propriedade na definição da Tabela de operações para especificar o RPC a ser executado em um dispositivo.
O rpc
valor é a tag de solicitação Junos XML para um comando. Por exemplo, o nome da tag de solicitação para o show interfaces
comando é get-interface-information
.
rpc: get-interface-information
A tag de solicitação pode ser encontrada usando um dos seguintes métodos:
Anexando a opção
| display xml rpc
após o comando no Junos OS CLIExecução do método de instância
display_xml_rpc('command', format='text')
Junos PyEZDevice
Encontrando o comando e a tag correspondente no Junos XML API Explorer
Argumentos padrão do RPC (args)
A propriedade opcional args
define as opções de comando padrão e os argumentos para o RPC. Estes são listados como pares de valor-chave que são incorporados em args
. Um argumento padrão é usado quando você liga para o get()
método em seu script e não fornece um argumento que substitui esse padrão.
Se uma opção for apenas uma bandeira que não exija um valor específico, você pode incluí-la na lista de argumentos definindo o valor da opção na True
definição da Tabela. Por exemplo, o show interfaces media
comando mapeia a tag de solicitação get-interface-information
com o argumento media: True
. Se uma opção exigir um valor, defina o valor do argumento para o valor que você deseja usar como padrão.
rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*'
Se o nome da opção na interface de linha de comando (CLI) do Junos OS estiver hifenizado, você deve alterar quaisquer traços no nome para sublinhar.
Por padrão, o Junos PyEZ normaliza todas as chaves e valores da Tabela, o que elimina todo o whitespace líder e trailing e substitui sequências de caracteres whitespace internos por um único espaço. Para desativar a normalização de uma Tabela, inclua normalize: False
na lista de argumentos.
args: normalize: False
Chave de argumento opcional RPC (args_key)
Você usa a propriedade opcional args_key
nos casos em que um comando CLI toma um primeiro argumento opcional que não exige que você especifique explicitamente um nome de opção ou palavra-chave. No exemplo a seguir, o show interfaces
comando toma um nome de interface como um argumento opcional:
user@router> show interfaces ? Possible completions: <[Enter]> Execute this command <interface-name> Name of physical or logical interface ge-0/0/0 ge-0/0/0.0
A args_key
propriedade permite que você use esse argumento opcional ao recuperar dados operacionais sem precisar especificar explicitamente a palavra-chave ou o nome da opção.
args_key: interface_name
Se você incluir a args_key
propriedade em sua definição de Tabela, você pode especificar o valor do argumento, mas omitir o nome da opção quando recuperar os dados.
eths = EthPortTable(dev).get('ge-0/3/0')
Se você omitir a args_key
propriedade em sua definição de Tabela, você deve especificar explicitamente o nome da opção se quiser incluir este parâmetro quando recuperar os dados.
eths = EthPortTable(dev).get(interface_name='ge-0/3/0')
Item da tabela (item)
A propriedade da Tabela item
, que é necessária em todas as definições da Tabela de operações, identifica os dados a serem extraídos da saída RPC. O item
valor é uma expressão XPath em relação ao elemento de alto nível dentro da <rpc-reply>
tag que seleciona os elementos desejados. Esses itens se tornam a referência para a visão associada.
O exemplo a seguir mostra uma amostra, saída de comando CLI truncada:
user@router> show interfaces media "[afgxe][et]-*" | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos"> <interface-information xmlns="http://xml.juniper.net/junos/15.1R1/junos-interface" junos:style="normal"> <physical-interface> <name>ge-0/0/0</name> <admin-status junos:format="Enabled">up</admin-status> <oper-status>up</oper-status> ... </physical-interface> <physical-interface> <name>ge-0/0/1</name> <admin-status junos:format="Enabled">up</admin-status> <oper-status>up</oper-status> ... </physical-interface> </interface-information> </rpc-reply>
Para selecionar os <physical-interface>
elementos dessa saída, inclua a item
propriedade e especifique o XPath que seleciona o elemento. Neste caso, o <physical-interface>
elemento é uma criança direta do elemento de alto nível <interface-information>
, e a expressão XPath para o item
valor é apenas o nome do elemento.
item: physical-interface
Esses itens se tornam a referência para a visão associada.
Diferentes dispositivos podem emitir diferentes elementos de saída para o mesmo RPC. Como resultado, o XPath do item pode variar dependendo do sistema. A item
propriedade oferece suporte ao uso do operador de tubulação (|) para especificar um "ou" implícito para selecionar entre vários nós possíveis. Quando a item
propriedade inclui este operador, a key
propriedade deve usar uma lista. Por exemplo:
UTMStatusTable: rpc: show-utmd-status item: //multi-routing-engine-item/utmd-status | //utmd-status view: UTMStatusView key: - re-name | Null
Chave de item da tabela (chave)
A propriedade opcional key
é uma expressão XPath ou uma lista de expressões XPath que seleciona quais tags ou tags são usadas para identificar de forma exclusiva um item de Tabela para aqueles itens que não usam o <name>
elemento como identificador ou para casos em que você queira usar chaves compostas.
Na saída de comando a seguir, cada <physical-interface>
elemento é identificado exclusivamente por seu <name>
elemento infantil:
user@router> show interfaces media "[afgxe][et]-*" | display xml <rpc-reply> <interface-information> <physical-interface> <name>ge-0/0/0</name> ... </physical-interface> <physical-interface> <name>ge-0/0/1</name> ... </physical-interface> </interface-information> </rpc-reply>
Se a propriedade da Tabela item
selecionar os <physical-interface>
elementos, você pode omitir a key
propriedade da definição da Tabela se quiser usar o <name>
elemento como chave por padrão.
Por outro lado, considere a seguinte show route brief
saída de comando:
<rpc-reply> <route-information> <route-table> ... <rt junos:style="brief"> <rt-destination>10.0.0.0/24</rt-destination> <rt-entry> <active-tag>*</active-tag> <current-active/> <last-active/> <protocol-name>Static</protocol-name> <preference>5</preference> <age junos:seconds="9450374">15w4d 09:06:14</age> ... </rt-entry> </rt> <rt junos:style="brief"> <rt-destination>10.0.10.0/24</rt-destination> <rt-entry> <active-tag>*</active-tag> <current-active/> <last-active/> <protocol-name>Direct</protocol-name> <preference>0</preference> <age junos:seconds="9450380">15w4d 09:06:20</age> ... </rt-entry> </rt> </route-table> </route-information> </rpc-reply>
Ao selecionar os route-table/rt
elementos, não há elemento correspondente <name>
que identifique exclusivamente cada entrada de rota. Quando o <name>
identificador está ausente, a key
propriedade pode especificar qual tag ou tags identificam cada item com exclusividade. Neste caso, você pode identificar cada route-table/rt
item com exclusividade usando <rt-destination>
como chave.
item: route-table/rt key: rt-destination
Além disso, a partir do Junos PyEZ Release 2.3.0, uma Tabela pode definir key: Null
para indicar que uma chave não é necessária. Neste caso, a Tabela e a Visualização retornam os dados como um simples diagrama em vez de um aninhado com chaves.
Os itens de tabela podem ser definidos por uma chave que consiste em um único elemento ou vários elementos. As chaves de um único elemento usam uma expressão XPath simples para o valor da key
propriedade. As chaves compósitos são definidas por uma lista de expressões XPath. Considere a definição da Tabela a seguir:
PicHwTable: rpc: get-chassis-inventory item: .//name[starts-with(.,'PIC')]/parent::* key: - ancestor::*[starts-with(name,'FPC')]/name - ancestor::*[starts-with(name,'MIC')]/name - name view: PicHwView
A chave principal para esta definição da Tabela pode ser semelhante à seguinte:
('FPC 2', 'MIC 0', 'PIC 0')
Se uma chave composta de componentes fizer referência a um elemento ausente, o Junos PyEZ substituirá o valor na chave por None
.
('FPC 0', None, 'PIC 0')
O key
imóvel deve usar uma lista quando a item
propriedade incluir o operador de tubulação ( |).
A key
propriedade também oferece suporte ao operador de tubulação ( |), que permite que a Tabela selecione entre vários nós possíveis. O operador permite que você use a mesma Tabela mesmo nos casos em que diferentes sistemas emitem diferentes elementos de saída para o mesmo RPC. Por exemplo, o LLDPNeighborTable, que é mostrado aqui para referência, pode selecionar o lldp-local-interface
elemento ou lldp-local-port-id
como sua chave:
--- LLDPNeighborTable: rpc: get-lldp-neighbors-information item: lldp-neighbor-information key: lldp-local-interface | lldp-local-port-id view: LLDPNeighborView LLDPNeighborView: fields: local_int: lldp-local-interface | lldp-local-port-id local_parent: lldp-local-parent-interface-name remote_type: lldp-remote-chassis-id-subtype remote_chassis_id: lldp-remote-chassis-id remote_port_desc: lldp-remote-port-description remote_sysname: lldp-remote-system-name
Quando a key
propriedade usa o |
operador, cada chave presente na resposta do RPC é adicionada à lista de chaves. O operador pode ser usado para especificar um "ou" implícito e é útil em situações em que diferentes nomes de tags estão presentes para diferentes tipos de configurações ou versões. Por exemplo, se o RPC retornar lldp-local-interface
como identificador para um dispositivo e o mesmo RPC retornar lldp-local-port-id
do identificador para outro dispositivo, a Tabela selecionará automaticamente a chave apropriada.
Vista da tabela (visualização)
A view
propriedade associa a definição da Tabela a uma visão específica. Uma vista mapeia os nomes de campo definidos pelo usuário para elementos nos itens de Tabela selecionados usando expressões XPath. Você pode personalizar a Visualização para selecionar apenas os elementos necessários dos itens da Tabela.