Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Use las tablas de configuración de Junos PyEZ para configurar recursos estructurados en dispositivos Junos

Configuración de Junos PyEZ Las tablas que especifican la set propiedad permiten definir recursos estructurados que se pueden usar para configurar dispositivos Junos mediante programación. Después de cargar o importar la definición de tabla para su recurso estructurado en su aplicación Junos PyEZ, la aplicación puede configurar el recurso en sus dispositivos. En este tema se describe el proceso general y algunas tareas específicas para usar las tablas y vistas de configuración de PyEZ de Junos para configurar recursos estructurados en un dispositivo.

Proceso de configuración general

La propiedad Tabla set de configuración identifica el nivel de jerarquía de configuración en el que se configura un recurso y establece el contexto XPath para los campos de la vista. Por ejemplo, en la tabla siguiente se define un user recurso en el [edit system login] nivel jerárquico:

Los campos que se incluyen en la Vista definen qué instrucciones leaf puede configurar el usuario para ese recurso. Un campo puede definir un valor predeterminado, así como comprobaciones de tipo y restricción.

Para configurar un recurso estructurado en un dispositivo, debe cargar o importar la tabla en la aplicación. A continuación, cree un objeto Table y asócielo con el Device objeto del dispositivo de destino. Por ejemplo:

Para definir valores para las instrucciones de configuración de un recurso, establezca los nombres de campo correspondientes (como se definen en la vista) iguales a los valores deseados.

El valor predeterminado de un campo es None a menos que la vista defina explícitamente un valor predeterminado para ese campo. Si la vista define una comprobación de tipo o restricción para un campo, la aplicación debe proporcionar el tipo de datos y el valor correctos para ese campo y, idealmente, controlar los errores que puedan producirse en caso de que se produzca un error en la comprobación. Siempre debe definir valores para los campos clave que se declaran en la propiedad de la tabla key-field , que en este ejemplo es username.

El código siguiente importa UserConfigTable y configura valores para los usernamecampos , userclassy password . El campo de password la vista hace referencia a la encrypted-password instrucción en la configuración; por lo tanto, los datos deben proporcionar una contraseña previamente cifrada.

Para obtener información detallada acerca de tareas de configuración más específicas, como configurar instrucciones con palabras clave de formato fijo o varios valores, configurar varias instancias de una instrucción o recurso, eliminar una instrucción leaf o contenedor, o configurar una propiedad de objeto que corresponda a un atributo XML de Junos, consulte las siguientes secciones:

Después de configurar un objeto, debe llamar append() al método para compilar la configuración XML de Junos correspondiente y agregarla al lxml objeto que almacena el conjunto completo de cambios de configuración para ese objeto Table. Los cambios de configuración solo incluyen los campos que tienen un valor predeterminado definido en la vista o un valor configurado por el usuario. Los campos que conservan su valor inicial de None se ignoran.

Después de compilar el XML, el append() método también restablece todos los campos a sus valores predeterminados o si None la vista no define un valor predeterminado para ese campo. Esto permite configurar varios objetos en la misma aplicación y garantiza que no se utilice involuntariamente un valor definido para un recurso cuando se configuran recursos posteriores. Cada vez que configure un nuevo recurso, debe llamar append() para agregar los cambios de configuración al conjunto final de cambios. Para obtener más información acerca del append() método, consulte Use append() para generar los datos de configuración XML de Junos.

Si es necesario, también puede restablecer manualmente todos los campos de un objeto Table llamando al reset() método.

El reset() método restaura todos los campos a sus valores predeterminados o si None la vista no define un valor predeterminado. El reset() método solo restablece los valores actuales de los campos. No afecta al XML que contiene los cambios de configuración que se han construido hasta ese momento mediante llamadas al append() método.

Puede recuperar la configuración XML que representa los cambios en cualquier punto de la aplicación llamando al get_table_xml() método, que se describe en detalle en Ver los cambios de configuración.

Después de configurar todos los objetos necesarios y llamar a append(), puede cargar los cambios de configuración en la base de datos de configuración compartida del dispositivo mediante uno de estos dos métodos:

  • Llame al set() método, que llama automáticamente a los lock()métodos , load(), commit()y unlock()

  • Llame a los lock()métodos , load(), commit()y unlock() individualmente

Nota:

Cuando se crea la instancia de tabla con un gestor de contexto (with ... as sintaxis) que incluye el mode parámetro para utilizar una modalidad de configuración específica, el gestor de contexto gestiona la apertura, el bloqueo y el cierre y el desbloqueo de la base de datos. En este caso, solo necesita llamar a los load() métodos y commit() para configurar el dispositivo. Llamar al lock() método or set() da como resultado una LockError excepción.

El uso del método único set() proporciona simplicidad, pero llamar a los métodos individuales proporciona flexibilidad adicional, como cuando necesita llamar a otros métodos después de cargar los datos de configuración, pero antes de confirmarlos. Por ejemplo, es posible que desee llamar a los diff() métodos or pdiff() para revisar las diferencias de configuración después de cargar los datos, pero antes de confirmarlos. O bien, es posible que tenga que llamar rollback() al método para restablecer la configuración candidata a la configuración activa en lugar de confirmarla. Para obtener más información sobre el uso de los diferentes métodos para cargar y confirmar los datos de configuración, consulte Uso de Junos PyEZ para configurar dispositivos Junos y Uso de Junos PyEZ para confirmar la configuración.

En el caso de operaciones de carga y confirmación de gran tamaño que pueden agotar el tiempo de espera, puede ajustar el intervalo de tiempo de espera de RPC incluyendo el timeout parámetro en la lista de argumentos or set() commit() method. Para obtener más información, consulte Cómo controlar el intervalo de tiempo de espera de RPC.

Una tabla de configuración que especifica el set parámetro es un superconjunto y tiene todas las características de una tabla de configuración que especifica el get parámetro. Puede recuperar los datos de configuración de la misma manera en su aplicación Junos PyEZ, ya sea que la tabla especifique set o get. Para obtener información sobre el uso de tablas de configuración para recuperar datos de configuración, consulte Usar tablas de configuración de Junos PyEZ para recuperar datos de configuración.

Configure instrucciones que consten de una palabra clave de forma fija

Una instrucción leaf es una instrucción de configuración de CLI que no contiene ninguna otra instrucción. La mayoría de las instrucciones leaf definen un valor para una característica de un objeto de configuración y tienen la siguiente forma:

Algunas instrucciones leaf consisten solo en una palabra clave de forma fija, sin un valor de forma variable asociado. Por ejemplo, la ftp instrucción en el [edit system services] nivel de jerarquía es un ejemplo de una palabra clave de forma fija.

La API XML de Junos representa estas instrucciones con una etiqueta vacía.

Para configurar una palabra clave de forma fija en su aplicación Junos PyEZ, como la ftp instrucción en [edit system services], establezca el valor del nombre de campo correspondiente como se define en la Vista igual al valor Truebooleano .

Considere la siguiente vista, que define el ftp campo con una restricción de tipo para asegurarse de que el valor del campo es un valor booleano:

Para configurar el ftp campo en su aplicación Junos PyEZ, establezca el campo igual a True.

Configure varios valores para la misma instrucción

Algunas instrucciones leaf de Junos OS aceptan varios valores, que pueden ser definidos por el usuario o extraídos de un conjunto de valores predefinidos. La notación de la CLI utiliza corchetes para encerrar todos los valores en una sola instrucción, como se muestra a continuación:

Por ejemplo, es posible que deba configurar una lista de ID de VLAN para una interfaz troncal, como en la siguiente configuración:

Para configurar una instrucción leaf con varios valores en su aplicación Junos PyEZ, establezca el valor del campo correspondiente (como se define en la vista) en una lista de Python que contenga los valores deseados. En el ejemplo siguiente, el vlan_list campo se asigna a la vlan-id-list instrucción de la CLI. Para configurar la instrucción con varios ID de VLAN, establezca el nombre del campo igual a la lista de ID.

Nota: La lista de Python que se usa para el valor de un campo en la aplicación Junos PyEZ es una lista de valores delimitada por comas. Esta lista se traduce en una lista delimitada por espacios en los datos de configuración de Junos.

Configurar varias instancias de la misma instrucción

En determinadas situaciones, la configuración de Junos OS le permite configurar varias instancias de la misma instrucción. Por ejemplo, puede configurar varias direcciones bajo la misma familia de protocolos para una interfaz lógica. En el siguiente fragmento de configuración, la interfaz de circuito cerrado tiene varias direcciones configuradas en el nivel de [edit interfaces lo0 unit 0 family inet] jerarquía:

La representación XML de Junos de la configuración es la siguiente:

Cuando utilice las tablas de configuración de Junos PyEZ para administrar recursos estructurados, los valores de las instrucciones de configuración se definen estableciendo los nombres de campo correspondientes iguales a los valores deseados. Sin embargo, no puede definir el mismo campo dos veces en su aplicación de Junos PyEZ, ya que el segundo valor sobrescribirá el primer valor. En su lugar, debe establecer el campo igual a una lista de valores y Junos PyEZ se encarga de la conversión a XML.

Considere la siguiente tabla y vista:

El siguiente código de ejemplo ilustra cómo configurar varias direcciones para la interfaz de circuito cerrado en una aplicación PyEZ de Junos. En este caso, establezca el ip_address campo igual a una lista de direcciones.

La configuración resultante es:

Configurar varias instancias del mismo recurso

Cuando utilice las tablas de configuración de Junos PyEZ para configurar recursos estructurados, es posible que tenga que configurar varios objetos o registros para el mismo recurso. Por ejemplo, puede configurar varias interfaces o usuarios al mismo tiempo. Para configurar varios objetos para el mismo recurso estructurado en una aplicación de Junos PyEZ, debe definir los valores para los campos de un objeto, llamar al append() método y, luego, repetir este proceso para cada objeto subsiguiente.

Por ejemplo, para configurar varios usuarios, defina los valores de campo para el primer usuario y llame al append() método. A continuación, defina los valores de campo para el segundo usuario y llame al append() método. El append() método compila los datos XML de Junos para el cambio de configuración y los agrega al lxml objeto que almacena el conjunto completo de cambios de configuración. El método también restablece automáticamente todos los campos a sus valores predeterminados, tal como se definen en la vista, o si None un campo no tiene un valor predeterminado definido.

En el siguiente ejemplo, se configuran dos objetos de usuario y se confirman los cambios:

Nota:

Si no llama al append() método después de configurar uno de varios objetos para el mismo recurso, los valores de campo para el segundo objeto sobrescribirán los valores de campo para el primer objeto.

El siguiente código de ejemplo configura los mismos dos usuarios con una sintaxis más compacta:

Eliminar contenedores o instrucciones leaf

En algunos casos, es posible que tenga que eliminar contenedores o instrucciones leaf en la configuración. Cuando utilice las tablas de configuración de Junos PyEZ para administrar recursos estructurados, puede realizar esta operación en la aplicación estableciendo el valor de campo adecuado en {'operation' : 'delete'}. Siempre debe definir valores para todos los campos clave al suprimir una instrucción de contenedor o leaf para indicar a qué objeto se aplica la supresión.

Considere la siguiente tabla y vista de configuración de Junos PyEZ:

Para eliminar una instrucción leaf para el recurso definido en la tabla y vista, establezca el valor del campo correspondiente a esa instrucción en {'operation' : 'delete'}. En el ejemplo siguiente se elimina la instrucción para el uid usuario jsmith:

Para eliminar un contenedor de la configuración, la vista debe definir un campo para ese contenedor. En la tabla y vista de ejemplo, el ámbito de configuración definido por la set propiedad es system/login. La vista define el campo 'user', que se asigna al system/login/user contenedor. Esta definición permite eliminar objetos de usuario, si es necesario. Si no define un campo para el contenedor, solo puede eliminar instrucciones dentro del contenedor, pero no puede eliminar el contenedor en sí.

Para eliminar un contenedor en la aplicación Junos PyEZ, establezca el valor del campo correspondiente al contenedor en {'operation' : 'delete'}y defina el campo clave para indicar el objeto que se va a eliminar. En el siguiente ejemplo, se elimina el usuario jsmith de la configuración:

La aplicación imprime los datos de configuración XML de Junos devueltos por el get_table_xml() método. El elemento de usuario con el identificador "jsmith" incluye el operation="delete" atributo para indicar a Junos OS que quite ese objeto de la configuración.

Configurar las propiedades correspondientes a los atributos XML de Junos

Algunos comandos del modo de configuración, por ejemplo deactivate o protect, aplican o quitan una propiedad específica, como la propiedad inactiva o proteger, a una instrucción de configuración. En la CLI, esta propiedad se indica mediante una etiqueta que precede a la instrucción de configuración. La configuración XML de Junos indica esta propiedad mediante un atributo XML para el objeto.

Por ejemplo, el siguiente comando desactiva la interfaz dada.

Cuando vea la configuración en la CLI, la inactive etiqueta precede al nombre de la interfaz.

Del mismo modo, en la salida XML de Junos, el <interface> elemento de la misma interfaz incluye el inactive="inactive" atributo.

Las tablas de configuración de Junos PyEZ permiten definir atributos XML admitidos para un objeto al configurar recursos estructurados. Considere la siguiente tabla y vista de configuración de Junos PyEZ:

Para definir el atributo XML para un objeto de configuración determinado, establezca su campo (tal como lo define la vista) en un diccionario que contenga el atributo y su valor. Por ejemplo, para definir una interfaz pero desactivarla inmediatamente, establezca el campo correspondiente al <interface> elemento en {'inactive':'inactive'}. En el siguiente ejemplo, se configura y desactiva la interfaz dada:

La aplicación imprime los datos de configuración XML de Junos devueltos por el get_table_xml() método. El elemento de interfaz con el identificador 'ge-1/0/2' incluye el inactive="inactive" atributo.

Para activar un objeto inactivo, establezca el campo Vista correspondiente al objeto inactivo en {'active':'active'}.

Del mismo modo, para proteger el elemento de configuración o eliminar el protect atributo de un elemento protegido, establezca el valor de campo adecuado en {'protect':'protect'} o {'unprotect':'unprotect'}. Para obtener más información acerca de los atributos XML en la configuración de Junos OS, consulte la Guía para desarrolladores del protocolo de administración XML de Junos .

Use append() para generar los datos de configuración XML de Junos

Cuando utiliza tablas de configuración de Junos PyEZ para configurar recursos estructurados, define los valores para los campos de un recurso y, luego, llama al append() método. Cada llamada al append() método genera los datos de configuración XML de Junos para el conjunto actual de cambios y los agrega al lxml objeto que almacena el conjunto completo de cambios de configuración.

Al llamar al append() método, se generan los datos de configuración XML de Junos para el recurso. Los cambios de configuración solo incluyen los campos que tienen un valor predeterminado definido en la Vista o un valor configurado por el usuario. Los campos que conservan su valor inicial de None se ignoran.

Después de compilar el XML, el append() método también restablece todos los campos a sus valores predeterminados, tal como se definen en la vista, o si None un campo no tiene un valor predeterminado definido. Restablecer los campos garantiza que, cuando configure varios objetos en la misma aplicación, no establezca un valor de campo para un objeto y, a continuación, utilice involuntariamente ese valor en llamadas posteriores a append() para un objeto diferente. Por lo tanto, debe definir nuevos valores para todos los key-field campos para cada llamada a append().

Nota:

Una vez que anexe nodos al conjunto principal de cambios de configuración, no podrá deshacer la operación.

El append() método solo agrega los nuevos cambios al lxml objeto que contiene el conjunto completo de cambios de configuración. Debe llamar explícitamente al set() método o a los load() métodos y commit() para cargar y confirmar los cambios en el dispositivo.

Ver los cambios de configuración

Cuando utiliza tablas de configuración de Junos PyEZ para configurar recursos estructurados, define los valores para los campos de un recurso y, luego, llama al append() método. Cada llamada al append() método genera los datos de configuración XML de Junos para el conjunto actual de cambios y los agrega al lxml objeto que almacena el conjunto completo de cambios de configuración. En ocasiones, es posible que necesite revisar los datos de configuración que se han construido hasta cierto punto en la aplicación, o que desee ver las diferencias entre las configuraciones candidatas y activas después de cargar los cambios de configuración en el dispositivo.

Para recuperar los datos de configuración XML de Junos que contienen los cambios, llame al método del objeto Table get_table_xml() . El get_table_xml() método devuelve la configuración XML que se ha construido hasta ese punto en la aplicación. Cuando llama al set() método o a los load() métodos y commit() , la aplicación carga y confirma estos datos de configuración XML de Junos en el dispositivo.

En el get_table_xml() ejemplo siguiente se llama al método para recuperar los cambios de configuración y, a continuación, se almacenan en la configXML variable. Antes de llamar append() al método, el get_table_xml() método devuelve None. Por lo tanto, la aplicación solo serializa e imprime los datos de configuración XML si el valor devuelto no Nonees .

El get_table_xml() método solo devuelve los datos XML de Junos para los cambios de configuración. También es posible que desee comparar las configuraciones candidatas y activas después de cargar los cambios de configuración en el dispositivo para revisar las diferencias antes de confirmar los cambios.

Para recuperar las diferencias, puede llamar a los métodos , , y por separado y ver las lock()diferencias de pdiff() configuración llamando al método después de cargar los datos, pero antes de confirmarlos.unlock() commit()load() El pdiff() método con una lista de argumentos vacía compara la configuración candidata con la configuración activa e imprime la diferencia en formato de parche directamente en la salida estándar.

Cómo controlar el intervalo de tiempo de espera de RPC

Cuando utilice las tablas de configuración de Junos PyEZ para configurar recursos estructurados, puede cargar y confirmar los cambios de configuración llamando al set() método o a los load() métodos y commit() . Los set() métodos y commit() utilizan el valor de tiempo de espera de RPC tal y como se define en el device módulo. Si no configura un valor nuevo para la Device timeout propiedad, Junos PyEZ utilizará el valor predeterminado de 30 segundos.

Los cambios de configuración grandes pueden superar el valor de tiempo de espera predeterminado o configurado, lo que hace que se agote el tiempo de espera de la operación antes de que se pueda cargar y confirmar la configuración en el dispositivo. Para dar cabida a determinados cambios de configuración que pueden requerir tiempos de carga y confirmación más largos que el intervalo de tiempo de espera predeterminado o configurado, establezca el timeout=seconds argumento en un valor adecuado cuando llame al método or commit() en la set() aplicación. Por ejemplo: