Definir tablas operativas de Junos PyEZ para analizar resultados estructurados
RESUMEN Cree tablas personalizadas que seleccionen elementos específicos de la salida XML RPC para extraer información operativa de un dispositivo Junos.
Las tablas operacionales (op) de Junos PyEZ para salida estructurada extraen datos de la salida XML de un RPC ejecutado en un dispositivo Junos. Esto le permite recuperar y revisar rápidamente la información relevante del estado operativo del dispositivo.
Las tablas PyEZ de Junos se formatean con YAML. Las definiciones de Op Table pueden incluir una serie de parámetros obligatorios y opcionales, que se resumen en la Tabla 1.
Nombre del parámetro de tabla |
Parámetro de tabla |
Descripción |
---|---|---|
Nombre de la tabla |
– |
Identificador definido por el usuario para la tabla. |
Comando RPC |
|
Solicite el nombre de etiqueta del RPC que se va a ejecutar. |
Argumentos predeterminados de RPC |
|
(Opcional) Opciones de comando y argumentos predeterminados para RPC. |
Clave de argumento opcional RPC |
|
(Opcional) Referencia al primer argumento opcional de un comando cuando ese argumento no requiere una palabra clave específica. Si no incluye esta propiedad, debe especificar la palabra clave, o el nombre de la opción, para los argumentos opcionales que se incluyen en la lista de argumentos del |
Elemento de tabla |
|
Expresión XPath relativa al elemento de nivel superior del Estos elementos se convierten en la referencia para la vista asociada. |
Clave del elemento de tabla |
|
(Opcional) Expresión XPath o una lista de expresiones XPath que selecciona la etiqueta o etiquetas cuyos valores identifican de forma exclusiva el elemento Table para los elementos que no utilizan el Si el elemento utiliza el |
Vista de tabla |
|
Vista que se utiliza para extraer datos de campo de los elementos de tabla. |
Considere la siguiente tabla op de Junos PyEZ, EthPortTable
, que se incluye con la distribución de Junos PyEZ. La tabla extrae información del estado operativo de las interfaces Ethernet en el dispositivo de destino:
--- EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
En las secciones siguientes se analizan los diferentes componentes de la tabla.
Nombre de la tabla
El nombre de la tabla es un identificador definido por el usuario para la tabla. El archivo o cadena YAML puede contener una o varias tablas. El inicio del documento YAML debe dejarse justificado. Por ejemplo:
--- EthPortTable: # Table definition
Comando RPC (rpc)
Las tablas op de Junos PyEZ para salida estructurada extraen información específica de la salida XML de un RPC. Debe incluir la rpc
propiedad en la definición de tabla op para especificar la RPC que se va a ejecutar en un dispositivo.
El rpc
valor es la etiqueta de solicitud XML de Junos para un comando. Por ejemplo, el nombre de etiqueta de solicitud para el show interfaces
comando es get-interface-information
.
rpc: get-interface-information
La etiqueta de solicitud se puede encontrar mediante uno de los métodos siguientes:
Anexar la
| display xml rpc
opción después del comando en la CLI de Junos OSEjecución del método de instancia
display_xml_rpc('command', format='text')
de Junos PyEZDevice
Buscar el comando y la etiqueta correspondiente en el Explorador de API XML de Junos
Argumentos predeterminados de RPC (args)
La propiedad opcional args
define las opciones de comando y los argumentos predeterminados para la RPC. Se enumeran como pares clave-valor con sangría en args
. Un argumento predeterminado se utiliza cuando se llama al método en la get()
secuencia de comandos y no proporciona un argumento que invalide ese valor predeterminado.
Si una opción es solo un indicador que no requiere un valor específico, puede incluirla en la lista de argumentos estableciendo el valor de opción en True
en la definición de tabla. Por ejemplo, el show interfaces media
comando se asigna a la etiqueta request get-interface-information
con el argumento media: True
. Si una opción requiere un valor, establezca el valor del argumento en el valor que desea usar como valor predeterminado.
rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*'
Si el nombre de la opción en la interfaz de línea de comandos (CLI) de Junos OS tiene guiones, debe cambiar los guiones del nombre a guiones bajos.
De forma predeterminada, Junos PyEZ normaliza todas las claves y valores de tabla, lo que elimina todos los espacios en blanco iniciales y finales y sustituye las secuencias de caracteres de espacio en blanco internos por un único espacio. Para deshabilitar la normalización de una tabla, inclúyala normalize: False
en la lista de argumentos.
args: normalize: False
Clave de argumento opcional RPC (args_key)
La propiedad optional args_key
se usa en los casos en que un comando de CLI toma un primer argumento opcional que no requiere que especifique explícitamente un nombre de opción o una palabra clave. En el ejemplo siguiente, el comando toma un nombre de show interfaces
interfaz como 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
La args_key
propiedad permite utilizar este argumento opcional al recuperar datos operativos sin tener que especificar explícitamente la palabra clave o el nombre de la opción.
args_key: interface_name
Si incluye la propiedad en la definición de args_key
tabla, puede especificar el valor del argumento, pero omitir el nombre de la opción al recuperar los datos.
eths = EthPortTable(dev).get('ge-0/3/0')
Si omite la propiedad en la definición de args_key
tabla, debe especificar explícitamente el nombre de la opción si desea incluir este parámetro al recuperar los datos.
eths = EthPortTable(dev).get(interface_name='ge-0/3/0')
Elemento de tabla (elemento)
La propiedad Table item
, que es necesaria en todas las definiciones de tabla op, identifica los datos que se van a extraer de la salida RPC. El item
valor es una expresión XPath relativa al elemento de nivel superior de la <rpc-reply>
etiqueta que selecciona los elementos deseados. Estos elementos se convierten en la referencia para la vista asociada.
En el ejemplo siguiente se muestra la salida del comando CLI truncado de ejemplo:
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 seleccionar los <physical-interface>
elementos de esta salida, incluya la item
propiedad y especifique el XPath que selecciona el elemento. En este caso, el <physical-interface>
elemento es un elemento secundario directo del elemento de nivel <interface-information>
superior y la expresión XPath para el item
valor es simplemente el nombre del elemento.
item: physical-interface
Estos elementos se convierten en la referencia para la vista asociada.
Diferentes dispositivos pueden emitir diferentes elementos de salida para el mismo RPC. Como resultado, el XPath del elemento podría variar según el sistema. La item
propiedad admite el uso del operador de canalización ( | ) para especificar una "o" implícita para seleccionar entre varios nodos posibles. Cuando la item
propiedad incluye este operador, la key
propiedad debe utilizar una lista. Por ejemplo:
UTMStatusTable: rpc: show-utmd-status item: //multi-routing-engine-item/utmd-status | //utmd-status view: UTMStatusView key: - re-name | Null
Clave de elemento de tabla (clave)
La propiedad opcional key
es una expresión XPath o una lista de expresiones XPath que selecciona qué etiqueta o etiquetas se utilizan para identificar de forma exclusiva un elemento de tabla para aquellos elementos que no utilizan el <name>
elemento como identificador o para los casos en los que desea utilizar claves compuestas.
En la siguiente salida de comando, cada <physical-interface>
elemento se identifica de forma única por su <name>
elemento secundario:
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>
Si la propiedad Table item
selecciona los <physical-interface>
elementos, puede omitir la key
propiedad de la definición Table si desea utilizar el <name>
elemento como clave de forma predeterminada.
Por el contrario, considere el siguiente show route brief
resultado 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>
Al seleccionar los elementos, no hay ningún elemento correspondiente <name>
para identificar de forma exclusiva cada entrada de route-table/rt
ruta. Cuando el <name>
identificador está ausente, la key
propiedad puede especificar qué etiqueta o etiquetas identifican de forma exclusiva cada elemento. En este caso, puede identificar de forma exclusiva cada route-table/rt
elemento utilizando <rt-destination>
como clave.
item: route-table/rt key: rt-destination
Además, a partir de Junos PyEZ versión 2.3.0, se puede definir key: Null
una tabla para indicar que no se requiere una clave. En este caso, la tabla y la vista devuelven los datos como un diccionario simple en lugar de uno anidado con claves.
Los elementos de tabla se pueden definir mediante una clave que consta de un solo elemento o de varios elementos. Las claves de un solo elemento utilizan una expresión XPath simple para el valor de la key
propiedad. Las claves compuestas se definen mediante una lista de expresiones XPath. Considere la siguiente definición de tabla:
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
La clave compuesta para esta definición de tabla puede ser similar a la siguiente:
('FPC 2', 'MIC 0', 'PIC 0')
Si una clave compuesta hace referencia a un elemento que falta, Junos PyEZ reemplaza el valor de la clave por None
.
('FPC 0', None, 'PIC 0')
La key
propiedad debe utilizar una lista cuando la item
propiedad incluye el operador de canalización ( | ).
La key
propiedad también admite el operador de canalización ( | ), que permite a Table seleccionar entre varios nodos posibles. El operador le permite utilizar la misma tabla incluso en los casos en que diferentes sistemas emiten diferentes elementos de salida para el mismo RPC. Por ejemplo, LLDPNeighborTable, que se muestra aquí como referencia, puede seleccionar el lldp-local-interface
elemento o lldp-local-port-id
como su clave:
--- 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
Cuando la key
propiedad utiliza el |
operador, cada clave presente en la respuesta RPC se agrega a la lista de claves. El operador se puede utilizar para especificar una "o" implícita y es útil en situaciones en las que hay diferentes nombres de etiqueta presentes para diferentes tipos de configuraciones o versiones. Por ejemplo, si el RPC devuelve lldp-local-interface
como identificador de un dispositivo y el mismo RPC devuelve lldp-local-port-id
como identificador de otro dispositivo, la tabla selecciona automáticamente la clave adecuada.
Vista de tabla (ver)
La view
propiedad asocia la definición de tabla con una vista determinada. Una vista asigna los nombres de campo definidos por el usuario a elementos de los elementos de tabla seleccionados mediante expresiones XPath. Puede personalizar la vista para seleccionar solo los elementos necesarios de los elementos de tabla.