Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Usar 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 el recurso estructurado en la aplicación Junos PyEZ, la aplicación puede configurar el recurso en los dispositivos. En este tema se describe el proceso general y algunas tareas específicas para usar tablas y vistas de configuración de Junos PyEZ para configurar recursos estructurados en un dispositivo.

Proceso de configuración general

La propiedad Table 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 nivel jerárquico [edit system login] :

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 al 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 (tal como se definen en la vista) iguales a los valores deseados.

El valor predeterminado de un campo es None a menos que View defina explícitamente un valor predeterminado para ese campo. Si View 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 e, idealmente, controlar cualquier error que pueda 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 Table key-field , que en este ejemplo es username.

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

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 valores múltiples, configurar varias instancias de una instrucción o recurso, eliminar una instrucción leaf o container, o configurar una propiedad de objeto que corresponda a un atributo XML de Junos, consulte las secciones siguientes:

Después de configurar un objeto, debe llamar append() al método para generar la configuración XML de Junos correspondiente y agregarla al lxml objeto que almacena el conjunto maestro de cambios de configuración para ese objeto Table. Los cambios de configuración incluyen solo aquellos 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 omiten.

Después de generar el XML, el append() método también restablece todos los campos a sus valores predeterminados o a None si View no define un valor predeterminado para ese campo. Esto permite configurar varios objetos en la misma aplicación y garantiza que no utilice involuntariamente un valor definido para un recurso al configurar recursos subsiguientes. Cada vez que configure un nuevo recurso, debe llamar append() para agregar los cambios de configuración al conjunto maestro de cambios. Para obtener más información sobre el append() método, consulte Usar 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 a None si la vista no define un valor predeterminado. El reset() método sólo 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, 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 , , commit()y unlock() a los lock()load()métodos

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

Nota:

Cuando se crea la instancia de tabla con un administrador de contexto (with ... as sintaxis) que incluye el mode parámetro para utilizar un modo de configuración específico, el administrador de contexto controla la apertura y el bloqueo, 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. Si se llama al lock() método o set() , se produce 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 o pdiff() para revisar las diferencias de configuración después de cargar los datos, pero antes de confirmarlos. O bien, es posible que deba 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 distintos métodos para cargar y confirmar los datos de configuración, consulte Usar Junos PyEZ para configurar dispositivos Junos y Usar Junos PyEZ para confirmar la configuración.

En el caso de operaciones de carga y confirmación grandes que podrían 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 del set() método o commit() . Para obtener más información, vea 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 la aplicación Junos PyEZ, independientemente de si la tabla especifica 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.

Configurar instrucciones que constan 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 únicamente 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 la aplicación de Junos PyEZ, como la ftp instrucción en [edit system services], establezca el valor del nombre de campo correspondiente definido en la Vista igual al valor Truebooleano .

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

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

Configurar varios valores para la misma instrucción

Algunas instrucciones leaf de Junos OS aceptan varios valores, que pueden estar definidos por el usuario o extraídos de un conjunto de valores predefinidos. La notación CLI usa 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) igual a 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 en 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 utiliza para el valor de un campo en la aplicación Junos PyEZ es una lista de valores delimitada por comas. Esta lista se traduce a 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 permite configurar varias instancias de la misma instrucción. Por ejemplo, puede configurar varias direcciones en 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 se utilizan tablas de configuración de Junos PyEZ para administrar recursos estructurados, se definen valores para las instrucciones de configuración estableciendo que los nombres de campo correspondientes sean iguales a los valores deseados. Sin embargo, no puede definir el mismo campo dos veces en la aplicación 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 encargará de la conversión a XML.

Considere la siguiente tabla y vista:

El código de ejemplo siguiente muestra cómo configurar varias direcciones para la interfaz de circuito cerrado en una aplicación Junos PyEZ. 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 tablas de configuración de Junos PyEZ para configurar recursos estructurados, es posible que deba 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 Junos PyEZ, debe definir los valores de los campos de un objeto, llamar al append() método y, a continuación, repetir este proceso para cada objeto posterior.

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 genera los datos XML de Junos para el cambio de configuración y los agrega al lxml objeto que almacena el conjunto maestro 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 a None si un campo no tiene un valor predeterminado definido.

En el ejemplo siguiente 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 código de ejemplo siguiente configura los mismos dos usuarios mediante una sintaxis más compacta:

Eliminar contenedores o instrucciones leaf

En algunos casos, es posible que deba eliminar contenedores o instrucciones leaf en la configuración. Cuando utilice tablas de configuración de Junos PyEZ para gestionar 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 eliminar una instrucción contenedor u hoja para indicar a qué objeto se aplica la eliminación.

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

Para eliminar una instrucción leaf para el recurso definido en Table and View, establezca el valor del campo correspondiente a dicha 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, View debe definir un campo para ese contenedor. En el ejemplo Table and View, 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, sólo 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 desea eliminar. En el ejemplo siguiente 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 elimine ese objeto de la configuración.

Configurar propiedades correspondientes a 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 inactive o protect, 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.

Al ver 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.

Configuración de Junos PyEZ Las tablas 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 ejemplo siguiente 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 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 quitar el protect atributo de un elemento protegido, establezca el valor de campo apropiado 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 .

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

Cuando se utilizan tablas de configuración de Junos PyEZ para configurar recursos estructurados, se definen los valores de los campos de un recurso y, a continuación, se 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 maestro 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 sólo incluyen aquellos 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 omiten.

Después de generar el XML, el append() método también restablece todos los campos a sus valores predeterminados, tal como se definen en la vista, o a None si un campo no tiene un valor predeterminado definido. El restablecimiento de 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 anexados nodos al conjunto maestro de cambios de configuración, no podrá deshacer la operación.

El append() método sólo agrega los nuevos cambios al lxml objeto que contiene el conjunto maestro 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 se utilizan tablas de configuración de Junos PyEZ para configurar recursos estructurados, se definen los valores de los campos de un recurso y, a continuación, se 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 maestro de cambios de configuración. A veces, es posible que deba revisar los datos de configuración que se han creado hasta cierto punto en la aplicación, o puede 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 get_table_xml() objeto Table. El get_table_xml() método devuelve la configuración XML que se ha construido hasta ese punto en la aplicación. Cuando se 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 ejemplo siguiente se llama al get_table_xml() método para recuperar los cambios de configuración y, a continuación, se almacena 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 sólo 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 lock()métodos , load(), commit()y unlock() por separado y ver las diferencias de configuración llamando al pdiff() método después de cargar los datos, pero antes de confirmarlos. 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 el formato de revisión directamente en la salida estándar.

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

Cuando utilice tablas de configuración de Junos PyEZ para configurar recursos estructurados, puede cargar y confirmar los cambios de set() configuración llamando al 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 como se define en el device módulo. Si no configura un nuevo valor para la Device timeout propiedad, Junos PyEZ utiliza 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 la configuración se pueda cargar y confirmar en el dispositivo. Para adaptarse a determinados cambios de configuración que pueden requerir tiempos de carga y confirmación superiores al intervalo de tiempo de espera predeterminado o configurado, establezca el timeout=seconds argumento en un valor adecuado cuando llame al set() método OR commit() en la aplicación. Por ejemplo: