НА ЭТОЙ СТРАНИЦЕ
Использование инструментария Java NETCONF для выполнения рабочих задач
Использование методов объекта устройства для выполнения RPC и рабочих команд
Объект NETCONF Java toolkit имеет Device
способы запрашивать информацию у удаленных устройств и выполнять эксплуатационные задачи. При необходимости эти методы перегружаются и используются в различных форматах.
Выполнение RPC
Чтобы выполнить удаленный вызов процедуры (RPC), выполните вызов executeRPC()
метода на объекте Device
. Этот executeRPC()
метод перегружен тем, что принимает String
объект, объект net.juniper.netconf.XML
или объект org.w3c.dom.Document
в качестве аргумента. RPC обрабатывается сервером NETCONF, который возвращает ответ RPC в качестве объекта XML.
Синтаксис метода:
public XML executeRPC (String rpcContent) public XML executeRPC (net.juniper.netconf.XML rpc) public XML executeRPC (org.w3c.dom.Document rpcDoc)
Следующий фрагмент кода выполняет строку Junos XML API get-chassis-inventory
RPC с помощью аргумента string. RPC get-chassis-inventory
эквивалентен команде show chassis hardware
operational mode в команде 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();
Выполнение команд режима эксплуатации
Чтобы выполнить команду operational mode для запроса информации у или выполнения эксплуатационных задач на устройстве, Junos OS, runCliCommand()
выполните вызов метода на объекте Device
. Метод runCliCommand()
посылает команду Junos OS operational mode на сервер NETCONF на удаленном устройстве. Аргумент представляет собой строку, относящуюся к команде operational mode, которую необходимо ввести в Junos OS интерфейс командной строки. RPC обрабатывается сервером NETCONF, который возвращает ответ RPC. Начиная с Junos OS 11.4, возвращаемая строка является тем же отформатированным выводом ASCII, что и в Junos OS интерфейс командной строки. Для устройств, работающих с более ранними версиями Junos OS, строка возврата содержит Junos метки XML.
Синтаксис метода:
public String runCLICommand (String command)
Следующий фрагмент кода посылает команду интерфейс командной строки operational mode show chassis hardware
на сервер NETCONF на устройстве, на 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();
Пример: Приложение NETCONF Java для выполнения запроса эксплуатации RPC
Эта программа netCONF Java toolkit выполняет RPC для получения операционной информации с устройства, которая затем печатается в стандартном выводе. Этот пример служит учебным примером для создания и выполнения базовой программы NETCONF Java toolkit.
Требования
Инструментарий Java NETCONF установлен на сервер управления конфигурацией.
Клиентские приложения могут входить на устройство, где находится сервер NETCONF.
Служба NETCONF по SSH активна на устройстве, на котором расположен сервер NETCONF.
Обзор
Можно использовать инструментарий NETCONF Java для запроса операционной информации с удаленного устройства. В следующем примере показано, как создать программу NETCONF Java toolkit для выполнения операционного запроса от Junos XML API на устройстве под управлением Junos OS. В примере также объясняется, как составить код, запустить программу и проверить результаты.
Конфигурации
Создание Java-программы
Пошаговая процедура
Чтобы создать файл программы Java, который содержит код для оперативного запроса:
Дайте файлу описательное имя.
Имя файла должно быть такое же, как и имя класса. В данном примере файл и класс названы GetChassisInventory.
Включим соответствующие утверждения импорта и код для классовой классификации и метода 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 { } }
В
main()
пределах создайте объектDevice
и вызовите методconnect()
.Это создает сеанс NETCONF по умолчанию по SSHv2 с сервером NETCONF. Код необходимо обновить с помощью соответствующих аргументов для подключения и аутентификации на конкретном устройстве.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); device.connect();
После того, как
Device
был создан объект, можно выполнить операции NETCONF на устройстве. Полный список доступных методов, соответствующих операциям NETCONF, можно найти в документе Javadocs NETCONF Java.В качестве
executeRPC()
аргумента вызовите метод с помощью команды operational request RPC.В данном примере используется Junos XML API
get-chassis-inventory
RPC. Ответ, возвращенный в XML, хранится в переменнойrpc_reply
.XML rpc_reply = device.executeRPC(“get-chassis-inventory”);
Добавьте код для принятия действий в ответе RPC.
Следующий код преобразует ответ NETCONF-сервера в строку и распечатает его на экране:
System.out.println(rpc_reply.toString());
Закрой ресурсы устройства и выпуска, называя
close()
метод на объекте устройства.device.close();
Результаты
Полная программа:
/*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(); } }
Компилятор и запуск Java-программы
Пошаговая процедура
Компилятор Java необходим для компиляции исходных кодов и создания исполняемой программы.
Чтобы составить код и запустить программу на сервере управления конфигурацией:
Компиляцию файла GetChassisInventory.java .
> javac GetChassisInventory.java
Выполните программу GetChassisInventory .
> java GetChassisInventory
Проверки
Проверка выполнения программы
Цель
Убедитесь, что программа GetChassisInventory работает правильно.
Действий
Если программа успешно выполняется, она устанавливает соединение и создает сеанс NETCONF с указанным устройством. Программа отправляет RPC get-chassis-inventory
на сервер NETCONF, а сервер отвечает запрашиваемой операционной информацией, заключенной в элемент <rpc-reply>
тега. Программа печатает ответ на стандарт. Ниже приводится пример ответа RPC с некоторыми выводами, пропущенными для краткости.
<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>
Устранение неполадок
Устранение неполадок, исключений NETCONF
Проблема
Имеет место исключение NETCONF, и вы видите следующее сообщение об ошибках:
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)
NETCONF по SSH может не быть включено на устройстве, на котором находится сервер NETCONF, или он может быть включен на другом порту.
Решение
Убедитесь, что NETCONF включена через SSH на устройстве, на котором расположен сервер NETCONF. Поскольку в примере программы не Device
указан конкретный номер порта в аргументах, сеанс NETCONF установлен на порту NETCONF-over-SSH по умолчанию, 830. Чтобы проверить, включена ли netCONF по SSH на порту по умолчанию для устройства, на Junos OS на удаленном устройстве, введите на удаленном устройстве следующую команду operational mode:
user@host> show configuration system services ftp; netconf { ssh; }
Если иерархия netconf
конфигурации отсутствует, в режиме конфигурации необходимо использовать следующие утверждения, чтобы включить NETCONF через SSH на порту по умолчанию:
[edit] user@host# set system services netconf ssh user@host# commit
Если иерархия netconf
конфигурации указывает не порт по умолчанию, Device
включите новый номер порта в аргументы конструктора объекта. Например, для NETCONF по SSH на порту 12345 настроено следующее устройство:
user@host> show configuration system services netconf { ssh { port 12345; } }
Чтобы исправить проблему подключения, включим в аргументы новый номер Device
порта.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);
Пример: Приложение NETCONF Java для выполнения интерфейс командной строки команд
Эта программа NETCONF Java toolkit runCLICommand()
демонстрирует метод, который посылает на сервер NETCONF указанную команду Junos OS operational mode для запроса информации у устройства, на котором выполняется Junos OS.
Требования
Маршруты, коммутаторы или устройство обеспечения безопасности работают Junos OS.
Инструментарий Java NETCONF установлен на сервер управления конфигурацией.
Клиентские приложения могут входить на устройство, где находится сервер NETCONF.
Служба NETCONF по SSH активна на устройстве, на котором расположен сервер NETCONF.
Обзор
Класс инструментария Java NETCONF Device
runCliCommand()
содержит метод, который используется Junos OS интерфейс командной строки рабочего режима и преобразует его в эквивалент RPC в XML, который может обрабатываться сервером NETCONF. Этот runCLICommand()
метод принимает в качестве аргумента строку, представляющую команду operational mode, введенную Junos OS интерфейс командной строки.
В следующем примере выполняется show chassis hardware
команда на устройстве, на Junos OS. Возвратным значением для этого метода является строка. Начиная с Junos OS 11.4, возвращаемая строка является тем же отформатированным выводом ASCII, что и в Junos OS интерфейс командной строки. Для устройств, работающих с более ранними версиями Junos OS, строка возврата содержит Junos метки XML.
Конфигурации
Создание Java-программы
Пошаговая процедура
Для создания файла программы Java:
Дайте файлу описательное имя.
Имя файла должно быть такое же, как и имя класса. В данном примере файл и класс названы ExecuteCLICommand.
Добавьте в файл код и обновите переменные, специфические для среды, такие как IP-адрес удаленного хоста, имя пользователя, пароль и элементы
<rpc-reply>
тега.Здесь представлен полный код Java для программы ExecuteCLI.java .
/*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(); } }
Компилятор и запуск Java-программы
Пошаговая процедура
Компилятор Java необходим для компиляции исходных кодов и создания исполняемой программы.
Чтобы составить код и запустить программу на сервере управления конфигурацией:
Компиляцию файла ExecuteCLI.java .
> javac ExecuteCLICommand.java
Выполните программу ExecuteCLI.
> java ExecuteCLICommand
Проверки
Проверка выполнения программы
Цель
Убедитесь, что программа ExecuteCLI Работает правильно.
Действий
Если программа успешно выполняется, она устанавливает соединение и создает сеанс NETCONF с указанным устройством. Программа преобразует команду Junos OS интерфейс командной строки operational show chassis hardware
mode в RPC и отправляет RPC на сервер NETCONF. Сервер отвечает запрашиваемой <rpc-reply>
операционной информацией, заключенной в элемент тега Программа проализирует ответ RPC и печатает итоговую инвентаризацию шасси. Следующий пример выходных данных взят на Juniper Networks m7i.
На устройстве, Junos OS выпуске 11.4 или более поздней версии, выходные данные в формате ASCII совпадают с выходными данными в интерфейс командной строки.
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
На устройстве, Junos OS выпуске 11.3 или более ранней версии, выходные данные содержат Junos элементов тега XML.
<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>
Пример: Приложение NETCONF Java для печати температур компонентов
Программа netCONF Java toolkit печатает имя и соответствующую температуру компонентов на устройстве, на Junos OS.
Требования
Маршруты, коммутаторы или устройство обеспечения безопасности запущены Junos OS.
Инструментарий Java NETCONF установлен на сервер управления конфигурацией.
Клиентские приложения могут входить на устройство, где находится сервер NETCONF.
Служба NETCONF по SSH активна на устройстве, на котором расположен сервер NETCONF.
Обзор
В следующем примере выполняется Junos XML API get-environment-information
RPC, show chassis environment
что эквивалентно команде operational mode на устройстве, на котором работает Junos OS. Программа проаансирует ответ RPC, и для всех компонентов, перечисляющих температуру, программа печатает имя компонента и соответствующую температуру.
Формат ответа RPC для запроса get-environment-information
RPC:
<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>
Чтобы продиабировать ответ, программа использует метод findNodes()
для возврата списка объектов org.w3c.dom.Node
. Для каждого <environment-item>
узла программа получает список "детей". Если элемент температуры присутствует в списке "детиных" узлов, программа печатает имя и температуру этого элемента окружения.
Конфигурации
Создание Java-программы
Пошаговая процедура
Для создания файла программы Java:
Дайте файлу описательное имя.
Имя файла должно быть такое же, как и имя класса. В данном примере файл и класс названы ShowTemps.
Добавьте в файл код и обновите переменные, специфические для среды, такие как IP-адрес удаленного хоста, имя пользователя, пароль и элементы
<rpc-reply>
тега.Здесь представлен полный код Java для программы ShowTemps.java .
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(); } }
Компилятор и запуск Java-программы
Пошаговая процедура
Компилятор Java необходим для компиляции исходных кодов и создания исполняемой программы.
Чтобы составить код и запустить программу на сервере управления конфигурацией:
Компилятор файла ShowTemps.java .
> javac ShowTemps.java
Выполните программу ShowTemps .
> java ShowTemps
Проверки
Проверка результатов
Цель
Убедитесь, что программа ShowTemps работает правильно.
Действий
Если программа успешно выполняется, она устанавливает соединение и создает сеанс NETCONF с указанным устройством. Затем программа выполняет Junos XML API get-environment-information
RPC, выполняет синтаксный просмотр ответа RPC и распечатает все элементы среды, содержащие "детский" узел <temperature>
.
Следующий пример выходных данных от маршрутизатора Juniper Networks m7i:
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