EN ESTA PÁGINA
Utilice el kit de herramientas Java de NETCONF para realizar tareas operativas
Usar métodos de objetos de dispositivo para ejecutar RPC y comandos operativos
El objeto de kit de herramientas Device
Java NETCONF tiene métodos para solicitar información y realizar tareas operativas en dispositivos remotos. Cuando es apropiado, los métodos se sobrecargan para tomar varios formatos diferentes.
Ejecución de RPC
Para ejecutar una llamada a procedimiento remoto (RPC), llame executeRPC()
al método en el Device
objeto. El executeRPC()
método está sobrecargado para aceptar un String
objeto, un net.juniper.netconf.XML
objeto o un org.w3c.dom.Document
objeto como argumento. El servidor NETCONF procesa el RPC, que devuelve la respuesta RPC como un objeto XML.
La sintaxis del método es:
public XML executeRPC (String rpcContent) public XML executeRPC (net.juniper.netconf.XML rpc) public XML executeRPC (org.w3c.dom.Document rpcDoc)
El siguiente fragmento de código ejecuta el RPC de la API get-chassis-inventory
XML de Junos mediante un argumento de cadena. La get-chassis-inventory
RPC es equivalente al comando de show chassis hardware
modo operativo de la interfaz de línea de comandos (CLI) de Junos OS.
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); try { XML rpc_reply = device.executeRPC("get-chassis-inventory"); System.out.println(rpc_reply.toString()); } catch (Exception e) { System.out.println("exception: " + e.getMessage()); // additional processing for exception } device.close();
Ejecución de comandos del modo operativo
Para ejecutar un comando en modo operativo para solicitar información o realizar tareas operativas en un dispositivo que ejecute Junos OS, llame al runCliCommand()
método en el Device
objeto. El runCliCommand()
método envía un comando de modo operativo de Junos OS al servidor NETCONF del dispositivo remoto. El argumento es una cadena que representa el comando del modo operativo que introduciría en la CLI de Junos OS. El servidor NETCONF procesa el RPC, que devuelve la respuesta RPC. A partir de Junos OS versión 11.4, la cadena de retorno es la misma salida con formato ASCII que se ve en la CLI de Junos OS. Para los dispositivos que ejecutan versiones anteriores de Junos OS, la cadena devuelta contiene elementos de etiqueta XML de Junos.
La sintaxis del método es:
public String runCLICommand (String command)
El siguiente fragmento de código envía el comando show chassis hardware
de modo operativo de la CLI al servidor NETCONF en un dispositivo que ejecuta Junos OS:
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); try { cli_reply = device.runCliCommand("show chassis hardware"); System.out.println(cli_reply); } catch (Exception e) { System.out.println("exception: " + e.getMessage()); // additional processing for exception } device.close();
Ejemplo: Aplicación Java NETCONF para ejecutar una solicitud operativa RPC
Este programa de kit de herramientas Java NETCONF ejecuta un RPC para obtener información operativa de un dispositivo, que luego se imprime en la salida estándar. Este ejemplo sirve como ejemplo instructivo para crear y ejecutar un programa básico de kit de herramientas Java NETCONF.
Requisitos
El kit de herramientas Java de NETCONF está instalado en el servidor de administración de configuración.
La aplicación cliente puede iniciar sesión en el dispositivo donde reside el servidor NETCONF.
El servicio NETCONF a través de SSH está habilitado en el dispositivo donde reside el servidor NETCONF.
Visión general
Puede utilizar el kit de herramientas Java de NETCONF para solicitar información operativa desde un dispositivo remoto. En el ejemplo siguiente se muestra cómo crear un programa de kit de herramientas Java NETCONF para ejecutar una solicitud operativa desde la API XML de Junos en un dispositivo que ejecuta Junos OS. En el ejemplo también se explica cómo compilar el código, ejecutar el programa y comprobar los resultados.
Configuración
Creación del programa Java
Procedimiento paso a paso
Para construir el archivo de programa Java que contiene el código para la solicitud operativa:
Asigne al archivo un nombre descriptivo.
El nombre de archivo debe ser el mismo que el nombre de la clase. En este ejemplo, el archivo y la clase se denominan GetChassisInventory.
Incluya las instrucciones import apropiadas y el código para la declaración de clase y el método Java,
main()
.import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.Device; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import org.xml.sax.SAXException; public class GetChassisInventory { public static void main(String args[]) throws NetconfException, ParserConfigurationException, SAXException, IOException { } }
Dentro de
main()
, cree unDevice
objeto y llame alconnect()
método.Esto crea una sesión NETCONF predeterminada sobre SSHv2 con el servidor NETCONF. Debe actualizar el código con los argumentos adecuados para la conexión y la autenticación en su dispositivo específico.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); device.connect();
Una vez establecido un
Device
objeto, puede realizar operaciones NETCONF en el dispositivo. Para obtener una lista completa de los métodos disponibles correspondientes a las operaciones de NETCONF, consulte el kit de herramientas Java de NETCONF Javadocs.Llame al
executeRPC()
método con el comando RPC de solicitud operacional como argumento.En este ejemplo se usa la RPC de la API
get-chassis-inventory
XML de Junos. La respuesta, que se devuelve en XML, se almacena en larpc_reply
variable.XML rpc_reply = device.executeRPC(“get-chassis-inventory”);
Agregue código para realizar acciones en la respuesta RPC.
El código siguiente convierte la respuesta del servidor NETCONF en una cadena y la imprime en la pantalla:
System.out.println(rpc_reply.toString());
Cierre el dispositivo y libere recursos llamando al
close()
método en el objeto dispositivo.device.close();
Resultados
El programa completo es:
/*GetChassisInventory*/ import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.Device; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import org.xml.sax.SAXException; public class GetChassisInventory { public static void main(String args[]) throws NetconfException, ParserConfigurationException, SAXException, IOException { Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); XML rpc_reply = device.executeRPC("get-chassis-inventory"); System.out.println(rpc_reply.toString()); device.close(); } }
Compilar y ejecutar el programa Java
Procedimiento paso a paso
Necesita un compilador Java para compilar el código fuente y crear un programa ejecutable.
Para compilar el código y ejecutar el programa en el servidor de administración de configuración:
Compile el archivo GetChassisInventory.java .
> javac GetChassisInventory.java
Ejecute el programa GetChassisInventory .
> java GetChassisInventory
Verificación
Verificación de la ejecución del programa
Propósito
Compruebe que el programa GetChassisInventory se ejecuta correctamente.
Acción
Si el programa se ejecuta correctamente, establece una conexión y crea una sesión NETCONF con el dispositivo especificado. El programa envía el get-chassis-inventory
RPC al servidor NETCONF y el servidor responde con la información operativa solicitada encerrada en el elemento de <rpc-reply>
etiqueta. El programa imprime la respuesta al estándar. A continuación se muestra un ejemplo de respuesta RPC con algunos resultados omitidos por brevedad.
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/11.2R1/junos"> <chassis-inventory xmlns="http://xml.juniper.net/junos/11.2R1/junos-chassis"> <chassis junos:style="inventory"> <name>Chassis</name> <serial-number>12345</serial-number> <description>M7i</description> <chassis-module> ...output omitted... </chassis> </chassis-inventory> </rpc-reply>
Solución de problemas
Solución de problemas de excepciones de NETCONF
Problema
Se produce una excepción NETCONF y verá el siguiente mensaje de error:
Exception in thread "main" net.juniper.netconf.NetconfException: There was a problem while connecting to 10.10.1.1:830 at net.juniper.netconf.Device.createNetconfSession(Device.java:344) at net.juniper.netconf.Device.connect(Device.java:225) at GetChassisInventory.main(GetChassisInventory.java:14)
Es posible que NETCONF a través de SSH no esté habilitada en el dispositivo donde reside el servidor NETCONF o que esté habilitada en un puerto diferente.
Solución
Asegúrese de que ha habilitado NETCONF a través de SSH en el dispositivo donde reside el servidor NETCONF. Dado que el programa de ejemplo no especifica un número de puerto específico en los Device
argumentos, la sesión NETCONF se establece en el puerto predeterminado NETCONF-over-SSH, 830. Para verificar si NETCONF sobre SSH está habilitada en el puerto predeterminado de un dispositivo que ejecuta Junos OS, introduzca el siguiente comando de modo operativo en el dispositivo remoto:
user@host> show configuration system services ftp; netconf { ssh; }
Si la jerarquía de netconf
configuración está ausente, emita las instrucciones siguientes en el modo de configuración para habilitar NETCONF a través de SSH en el puerto predeterminado:
[edit] user@host# set system services netconf ssh user@host# commit
Si la jerarquía de netconf
configuración especifica un puerto distinto del predeterminado, incluya el nuevo número de puerto en los argumentos del constructor de Device
objetos. Por ejemplo, el siguiente dispositivo está configurado para NETCONF a través de SSH en el puerto 12345:
user@host> show configuration system services netconf { ssh { port 12345; } }
Para corregir el problema de conexión, incluya el nuevo número de puerto en los Device
argumentos.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);
Ejemplo: Aplicación Java NETCONF para ejecutar comandos CLI
Este programa de kit de herramientas Java de NETCONF demuestra el runCLICommand()
método, que envía el comando de modo operativo de Junos OS especificado al servidor de NETCONF para solicitar información o realizar tareas operativas en un dispositivo que ejecuta Junos OS.
Requisitos
Dispositivo de enrutamiento, conmutación o seguridad que ejecuta Junos OS.
El kit de herramientas Java de NETCONF está instalado en el servidor de administración de configuración.
La aplicación cliente puede iniciar sesión en el dispositivo donde reside el servidor NETCONF.
El servicio NETCONF a través de SSH está habilitado en el dispositivo donde reside el servidor NETCONF.
Visión general
La clase del kit de herramientas Device
Java de NETCONF contiene el método, que toma un comando de runCliCommand()
modo operativo de la CLI de Junos OS y lo convierte en un RPC equivalente en XML que puede procesar el servidor NETCONF. El runCLICommand()
método toma como argumento la cadena que representa un comando en modo operativo que se introduce en la CLI de Junos OS.
En el ejemplo siguiente se ejecuta el show chassis hardware
comando en un dispositivo que ejecuta Junos OS. El valor devuelto del método es una cadena. A partir de Junos OS versión 11.4, la cadena de retorno es la misma salida con formato ASCII que se ve en la CLI de Junos OS. Para los dispositivos que ejecutan versiones anteriores de Junos OS, la cadena devuelta contiene elementos de etiqueta XML de Junos.
Configuración
Creación del programa Java
Procedimiento paso a paso
Para construir el archivo de programa Java:
Asigne al archivo un nombre descriptivo.
El nombre de archivo debe ser el mismo que el nombre de la clase. En este ejemplo, el archivo y la clase se denominan ExecuteCLICommand.
Agregue el código al archivo y actualice las variables específicas del entorno, como la dirección IP del host remoto, el nombre de usuario, la contraseña y
<rpc-reply>
los elementos de etiqueta.El código Java completo para el programa ExecuteCLICommand.java se presenta aquí.
/*ExecuteCLICommand*/ import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.Device; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import org.xml.sax.SAXException; public class ExecuteCLICommand { public static void main(String args[]) throws NetconfException, ParserConfigurationException, SAXException, IOException { String cli = "show chassis hardware"; Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); try { String cli_reply = device.runCliCommand(cli); System.out.println(cli_reply); } catch (Exception e) { System.out.println("exception: " + e.getMessage()); // additional processing for exception } device.close(); } }
Compilar y ejecutar el programa Java
Procedimiento paso a paso
Necesita un compilador Java para compilar el código fuente y crear un programa ejecutable.
Para compilar el código y ejecutar el programa en el servidor de administración de configuración:
Compile el archivo ExecuteCLICommand.java .
> javac ExecuteCLICommand.java
Ejecute el programa ExecuteCLICommand .
> java ExecuteCLICommand
Verificación
Verificación de la ejecución del programa
Propósito
Compruebe que el programa ExecuteCLICommand se ejecuta correctamente.
Acción
Si el programa se ejecuta correctamente, establece una conexión y crea una sesión NETCONF con el dispositivo especificado. El programa convierte el comando show chassis hardware
de modo operativo de la CLI de Junos OS en un RPC y envía el RPC al servidor NETCONF. El servidor responde con la información operativa solicitada incluida en el elemento tag <rpc-reply>
El programa analiza la respuesta RPC e imprime el inventario de chasis resultante. La siguiente salida de ejemplo proviene de un enrutador m7i de Juniper Networks.
En un dispositivo que ejecute Junos OS versión 11.4 o posterior, el resultado está en texto con formato ASCII, que es idéntico al resultado de la CLI.
Hardware inventory: Item Version Part number Serial number Description Chassis 30010 M7I Midplane REV 03 710-008761 CB3874 M7i Midplane Power Supply 0 Rev 04 740-008537 PG10715 AC Power Supply Routing Engine REV 07 740-009459 1000445584 RE-5.0 CFEB REV 07 750-010464 CM4612 Internet Processor II FPC 0 E-FPC PIC 0 REV 06 750-002971 CB0032 4x OC-3 SONET, MM PIC 1 REV 02 750-002982 HS2878 1x Tunnel PIC 2 REV 08 750-005724 CL9084 2x OC-3 ATM-II IQ, MM PIC 3 REV 12 750-012838 DJ1107 4x 1GE(LAN), IQ2 Xcvr 0 REV 01 740-013111 7303405 SFP-T Xcvr 1 REV 01 740-013111 7303391 SFP-T Xcvr 2 REV 01 740-013111 7303350 SFP-T Xcvr 3 REV 01 740-013111 7303420 SFP-T FPC 1 E-FPC PIC 2 REV 07 750-009487 CL5745 ASP - Integrated (Layer-2-3) PIC 3 REV 07 750-009098 CB7256 2x F/E, 100 BASE-TX Fan Tray Rear Fan Tray
En un dispositivo que ejecuta Junos OS versión 11.3 o versiones anteriores, el resultado contiene elementos de etiqueta XML de Junos.
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/11.2R1/junos"> <chassis-inventory xmlns="http://xml.juniper.net/junos/11.2R1/junos-chassis"> <chassis junos:style="inventory"> <name>Chassis</name> <serial-number>30010</serial-number> <description>M7I</description> <chassis-module> <name>Midplane</name> <version>REV 03</version> <part-number>710-008761</part-number> <serial-number>CB3874</serial-number> <description>M7i Midplane</description> <model-number>CHAS-MP-M7i-1GE-S</model-number> </chassis-module> /* Output omitted for brevity */ </chassis> </chassis-inventory> </rpc-reply>
Ejemplo: Aplicación Java NETCONF para imprimir temperaturas de componentes
Este programa de kit de herramientas Java de NETCONF imprime el nombre y la temperatura correspondiente de los componentes en un dispositivo que ejecuta Junos OS.
Requisitos
Dispositivo de enrutamiento, conmutación o seguridad que ejecuta Junos OS.
El kit de herramientas Java de NETCONF está instalado en el servidor de administración de configuración.
La aplicación cliente puede iniciar sesión en el dispositivo donde reside el servidor NETCONF.
El servicio NETCONF a través de SSH está habilitado en el dispositivo donde reside el servidor NETCONF.
Visión general
En el ejemplo siguiente se ejecuta la RPC de la API get-environment-information
XML de Junos, que es el equivalente al show chassis environment
comando del modo operativo en un dispositivo que ejecuta Junos OS. El programa analiza la respuesta RPC y, para todos los componentes que enumeran una temperatura, el programa imprime el nombre del componente y la temperatura correspondiente.
El formato de respuesta RPC para la get-environment-information
solicitud RPC es:
<rpc-reply> <environment-information> <environment-item> <name>item-name</name> ... <temperature>temperature</temperature> </environment-item> <environment-item> <name>item-name2</name> ... <temperature>temperature</temperature> </environment-item> ... </environment-information> </rpc-reply>
Para analizar la respuesta, el programa utiliza el findNodes()
método para devolver una lista de org.w3c.dom.Node
objetos. Para cada <environment-item>
nodo, el programa obtiene una lista de nodos secundarios. Si hay un elemento de temperatura presente en la lista de nodos secundarios, el programa imprime el nombre y la temperatura de ese elemento de entorno.
Configuración
Creación del programa Java
Procedimiento paso a paso
Para construir el archivo de programa Java:
Asigne al archivo un nombre descriptivo.
El nombre de archivo debe ser el mismo que el nombre de la clase. En este ejemplo, el archivo y la clase se denominan ShowTemps.
Agregue el código al archivo y actualice las variables específicas del entorno, como la dirección IP del host remoto, el nombre de usuario, la contraseña y
<rpc-reply>
los elementos de etiqueta.El código Java completo para el programa ShowTemps.java se presenta aquí.
import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.CommitException; import net.juniper.netconf.Device; import net.juniper.netconf.LoadException; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import net.juniper.netconf.XMLBuilder; import org.xml.sax.SAXException; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class showTemps { public static void main(String[] args) throws LoadException, IOException, NetconfException, ParserConfigurationException, SAXException { String name="", temp=""; //Create the device Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); //Call executeRPC(String rpc) to send RPC and receive RPC reply XML rpc_reply = device.executeRPC("get-environment-information"); // Parse reply and only print items that have a temperature element List<String> list = Arrays.asList("environment-information","environment-item"); List itemlist = rpc_reply.findNodes(list); Iterator iter = itemlist.iterator(); while (iter.hasNext()) { Node item_node = (Node) iter.next(); NodeList child_nodes = item_node.getChildNodes(); // child_nodes contains nodes like <name> and <temperature> for (int i = 0; i < child_nodes.getLength(); i++) { Node child = child_nodes.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) { if (child.getNodeName().equals("name")) // Capture the text value in <name> node name = child.getTextContent(); if (child.getNodeName().equals("temperature")) { // Capture the text value in <temperature> node temp = child.getTextContent(); System.out.println(name + ": " + temp); } } } } device.close(); } }
Compilar y ejecutar el programa Java
Procedimiento paso a paso
Necesita un compilador Java para compilar el código fuente y crear un programa ejecutable.
Para compilar el código y ejecutar el programa en el servidor de administración de configuración:
Compile el archivo ShowTemps.java .
> javac ShowTemps.java
Ejecute el programa ShowTemps .
> java ShowTemps
Verificación
Verificación de los resultados
Propósito
Compruebe que el programa ShowTemps se ejecuta correctamente.
Acción
Si el programa se ejecuta correctamente, establece una conexión y crea una sesión NETCONF con el dispositivo especificado. A continuación, el programa ejecuta la RPC de la API get-environment-information
XML de Junos, analiza la respuesta RPC e imprime todos los elementos del <temperature>
entorno que contienen un nodo secundario.
La siguiente salida de ejemplo proviene de un enrutador m7i de Juniper Networks:
Intake: 25 degrees C / 77 degrees F FPC 0: 26 degrees C / 78 degrees F Power Supplies: 28 degrees C / 82 degrees F CFEB Intake: 22 degrees C / 71 degrees F CFEB Exhaust: 30 degrees C / 86 degrees F Routing Engine: 28 degrees C / 82 degrees F Routing Engine CPU: 28 degrees C / 82 degrees F