Definir vistas para las tablas de configuración de Junos PyEZ
Las tablas de configuración de Junos PyEZ pueden extraer datos específicos de la base de datos de configuración seleccionada de un dispositivo Junos o pueden definir recursos estructurados que se pueden usar para configurar un dispositivo Junos mediante programación. Una tabla está asociada a una vista, que se utiliza para seleccionar y hacer referencia a los elementos de los datos de la tabla. Para asociar una tabla a una vista determinada, se incluye la view
propiedad en la definición de tabla, que toma el nombre de vista como argumento.
Una vista asigna los nombres de campo definidos por el usuario a elementos XML de los elementos de tabla seleccionados. Una vista le permite acceder a campos específicos en los datos como variables con propiedades que se pueden manipular en Python. Junos PyEZ maneja la extracción de los datos en Python, así como cualquier conversión de tipo o normalización de datos.
Al recuperar datos de configuración mediante tablas que tienen la get
propiedad o set
, los campos Ver especifican qué datos de configuración debe recuperar la aplicación para el objeto. Para las tablas que incluyen la set
propiedad y definen recursos que se pueden configurar en un dispositivo, los campos definidos en la Vista restringen las instrucciones que se pueden configurar para ese recurso.
Las vistas de Junos PyEZ, al igual que las tablas, se formatean con YAML. Ver definiciones asociadas a la configuración Las tablas pueden incluir varios parámetros, que se resumen en la tabla 1.
Ver nombre del parámetro |
Ver parámetro |
Tipo de tabla |
Descripción |
---|---|---|---|
Ver nombre |
– |
|
Identificador de vista definido por el usuario. |
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 datos de configuración. Los nombres de campo deben ser nombres de variables de Python válidos. Las expresiones XPath son relativas al contexto definido por la Cuando el ámbito Tabla utiliza |
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 datos de configuración. Los nombres de campo deben ser nombres de variables de Python válidos. Las expresiones XPath son relativas al contexto establecido por el parámetro correspondiente Cuando el ámbito Tabla utiliza |
Grupos |
|
|
Matriz asociativa, o diccionario, de pares clave-valor que asignan un nombre de grupo definido por el usuario a una expresión XPath que establece el contexto XPath para los campos de ese grupo. La expresión Xpath es relativa al contexto definido por la |
Tenga en cuenta las siguientes tablas y vistas de configuración de Junos PyEZ. UserTable
, que incluye la get
propiedad, extrae los datos de configuración de las cuentas de usuario del dispositivo de destino. UserConfigTable
, que incluye la set
propiedad, define un recurso de configuración estructurado que se puede utilizar para configurar cuentas de usuario en el dispositivo de destino, así como para recuperar datos de configuración de cuentas de usuario.
--- UserTable: get: system/login/user view: UserView UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password --- UserConfigTable: set: system/login/user key-field: username view: UserConfigView UserConfigView: groups: auth: authentication fields: username: name userclass: class uid: uid fields_auth: password: encrypted-password
En las secciones siguientes se describen los diferentes componentes de la vista:
Nombre de la vista
El nombre de la vista es un identificador definido por el usuario para la vista. Para asociar una tabla a una vista determinada, incluya la view
propiedad en la definición de tabla y proporcione el nombre de vista como argumento. Por ejemplo:
--- UserTable: # Table definition view: UserView UserView: # View definition
Campos (campos)
Las vistas se personalizan para que solo hagan referencia a los elementos necesarios en los datos de configuración seleccionados. Para ello, incluya la fields
propiedad y una matriz asociativa que contenga la asignación de nombres de campo definidos por el usuario a las expresiones XPath que seleccionan los elementos deseados de los elementos de la tabla de configuración. Los nombres de campo deben ser nombres de variables de Python válidos. Las expresiones XPath son relativas al ámbito de configuración definido por la get
propiedad o set
en la definición de tabla.
Al recuperar datos de configuración mediante tablas que incluyen la get
propiedad o set
, los campos definidos en la vista identifican las instrucciones que se van a extraer de la configuración. Para las tablas que incluyen la set
propiedad y definen recursos que puede configurar en un dispositivo, los campos identifican las instrucciones que puede configurar para ese recurso. Debe definir explícitamente campos para todos los elementos identificadores de un recurso de configuración. A continuación, se hace referencia a estos campos de identificador en la key-field
propiedad de la definición de tabla correspondiente.
Considere la siguiente jerarquía de configuración de ejemplo:
user@router> show configuration system login | display xml <rpc-reply> <configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration> </rpc-reply>
Si la tabla get
o set
parámetro define el ámbito como system/login/user
, 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 los nombres username
de campo definidos por el usuario , userclass
y uid
a elementos secundarios del <user>
elemento:
UserTable: get: system/login/user ... UserView: fields: username: name userclass: class uid: uid
Si la definición de tabla incluye la set
propiedad, debe definir explícitamente campos para cualquier elemento identificador que identifique de forma exclusiva el objeto, que en este caso es <name>
. La propiedad Table key-field
debe hacer referencia a todos los campos View que se asignan a elementos identificadores de un objeto. Siempre debe definir al menos un elemento identificador en las propiedades y key-field
de set
las fields
tablas.
En la secuencia de comandos de Python, puede acceder a un elemento Ver como una propiedad variable.
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get() for account in users: print("Username is {}\nUser class is {}".format(account.name, account.userclass))
Al recuperar datos de configuración, cada objeto que tiene un <name>
elemento en los datos tiene una propiedad predeterminada name
que puede usar para tener acceso al valor de ese elemento.
Los campos de vista pueden incluir diferentes opciones según el tipo de tabla que hace referencia a esa vista. Las tablas que definen recursos de configuración estructurados (set
) pueden incluir comprobaciones de tipo y restricción para cada campo, a fin de garantizar que la aplicación Junos PyEZ proporcione datos válidos al configurar el recurso en un dispositivo. Las tablas que recuperan datos de configuración (get
) pueden incluir opciones que devuelven valores de atributo para elementos específicos o que especifican el tipo de datos que se va a utilizar en la aplicación. Las Opciones de campo (tablas 'get') y las opciones de campo (tablas 'set') describen las opciones que se pueden incluir al usar get
y set
tablas, respectivamente.
Opciones de campo (tablas 'get')
Las tablas que incluyen la get
propiedad y recuperan únicamente datos de configuración de un dispositivo pueden definir varias opciones u operadores para los campos de la vista asociada. En esta sección se describen las distintas opciones.
El formato de campo determina el tipo del valor de un campo. De forma predeterminada, los valores de campo se almacenan como cadenas. Puede especificar un tipo diferente para el valor en la asignación de campos. En el ejemplo siguiente se define el valor del uid
elemento para que sea un número entero:
UserView: fields: username: name userclass: class uid: { uid : int }
También puede establecer el valor del elemento de campo en un valor 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 valor booleano definido en el formato. En el ejemplo siguiente, el superuser
campo se establece en True si el class
valor del elemento contiene 'superuser':
superuser: { class : True=regex(super-user) }
Junos PyEZ también proporciona el operador para los group
campos en las vistas de configuración. El group
operador permite acceder al valor del junos:group
atributo para los elementos heredados de los grupos de configuración de Junos. Este valor indica el grupo del que se heredó ese elemento.
Por ejemplo, en la siguiente configuración, el remote
usuario se hereda del global
grupo de configuración configurado en el nivel de [edit groups global]
jerarquía.
<user junos:group="global"> <name junos:group="global">remote</name> <uid junos:group="global">2000</uid> ... </user>
El operador se incluye group
en la asignación de campos para hacer referencia al valor del junos:group
atributo en lugar del valor del elemento. En el ejemplo siguiente se definen los uidgroup
campos y fullgroup
con el group
operador. Cuando se accede a estos nombres de campo en una secuencia de comandos, el campo hace referencia al valor del junos:group
atributo asociado al uid
elemento o full-name
.
UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password
Opciones de campo (tablas 'establecidas')
Las tablas que definen recursos de configuración estructurados (set
) pueden incluir comprobaciones de tipo y restricción para cada campo de la vista asociada, a fin de garantizar que la aplicación Junos PyEZ proporcione datos válidos al configurar el recurso en un dispositivo. Las comprobaciones de tipo garantizan que la aplicación Junos PyEZ proporciona el tipo de datos correcto cuando configura las instrucciones para un recurso específico. Las comprobaciones de restricciones permiten definir un valor predeterminado para las instrucciones y asegurarse de que la aplicación proporciona valores que están en el rango correcto para dichas instrucciones. En esta sección se describen las comprobaciones de tipo y restricción admitidas, que se incluyen como opciones para los campos de la vista asociada.
En la tabla 2 y en la tabla 3 se resumen las comprobaciones de tipo y restricción, respectivamente, que se pueden definir para los campos de la vista de una set
tabla de configuración. Las comprobaciones de tipo son mutuamente excluyentes, pero se pueden definir varias comprobaciones de restricción para cada campo.
|
Descripción |
Ejemplo |
---|---|---|
|
El campo sólo acepta valores booleanos de |
|
|
El campo sólo acepta uno de los valores definidos en la |
|
|
El campo solo acepta valores de coma flotante |
|
|
El campo solo acepta valores enteros |
|
|
El campo solo acepta valores de cadena |
|
Nombre de comprobación de restricción |
Descripción |
Ejemplo |
---|---|---|
|
Valor predeterminado de un campo. Un campo utiliza su valor predeterminado cuando el usuario no lo configura explícitamente. Si el usuario llama al método para restablecer los valores de |
|
|
Valor máximo de un campo, que se interpreta en función del campo |
|
|
Valor mínimo para un campo, que se interpreta en función del campo |
|
Sólo puede definir una única comprobación de tipo para un campo, pero puede definir varias comprobaciones de restricción. Por lo tanto, un campo podría incluir un default
valor, un valor mínimo (minValue
) y un valor máximo (maxValue
).
native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'default' : 501, 'minValue' : 0, 'maxValue' : 4094 } }
Las minValue
opciones y maxValue
se interpretan en función del valor de la type
opción. De forma predeterminada, los valores de campo son cadenas. Para cuerdas, minValue
y maxValue
son las longitudes mínima y máxima de la cadena. Para enteros y flotantes, los valores son los valores mínimo y máximo para ese tipo.
Si incluye comprobaciones de tipo o restricción para un campo y el usuario proporciona datos de configuración que no superan las comprobaciones, la aplicación Junos PyEZ genera la excepción apropiada TypeError
o ValueError
con un mensaje que describe el error.
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 de tabla.
En los siguientes datos de configuración, el <authentication>
elemento contiene un elemento secundario correspondiente al método de autenticación del usuario:
<configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration>
Dentro de la definición View, puede utilizar la fields
propiedad para tener acceso a los elementos secundarios proporcionando la expresión XPath completa a cada elemento en relación con la jerarquía de configuración seleccionada. Por ejemplo, si la tabla get
o set
propiedad selecciona elementos en el nivel de <user>
[edit system login]
jerarquía, la asignación de elementos de campo usaría la siguiente expresión XPath:
UserConfigTable: set: system/login/user ... UserConfigView: fields: password: authentication/encrypted-password
Como alternativa, puede crear un grupo que establezca el contexto XPath en el <authentication>
elemento y, a continuación, definir elementos de grupo de campos que solo proporcionen la expresión XPath relativa a ese contexto. Puede definir cualquier número de grupos dentro de una definición de View.
Para crear un grupo, incluya la propiedad y asigne un nombre de grupo definido por el groups
usuario a la expresión XPath que define el nuevo contexto. A continuación, defina un grupo de campos cuyo nombre vaya 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 en groups
. Los nombres de campo deben ser nombres de variables de Python válidos.
En el ejemplo siguiente se define el grupo auth
y el grupo fields_auth
de campos correspondiente. El auth
grupo establece el contexto en el system/login/user/authentication
nivel de jerarquía y el password
campo hace referencia al valor del encrypted-password
elemento.
UserConfigTable: set: system/login/user ... UserConfigView: groups: auth: authentication fields_auth: password: encrypted-password ...
Tanto si utiliza campos como grupos de campos, puede acceder al valor de la misma manera dentro del script de Junos PyEZ mediante los nombres de campo definidos por el usuario.