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]
:
UserConfigTable: set: system/login/user key-field: username view: UserConfigView UserConfigView: groups: auth: authentication fields: username: name userclass: { class : { 'default' : 'unauthorized' }} uid: { uid: { 'type': 'int', 'minValue':100, 'maxValue':64000 }} fullname: full-name fields_auth: password: encrypted-password
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:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable from lxml import etree with Device(host='router.example.com') as dev: uc = UserConfigTable(dev)
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.
table_object.fieldname = value
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 username
campos , userclass
y 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.
# Python 3 from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable from lxml import etree with Device(host='router.example.com') as dev: uc = UserConfigTable(dev) uc.username = 'user1' uc.userclass = 'operator' uc.password = '$ABC123' ...
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:
Configurar instrucciones que constan de una palabra clave de forma fija
Configurar propiedades correspondientes a atributos XML de Junos
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.
uc.append()
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.
uc.reset()
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.
configXML = uc.get_table_xml() if (configXML is not None): print (etree.tostring(configXML, encoding='unicode', pretty_print=True))
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()
yunlock()
a loslock()
load()
métodosLlame a los
lock()
métodos,load()
,commit()
, yunlock()
individualmente
uc.set()
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:
keyword value;
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.
system { services { ftp; } }
La API XML de Junos representa estas instrucciones con una etiqueta vacía.
<configuration> <system> <services> <ftp> </ftp> ... </services> </system> </configuration>
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 True
booleano .
Considere la siguiente vista, que define el ftp
campo con una restricción de tipo para garantizar que el valor del campo sea booleano:
ServicesView: fields: ftp: { 'ftp' : { 'type': 'bool' } } ...
Para configurar el campo en su ftp
aplicación Junos PyEZ, establezca el campo en .True
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='router.example.com') as dev: sc = ServicesConfigTable(dev) sc.ftp = True sc.append() sc.set()
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:
keyword [ value1 value2 value3 ...];
Por ejemplo, es posible que deba configurar una lista de ID de VLAN para una interfaz troncal, como en la siguiente configuración:
interfaces { ge-0/0/1 { native-vlan-id 510; unit 0 { family bridge { interface-mode trunk; vlan-id-list [ 510 520 530 ]; } } } }
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.
from jnpr.junos import Device from myTables.ConfigTables import InterfacesConfigTable with Device(host='router.example.com') as dev: intf = InterfacesConfigTable(dev) intf.name = 'ge-0/0/1' intf.mode = 'trunk' intf.native_vlan = 510 intf.vlan_list = [510, 520, 530] intf.append() intf.set()
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:
interfaces { lo0 { unit 0 { family inet { address 192.168.100.1/32; address 192.168.100.2/32; } } } }
La representación XML de Junos de la configuración es la siguiente:
<configuration> <interfaces> <interface> <name>lo0</name> <unit> <name>0</name> <family> <inet> <address> <name>192.168.100.1/32</name> </address> <address> <name>192.168.100.2/32</name> </address> </inet> </family> </unit> </interface> </interfaces> </configuration>
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:
InterfaceTable: set: interfaces/interface key-field: - name - unit_name view: InterfaceView InterfaceView: fields: name: name desc: description unit_name: unit/name ip_address: unit/family/inet/address
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.
lo0_addresses = ['192.168.100.1/32', '192.168.100.2/32'] ... intf = InterfaceTable(dev) intf.name='lo0' intf.unit_name = 0 intf.ip_address = lo0_addresses intf.append() intf.set() ...
La configuración resultante es:
[edit interfaces] + lo0 { + unit 0 { + family inet { + address 192.168.100.1/32; + address 192.168.100.2/32; + } + } + }
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:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable from lxml import etree with Device(host='router.example.com') as dev: uc = UserConfigTable(dev) uc.username = 'user1' uc.userclass = 'operator' uc.uid = 1005 uc.password = '$ABC123' uc.append() uc.username = 'user2' uc.userclass = 'operator' uc.uid = 1006 uc.password = '$ABC123' uc.append() uc.set()
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:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable from lxml import etree users = ['user1', 'user2'] uids = ['1005', '1006'] passwds = ['$ABC123', '$ABC123'] with Device(host='router.example.com') as dev: uc = UserConfigTable(dev) for user, uid, passwd in zip(users, uids, passwds): uc.username = user uc.userclass = 'operator' uc.uid = uid uc.password = passwd uc.append() uc.set()
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:
--- UserConfigTable2: set: system/login key-field: - username view: UserConfigView2 UserConfigView2: groups: auth: user/authentication fields: user: user username: user/name classname: { user/class : { 'type' : { 'enum' : ['operator', 'read-only', 'super-user'] } } } uid: { user/uid : { 'type' : 'int', 'minValue' : 100, 'maxValue' : 64000 } } fields_auth: password: encrypted-password
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
:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable2 with Device(host='router.example.com') as dev: uc = UserConfigTable2(dev) uc.username = 'jsmith' uc.uid = { 'operation' : 'delete' } uc.append() uc.set()
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:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable2 from lxml import etree with Device(host='router.example.com') as dev: uc = UserConfigTable2(dev) uc.user = { 'operation' : 'delete' } uc.username = 'jsmith' uc.append() print (etree.tostring(uc.get_table_xml(), encoding='unicode', pretty_print=True)) uc.set()
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.
<configuration> <system> <login> <user operation="delete"> <name>jsmith</name> </user> </login> </system> </configuration>
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.
[edit] user@host# deactivate interfaces ge-1/0/2
Al ver la configuración en la CLI, la inactive
etiqueta precede al nombre de la interfaz.
[edit] user@host# show interfaces inactive: ge-1/0/2 { description "to CustomerA"; unit 0 { family inet { address 198.51.100.1/24; } } }
Del mismo modo, en la salida XML de Junos, el <interface>
elemento de la misma interfaz incluye el inactive="inactive"
atributo.
user@host# show interfaces | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/18.3R1/junos"> <configuration junos:changed-seconds="1544581124" junos:changed-localtime="2018-12-11 18:18:44 PST"> <interfaces> <interface inactive="inactive"> <name>ge-1/0/2</name> <description>to CustomerA</description> <unit> <name>0</name> <family> <inet> <address> <name>198.51.100.1/24</name> </address> </inet> </family> </unit> </interface> </interfaces> </configuration> </rpc-reply>
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:
InterfaceTable: set: interfaces key-field: - name view: InterfaceView InterfaceView: fields: interface: interface name: interface/name desc: interface/description unit_name: interface/unit/name ip_address: interface/unit/family/inet/address
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:
from jnpr.junos import Device from myTables.ifConfigTable import InterfaceTable from lxml import etree with Device(host='router.example.com') as dev: intf = InterfaceTable(dev) intf.name = 'ge-1/0/2' intf.unit_name = 0 intf.ip_address = '198.51.100.1/24' intf.desc = 'to CustomerA' intf.interface = {'inactive':'inactive'} intf.append() configXML = intf.get_table_xml() if (configXML is not None): print (etree.tostring(configXML, encoding='unicode', pretty_print=True)) else: print (configXML) intf.set()
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.
<configuration> <interfaces> <interface inactive="inactive"> <name>ge-1/0/2</name> <unit> <name>0</name> <family> <inet> <address>198.51.100.1/24</address> </inet> </family> </unit> <description>to CustomerA</description> </interface> </interfaces> </configuration>
Para activar un objeto inactivo, establezca el campo Vista correspondiente al objeto inactivo en {'active':'active'}
.
from jnpr.junos import Device from myTables.ifConfigTable import InterfaceTable from lxml import etree with Device(host='router.example.com') as dev: intf = InterfaceTable(dev) intf.name = 'ge-1/0/2' intf.interface = {'active':'active'} intf.append() intf.set()
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.
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable with Device(host='router.example.com') as dev: uc = UserConfigTable(dev) uc.username = 'user1' uc.userclass = 'operator' uc.password = '$ABC123' uc.append() uc.set()
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()
.
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 None
es .
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable from lxml import etree with Device(host='router.example.com') as dev: uc = UserConfigTable(dev) uc.username = 'user1' uc.userclass = 'operator' uc.password = '$ABC123' uc.append() configXML = uc.get_table_xml() if (configXML is not None): print (etree.tostring(configXML, encoding='unicode', pretty_print=True)) else: print (configXML) uc.set()
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.
... uc.append() uc.lock() uc.load() uc.pdiff() ... uc.commit() uc.unlock()
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:
uc = UserConfigTable(dev) uc.username = 'user1' uc.userclass = 'operator' uc.uid = 1005 uc.password = '$ABC123' uc.append() uc.set(timeout=300)