Definir vistas para 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 se asocia con una vista, que se utiliza para seleccionar y hacer referencia a los elementos de los datos de tabla. 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 los nombres de campo definidos por el usuario a elementos XML en los elementos de tabla seleccionados. Una vista le permite acceder a campos específicos de 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 tipo de conversión o normalización de datos.
Cuando se recuperan datos de configuración mediante tablas que tienen la get
o la set
propiedad, los campos view especifican qué datos de configuración debe recuperar la aplicación para el objeto. En el caso de las tablas que incluyen la set
propiedad y definen los recursos que puede configurar en un dispositivo, los campos definidos en la vista restringen las instrucciones que puede configurar para ese recurso.
Las vistas de Junos PyEZ, como las tablas, se formatean con YAML. Las definiciones de vista asociadas con las tablas de configuración pueden incluir varios parámetros, que se resumen en la Tabla 1.
Ver nombre del parámetro |
Parámetro de vista |
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 de 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 de 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 |
Considere las siguientes tablas y vistas de configuración de Junos PyEZ. UserTable
, que incluye la get
propiedad, extrae datos de configuración para cuentas de usuario en el 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 recuperar datos de configuración para 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 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:
--- UserTable: # Table definition view: UserView UserView: # View definition
Campos (campos)
Las vistas se personalizan de modo que solo hagan referencia a los elementos necesarios en los datos de configuración 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 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.
Cuando se recuperan datos de configuración mediante tablas que incluyen la get
propiedad o la set
propiedad, los campos definidos en la vista identifican las instrucciones que se deben extraer de la configuración. En el caso de las tablas que incluyen la set
propiedad y definen los 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 de identificador para 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 los 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 de identificador que identifique de forma exclusiva el objeto, que en este caso es <name>
. La propiedad de la key-field
tabla debe hacer referencia a todos los campos de vista que se asignan a elementos de identificador para un objeto. Siempre debe definir al menos un elemento identificador en las fields
propiedades y key-field
en set
tablas.
En la secuencia de comandos de Python, puede acceder a un elemento View como propiedad de 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))
Cuando se recuperan 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 dicha vista. Las tablas que definen recursos de configuración estructurados (set
) pueden incluir comprobaciones de tipos y restricciones para cada campo para asegurarse de que la aplicación Junos PyEZ proporciona 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 usar en la aplicación. Las opciones de campo ('obtener' tablas) y opciones de campo ('establecer' tablas) describen las opciones que se pueden incluir cuando se utiliza get
y set
tablas, respectivamente.
Opciones de campo ('obtener' tablas)
Las tablas que incluyen la get
propiedad y solo recuperan datos de configuración de un dispositivo pueden definir varias opciones o operadores para campos en la vista asociada. En esta sección se describen las distintas opciones.
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 en la asignación de campo. En el ejemplo siguiente, se define el valor del uid
elemento como un entero:
UserView: fields: username: name userclass: class uid: { uid : int }
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 superuser
campo se establece en True si el valor del class
elemento contiene 'superusuario':
superuser: { class : True=regex(super-user) }
Junos PyEZ también proporciona el group
operador para campos en vistas de configuración. El operador le permite tener acceso al valor del junos:group
atributo para los elementos que se heredan de grupos definidos por el usuario. Este valor indica el grupo del que se heredó ese elemento.
Incluye el group
operador en la asignación de campo para hacer referencia al valor del junos:group
atributo en lugar del valor del elemento. En el siguiente ejemplo, 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 con el uid
o full-name
elemento.
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 ('establecer' tablas)
Las tablas que definen recursos de configuración estructurados (set
) pueden incluir comprobaciones de tipo y restricción para cada campo en la vista asociada para asegurarse de que la aplicación Junos PyEZ proporciona datos válidos al configurar el recurso en un dispositivo. Las comprobaciones de tipos 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 le permiten definir un valor predeterminado para instrucciones y asegurarse de que la aplicación proporciona valores que están en el intervalo correcto para esas instrucciones. Las comprobaciones de tipo y restricción compatibles, que se incluyen como opciones para los campos de la vista asociada, se describen en esta sección.
Las tablas 2 y 3 resumen las comprobaciones de tipo y restricción, respectivamente, que puede definir para campos en la Vista de una set
tabla de configuración. Las comprobaciones de tipos son mutuamente exclusivas, pero se pueden definir varias comprobaciones de restricciones para cada campo.
|
Descripción |
Ejemplo |
---|---|---|
|
El campo solo acepta valores booleanos de |
|
|
El campo solo acepta uno de los valores definidos en la |
|
|
El campo solo acepta valores de punto flotante |
|
|
El campo solo acepta valores enteros |
|
|
El campo solo acepta valores de cadena |
|
Nombre de comprobación de restricciones |
Descripción |
Ejemplo |
---|---|---|
|
Valor predeterminado para un campo. Un campo utiliza su valor predeterminado cuando el usuario no configura explícitamente el campo. Si el usuario llama al |
|
|
Valor máximo para un campo, que se interpreta según el campo |
|
|
Valor mínimo para un campo, que se interpreta según el campo |
|
Solo puede definir una comprobación de tipo único para un campo, pero puede definir varias comprobaciones de restricciones. 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 según el valor de la type
opción. De forma predeterminada, los valores de campo son cadenas. En el caso de las cadenas, minValue
y maxValue
son las longitudes mínima y máxima de la cadena. Para números 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 fallan las comprobaciones, la aplicación Junos PyEZ genera la excepción o ValueError
la adecuada TypeError
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 table.
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 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 la jerarquía de configuración seleccionada. Por ejemplo, si la table get
o set
propiedad selecciona <user>
elementos en el [edit system login]
nivel de 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 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 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 ...
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.