EN ESTA PÁGINA
Definir vistas para las tablas operativas de Junos PyEZ que analizan la salida estructurada
Las tablas operativas (operativas) de Junos PyEZ para salida estructurada seleccionan datos específicos de la salida XML de una RPC ejecutada en un dispositivo Junos. Una tabla se asocia con una vista, que se usa para acceder a los campos de los elementos de la tabla y asignarlos a variables Python definidas por el usuario. Asocie una tabla con una vista determinada incluyendo la view
propiedad en la definición de tabla, que toma el nombre de vista como su argumento.
Una vista asigna sus variables definidas por el usuario a elementos XML en los elementos de tabla seleccionados. Una vista le permite acceder a campos específicos en el resultado como variables con propiedades que se pueden manipular en Python. Junos PyEZ maneja la extracción de los datos en Python, así como cualquier tipo de conversión o normalización de datos. Las claves definidas en la vista deben ser nombres de variables de Python válidos.
Las vistas de Junos PyEZ, como las tablas, se formatean con YAML. Las vistas que analizan la salida estructurada pueden incluir varios parámetros, que se resumen en la Tabla 1.
Ver nombre del parámetro |
Parámetro de vista |
Descripción |
---|---|---|
Ver nombre |
– |
Identificador definido por el usuario para la vista. |
Elementos de campo |
|
Matriz asociativa o diccionario de pares clave-valor que asignan nombres de campo definidos por el usuario a expresiones XPath que seleccionan elementos en los elementos de tabla. Los nombres de campo deben ser nombres de variables de Python válidos. |
Grupos de campo |
|
Matriz asociativa o diccionario de pares clave-valor que asignan nombres de campo definidos por el usuario a expresiones XPath que seleccionan elementos en los elementos de tabla. Las expresiones XPath son relativas al contexto establecido por el parámetro de grupos correspondiente. Los nombres de campo deben ser nombres de variables de Python válidos. |
Grupos |
|
Matriz asociativa, o diccionario, de pares clave-valor que asignan un nombre de grupo definido por el usuario a una expresión XPath (en relación con el contexto del elemento De tabla) que establece el contexto XPath para los campos de ese grupo. |
Considere la siguiente tabla y vista de Junos PyEZ op, que se incluyen con la distribución Junos PyEZ. La tabla extrae información de estado operativo para 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 EthPortView: groups: mac_stats: ethernet-mac-statistics flags: if-device-flags fields: oper: oper-status admin: admin-status description: description mtu: { mtu : int } link_mode: link-mode macaddr: current-physical-address fields_mac_stats: rx_bytes: input-bytes rx_packets: input-packets tx_bytes: output-bytes tx_packets: output-packets fields_flags: running: { ifdf-running: flag } present: { ifdf-present: flag }
En las siguientes secciones se analizan los diferentes componentes de la vista:
Ver nombre
El nombre de vista es un identificador definido por el usuario para la vista. Asocie una tabla con una vista determinada incluyendo la view
propiedad en la definición de tabla y proporcionando el nombre de vista como su argumento. Por ejemplo:
--- EthPortTable: # Table definition view: EthPortView EthPortView: # View definition
Campos (campos)
Personalizar vistas de modo que solo hagan referencia a los elementos necesarios de los elementos de tabla seleccionados. Para ello, incluye la fields
propiedad y una matriz asociativa que contiene la asignación de nombres de campo definidos por el usuario a expresiones XPath que seleccionan los elementos deseados del elemento Tabla. Los nombres de campo deben ser nombres de variables de Python válidos. Las expresiones XPath son relativas al contexto del elemento Tabla.
Tenga en cuenta la siguiente salida RPC de ejemplo:
<rpc-reply> <interface-information> <physical-interface> <name>ge-0/3/0</name> <admin-status junos:format="Enabled">up</admin-status> <oper-status>down</oper-status> <local-index>135</local-index> <snmp-index>530</snmp-index> <link-level-type>Ethernet</link-level-type> <mtu>1514</mtu> ... </physical-interface> </interface-information> </rpc-reply>
Si el parámetro Table item
selecciona <physical-interface>
elementos del resultado, la expresión XPath para cada campo de la definición de vista es relativa a ese contexto. La siguiente definición de vista asigna cada nombre de campo definido por el usuario a un elemento secundario del <physical-interface>
elemento:
EthPortView: fields: oper: oper-status admin: admin-status mtu: { mtu : int }
En la secuencia de comandos de Python, puede acceder a un elemento View como propiedad de variable. De forma predeterminada, cada elemento view tiene una name
propiedad que hace referencia a la clave que identifica de forma única ese elemento.
from jnpr.junos import Device from jnpr.junos.op.ethport import EthPortTable with Device(host='router.example.com') as dev: eths = EthPortTable(dev) eths.get() for item in eths: print (item.name) print (item.oper) print (item.admin) print (item.mtu)
El formato de campo determina el tipo para el valor de un campo. De forma predeterminada, los valores de campo se almacenan como cadenas. Puede especificar un tipo diferente para el valor de campo en la asignación de campos. En el ejemplo siguiente, se define el valor del mtu
elemento como un entero:
EthPortView: fields: mtu: { mtu : int }
En el resultado de RPC, algunos elementos XML de Junos son solo elementos vacíos que actúan como marcas. Puede indicar explícitamente que un campo es una marca en la asignación de campo. El valor del elemento de campo para una marca es True si el elemento está presente en el resultado y False si el elemento está ausente. En el ejemplo siguiente, se define el ifdf-running
elemento como una marca:
EthPortView: fields: mtu: { mtu : int } running: { if-device-flags/ifdf-running : flag }
También puede establecer el valor del elemento de campo en un booleano mediante la sintaxis siguiente:
fieldname: { element-name: (True | False)=regex(expression) }
El valor del elemento se evalúa con respecto a la expresión regular pasada a regex()
. Si el valor del elemento coincide con la expresión, el valor del elemento de campo se establece en el booleano definido en el formato. En el ejemplo siguiente, el oper_status_down
campo se establece en True si el valor del oper-status
elemento contiene 'down':
oper_status_down: { oper-status: True=regex(down) }
También puede usar expresiones regulares más complejas y hacer coincidir con varios valores. El siguiente elemento de campo se establece en True si la dirección del rt-destination
elemento comienza con '198.51.':
dc1_route: { rt-destination: True=regex(^198\.51\.) }
El siguiente elemento de campo se establece en True si el no-refresh
elemento contiene cualquiera de los valores de la expresión regular.
no_refresh: { no-refresh: 'True=regex(Session ID: 0x0|no-refresh)' }
Grupos (grupos) y grupos de campo (fields_)
Los grupos proporcionan un método de acceso directo para seleccionar y hacer referencia a elementos dentro de un conjunto de nodos específico en un elemento table.
En la siguiente salida RPC, el <if-device-flags>
elemento contiene varios elementos secundarios correspondientes a los valores mostrados en el Device flags
campo en el resultado de la CLI:
<rpc-reply> <interface-information> <physical-interface> <name>ge-0/3/0</name> ... <if-device-flags> <ifdf-present/> <ifdf-running/> </if-device-flags> ... </physical-interface> </interface-information> </rpc-reply>
Dentro de la definición de vista, puede usar la fields
propiedad para tener acceso a los elementos secundarios proporcionando la expresión XPath completa a cada elemento en relación con el elemento table seleccionado. Por ejemplo, si la definición EthPortTable selecciona <physical-interface>
elementos, la asignación de elementos de campo usaría las siguientes expresiones XPath:
EthPortView: fields: present: if-device-flags/ifdf-present running: if-device-flags/ifdf-running
Como alternativa, puede crear un grupo que establezca el contexto en el <if-device-flags>
elemento y, a continuación, definir elementos de grupo de campos que simplemente proporcionan la expresión XPath en relación con ese contexto. Puede definir cualquier número de grupos dentro de una definición de vista.
Para crear un grupo, incluya la groups
propiedad y asigne un nombre de grupo definido por el usuario a la expresión XPath que define el nuevo contexto. A continuación, defina un grupo de campos cuyo nombre va fields_
seguido del nombre del grupo. El grupo de campos es una matriz asociativa que contiene la asignación de nombres de campo definidos por el usuario a expresiones XPath que ahora son relativas al contexto establecido dentro groups
de . Los nombres de campo deben ser nombres de variables de Python válidos.
En el ejemplo siguiente se define el grupo flags
y el grupo fields_flags
de campos correspondiente. El flags
grupo establece el contexto en el physical-interface/if-device-flags
nivel de jerarquía, y los present
campos y running
tienen acceso a los valores de los ifdf-present
elementos y ifdf-running
, respectivamente.
EthPortView: groups: flags: if-device-flags fields_flags: present: ifdf-present running: ifdf-running
Ya sea que utilice campos o grupos de campos, tenga acceso al valor de la misma manera dentro de la secuencia de comandos Junos PyEZ mediante los nombres de campo definidos por el usuario.