Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Cómo usar la biblioteca de solicitudes para Python en dispositivos que ejecutan Junos OS

La biblioteca de solicitudes para Python está disponible en ciertos dispositivos que ejecutan Junos OS que admiten el paquete de extensiones de Python. Puede usar el requests módulo en scripts de Python para enviar solicitudes HTTP/1.1. En dispositivos que ejecutan Junos OS con automatización mejorada, también puede usar el módulo en el requests modo interactivo de Python. La biblioteca de solicitudes proporciona métodos adicionales para admitir implementaciones iniciales, así como para realizar monitoreo de rutina y cambios de configuración en dispositivos que ejecutan Junos OS. Para obtener más información sobre el requests módulo y sus funciones, consulte la documentación de solicitudes en http://docs.python-requests.org/.

Emisión de solicitudes

Puede usar el módulo en las requests secuencias de comandos de Python enbox para enviar solicitudes HTTP/1.1. Para realizar una solicitud, importe el módulo en el script y llame a la función correspondiente a la solicitud deseada. El módulo admite HTTP GET y POST solicitudes, así como HEAD, DELETEy PUT solicitudes. La solicitud devuelve un objeto Response que contiene la respuesta del servidor. De forma predeterminada, las solicitudes se realizan mediante la instancia de enrutamiento predeterminada.

La biblioteca de solicitudes se puede utilizar para ejecutar RPCs en dispositivos que ejecutan Junos OS que admiten el servicio de API REST. El dispositivo de destino debe configurarse con las instrucciones adecuadas en el [edit system services rest] nivel de jerarquía para habilitar los comandos de Junos OS a través de HTTP o HTTPS mediante REST.

Por ejemplo, la siguiente secuencia de comandos de operación realiza una solicitud GET que ejecuta la get-software-information RPC en un dispositivo remoto que ejecuta Junos OS que tiene el servicio de API REST a través de HTTP configurado en el puerto predeterminado (3000). La secuencia de comandos imprime el código de estado de respuesta y, si el código de estado indica el éxito, imprime el contenido de la respuesta.

Para recuperar solo los encabezados, puede enviar una solicitud simple HEAD .

Si una solicitud GET requiere parámetros adicionales, puede incluir el params argumento y proporcionar un diccionario o una lista de tuplas o bytes para enviar en la cadena de consulta, o puede pasar pares de clave/valor como parte de la DIRECCIÓN URL. De forma similar, puede proporcionar encabezados personalizados incluyendo el headers argumento y un diccionario de encabezados HTTP.

La siguiente solicitud ejecuta el get-interface-information RPC con la opción terse para la interfaz dada y devuelve la respuesta en formato de texto:

En el ejemplo siguiente, se suministran los argumentos como pares clave/valor en la DIRECCIÓN URL:

Para ejecutar varias RPCs en la misma solicitud, inicie una solicitud HTTP POST y establezca el data parámetro para hacer referencia a las RPCs que se ejecutarán. Consulte secciones Ejecución de RPCs operativas y Administración de la configuración para ver ejemplos que ejecutan varias RPCs.

Ejecución de RPCs operativas

Puede usar el requests módulo para ejecutar RPCs desde la API XML de Junos en un dispositivo remoto que ejecute Junos OS que tenga habilitado el servicio de API REST.

El siguiente script operativo utiliza el requests módulo para ejecutar el equivalente RPC del show interfaces ge-2/0/1 terse comando del modo operativo en el dispositivo de destino:

El siguiente script operativo envía una solicitud POST que ejecuta varias RPCs en el dispositivo de destino. El data parámetro hace referencia a las RPCs que se van a ejecutar, las cuales se definen en una cadena multilínea para una legibilidad.

También puede crear una secuencia de comandos op genérica para la cual el usuario proporciona las variables necesarias y la secuencia de comandos construye y ejecuta la solicitud. Considere la siguiente configuración de script operativo, que configura los hostargumentos de línea de comandos , rpcy rpc_args de comandos para la secuencia de comandos requests-rpc.py op:

La siguiente secuencia de comandos de operación de ejemplo se conecta a un dispositivo remoto que ejecuta Junos OS, que se configuró con las instrucciones adecuadas en el [edit system services rest] nivel de jerarquía para habilitar los comandos de Junos OS a través de HTTP mediante REST. El script solicita la contraseña de conexión y se conecta al host y al puerto proporcionados mediante el host argumento. A continuación, la secuencia de comandos usa el requests módulo para enviar una solicitud GET que ejecuta la RPC proporcionada a través de los argumentos de línea de comandos.

Nota:

A partir de Junos OS versión 21.2R1 y Junos OS Evolved versión 21.2R1, cuando el dispositivo pasa los argumentos de línea de comandos a una secuencia de comandos op de Python, antepone un solo guión (-) a nombres de argumentos de un solo carácter y prefijos de dos guiones (--) a nombres de argumentos de varios caracteres. En versiones anteriores, los dispositivos antepongen un solo guión (-) a todos los nombres de argumento.

Cuando ejecuta la secuencia de comandos, ejecuta la RPC con las opciones especificadas en el dispositivo remoto e imprime la respuesta a la salida estándar.

Administración de la configuración

Puede usar el requests módulo para recuperar o cambiar la configuración en un dispositivo que ejecute Junos OS que tenga habilitado el servicio de API REST.

La siguiente secuencia de comandos op recupera la [edit system] jerarquía de la configuración candidata mediante una solicitud POST:

Las solicitudes HTTP POST también le permiten ejecutar varias RPCs en una sola solicitud, por ejemplo, para bloquear, cargar, confirmar y desbloquear una configuración.

La siguiente secuencia de comandos de operación de ejemplo se conecta al dispositivo remoto y configura una dirección en la interfaz dada. Las operaciones de bloqueo, carga, confirmación y desbloqueo se definen por separado para la legibilidad, pero las RPCs se concatenan en la solicitud.

Cuando se ejecuta la secuencia de comandos op, devuelve los resultados rpc para las operaciones de bloqueo, carga, confirmación y desbloqueo. En algunos dispositivos, la salida de respuesta separa las respuestas RPC individuales con líneas de límite que incluyen -- seguidas de una cadena de límite y un Content-Type encabezado. Otros dispositivos pueden incluir solo el Content-Type encabezado.

Uso de certificados en solicitudes HTTPS

El mecanismo de autenticación básica HTTP envía las credenciales de usuario como una cadena de texto sin cifrar codificada en Base64. Para proteger las credenciales de autenticación de las escuchas, recomendamos habilitar el servicio de API RESTful a través de HTTPS, que cifra la comunicación mediante la seguridad de capa de transporte (TLS) o la capa de sockets seguros (SSL). Para obtener más información acerca de cómo configurar este servicio, consulte la Guía de la API de REST de Junos OS.

De forma predeterminada, la biblioteca de solicitudes verifica los certificados SSL para las solicitudes HTTPS. Puede incluir los verify argumentos y cert en la solicitud para controlar las opciones de verificación SSL. Para obtener información detallada acerca de estas opciones, consulte la documentación de solicitudes.

Nota:

Cuando usa Python 2.7 para ejecutar una secuencia de comandos que usa el requests módulo para ejecutar solicitudes HTTPS, el script genera InsecurePlatformWarning y SubjectAltNameWarning advierte.

La siguiente secuencia de comandos op envía una solicitud GET a través de HTTPS y establece el argumento en la verify ruta de archivo de un paquete de CA o un directorio que contiene certificados de CA de confianza. Los certificados de CA especificados se utilizan para comprobar el certificado del servidor.

Para especificar un certificado del lado del cliente local, establezca el cert argumento igual a la ruta de un solo archivo que contenga la clave y el certificado privados del cliente o a una tupla que contenga las rutas del certificado de cliente individual y los archivos de clave privada.

Especificación de la instancia de enrutamiento

De forma predeterminada, las solicitudes se ejecutan mediante la instancia de enrutamiento predeterminada. También puede ejecutar solicitudes mediante la mgmt_junos instancia de administración u otra instancia de enrutamiento no predeterminada. Cuando ejecuta scripts a través de la infraestructura de Junos OS, puede especificar la instancia de enrutamiento llamando a la set_routing_instance() función en el script. Algunos dispositivos también admiten la especificación de la instancia de enrutamiento y la ejecución de una secuencia de comandos en el shell de nivel unix.

Nota:

En dispositivos que ejecutan Junos OS Evolved, la set_routing_instance() función solo admite el uso de la instancia de enrutamiento de administración.

En una secuencia de comandos de Python, para ejecutar una solicitud mediante una instancia de enrutamiento no predeterminada, incluida la mgmt_junos instancia:

  1. Importe el jcs módulo.
  2. Llame a la set_routing_instance() función y especifique la instancia que se va a usar para la conexión.
  3. Establezca la conexión con el dispositivo de destino.

La siguiente secuencia de comandos op usa la mgmt_junos instancia de administración para conectarse al dispositivo de destino y ejecutar solicitudes.

Para obtener más información sobre el uso de la set_routing_instance() función en scripts de Python, consulte set_routing_instance().

Además de especificar la instancia de enrutamiento en la secuencia de comandos, ciertos dispositivos admiten la especificación de la instancia de enrutamiento y la ejecución de una secuencia de comandos desde el shell de nivel unix. En dispositivos que ejecutan Junos OS con automatización mejorada (FreeBSD versión 7.1 o posterior), puede usar el setfib comando para ejecutar solicitudes con la instancia de enrutamiento dada, incluida la instancia de administración y otras instancias de enrutamiento no predeterminadas.

La siguiente secuencia de comandos de Python simplemente ejecuta el get-software-information RPC en un dispositivo remoto e imprime la respuesta:

Para usar setfib para ejecutar la secuencia de comandos mediante una instancia de enrutamiento no predeterminada en un dispositivo que ejecuta Junos OS con automatización mejorada:

  1. Encuentre el índice de software asociado con la tabla de enrutamiento para esa instancia.

    En el ejemplo siguiente, el dispositivo está configurado para usar la instancia mgmt_junosde administración dedicada no predeterminada. Se hace referencia al índice de la tabla de enrutamiento en el resultado del comando.

    Para ejecutar la secuencia de comandos op con la instancia de enrutamiento dada, utilice el setfib comando para ejecutar la secuencia de comandos y hacer referencia al índice. Por ejemplo:

    En el ejemplo siguiente, el dispositivo está configurado con una instancia de enrutamiento no predeterminada, vr1, y el índice de tabla de enrutamiento vr1.inet es 8:

    El siguiente comando ejecuta la secuencia de comandos op mediante la instancia de enrutamiento vr1:

Realización de operaciones ZTP

El aprovisionamiento sin intervención (ZTP) le permite aprovisionar nuevos dispositivos de Juniper Networks de forma automática, con una intervención manual mínima. Para usar ZTP, configure un servidor para proporcionar la información necesaria, que puede incluir una imagen de Junos OS y un archivo de configuración que se va a cargar o una secuencia de comandos que se va a ejecutar. Cuando conecta físicamente un dispositivo a la red y lo inicia con una configuración predeterminada de fábrica, el dispositivo recupera la información del servidor designado, actualiza la imagen de Junos OS según corresponda y ejecuta la secuencia de comandos o carga el archivo de configuración.

Cuando se conecta y arranca un nuevo dispositivo de red, si Junos OS detecta un archivo en el servidor, se examina la primera línea del archivo. Si Junos OS encuentra los caracteres #! seguido de una ruta de intérprete, trata el archivo como una secuencia de comandos y lo ejecuta con el intérprete especificado. Puede usar la biblioteca solicitudes en scripts ejecutados para optimizar el proceso de ZTP.

Por ejemplo, considere la siguiente secuencia de comandos de Python de ejemplo, que el nuevo dispositivo descarga y ejecuta durante el proceso ZTP. Cuando se ejecuta la secuencia de comandos, primero descarga el certificado de CA de la ca_cert_remote ubicación en el servidor especificado y lo almacena localmente en la ca_cert_local ubicación. A continuación, la secuencia de comandos se conecta al servidor de configuración en el puerto 8000 y emite una solicitud GET para recuperar la nueva configuración del dispositivo. La solicitud incluye la ruta al certificado de CA, que se usa para comprobar el certificado del servidor durante el intercambio. A continuación, la secuencia de comandos usa la biblioteca Junos PyEZ para cargar la configuración en el dispositivo y confirmarla.