NETCONF Java 툴킷을 사용하여 운영 작업 수행
디바이스 객체 메서드를 사용하여 RPC 및 운영 명령 실행
NETCONF Java 툴킷 Device
객체에는 원격 디바이스에서 정보를 요청하고 운영 작업을 수행하는 메서드가 있습니다. 적절한 경우 메서드는 다양한 형식을 사용하도록 오버로드됩니다.
RPC 실행
RPC(원격 프로시저 호출)를 실행하려면 개체에서 Device
메서드를 호출합니다executeRPC()
. 메서드는 executeRPC()
개체, net.juniper.netconf.XML
개체 또는 org.w3c.dom.Document
개체를 인수로 받아들이 String
도록 오버로드됩니다. 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를 실행합니다. RPC는 get-chassis-inventory
Junos OS 명령줄 인터페이스(CLI)의 운영 모드 명령과 동일합니다 show chassis hardware
.
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();
운영 모드 명령 실행
운영 모드 명령을 실행하여 Junos OS를 실행하는 디바이스에서 정보를 요청하거나 운영 작업을 수행하려면 객체에서 Device
메서드를 호출 runCliCommand()
하십시오. 이 runCliCommand()
방법은 Junos OS 운영 모드 명령을 원격 디바이스의 NETCONF 서버로 보냅니다. 인수는 Junos OS CLI에 입력하는 운영 모드 명령을 나타내는 문자열입니다. RPC는 RPC 응답을 반환하는 NETCONF 서버에 의해 처리됩니다. Junos OS 릴리스 11.4부터 반환 문자열은 Junos OS CLI에서 볼 수 있는 것과 동일한 ASCII 형식의 출력입니다. 이전 버전의 Junos OS를 실행하는 디바이스의 경우 반환 문자열에 Junos XML 태그 요소가 포함됩니다.
메서드 구문은 다음과 같습니다.
public String runCLICommand (String command)
다음 코드 조각은 CLI 운영 모드 명령을 show chassis hardware
Junos OS를 실행하는 디바이스의 NETCONF 서버로 보냅니다.
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();
예: 운영 요청 RPC 실행을 위한 NETCONF Java 애플리케이션
이 NETCONF Java 툴킷 프로그램은 RPC를 실행하여 디바이스에서 운영 정보를 얻은 다음 표준 출력으로 인쇄합니다. 이 예제는 기본 NETCONF Java 툴킷 프로그램을 생성하고 실행하기 위한 지침 예제로 사용됩니다.
요구 사항
NETCONF Java 툴킷은 구성 관리 서버에 설치됩니다.
클라이언트 애플리케이션은 NETCONF 서버가 상주하는 디바이스에 로그인할 수 있습니다.
SSH를 통한 NETCONF 서비스는 NETCONF 서버가 상주하는 디바이스에서 활성화됩니다.
개요
NETCONF Java 툴킷을 사용하여 원격 디바이스에서 운영 정보를 요청할 수 있습니다. 다음 예제에서는 Junos OS를 실행하는 디바이스에서 Junos XML API의 운영 요청을 실행하기 위해 NETCONF Java 툴킷 프로그램을 생성하는 방법을 보여줍니다. 이 예제에서는 코드를 컴파일하고, 프로그램을 실행하고, 결과를 확인하는 방법도 설명합니다.
구성
Java 프로그램 만들기
단계별 절차
운영 요청에 대한 코드가 포함된 Java 프로그램 파일을 구성하려면 다음을 수행하십시오.
파일에 설명이 포함된 이름을 지정합니다.
파일 이름은 클래스 이름과 동일해야 합니다. 이 예제에서 파일 및 클래스의 이름은 GetChassisInventory입니다.
적절한 import 문과 클래스 선언 및 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 작업에 해당하는 사용 가능한 방법의 전체 목록은 NETCONF Java 툴킷 Javadocs를 참조하십시오.executeRPC()
운영 요청 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)
SSH를 통한 NETCONF는 NETCONF 서버가 상주하는 디바이스에서 활성화되지 않거나 다른 포트에서 활성화될 수 있습니다.
용액
NETCONF 서버가 상주하는 디바이스에서 SSH를 통한 NETCONF를 활성화했는지 확인합니다. 예제 프로그램이 인수에 Device
특정 포트 번호를 지정하지 않기 때문에 NETCONF 세션은 기본 NETCONF-over-SSH 포트 830에 설정됩니다. Junos OS를 실행하는 디바이스의 기본 포트에서 NETCONF over SSH가 활성화되어 있는지 확인하려면 원격 디바이스에서 다음 운영 모드 명령을 입력합니다.
user@host> show configuration system services ftp; netconf { ssh; }
구성 계층이 netconf
없는 경우 구성 모드에서 다음 문을 발행하여 기본 포트에서 SSH를 통한 NETCONF를 활성화합니다.
[edit] user@host# set system services netconf ssh user@host# commit
구성 계층이 netconf
기본 포트 이외의 포트를 지정하는 경우, 개체 생성자 인수에 Device
새 포트 번호를 포함합니다. 예를 들어, 다음 디바이스는 포트 12345에서 SSH를 통한 NETCONF용으로 구성됩니다.
user@host> show configuration system services netconf { ssh { port 12345; } }
연결 문제를 해결하려면 인수에 Device
새 포트 번호를 포함합니다.
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 12345);
예: CLI 명령 실행을 위한 NETCONF Java 애플리케이션
이 NETCONF Java 툴킷 프로그램은 지정된 Junos OS 운영 모드 명령을 NETCONF 서버로 전송하여 Junos OS를 실행하는 디바이스에서 정보를 요청하거나 운영 작업을 수행하는 방법을 보여줍니다 runCLICommand()
.
요구 사항
Junos OS를 실행하는 라우팅, 스위칭 또는 보안 디바이스.
NETCONF Java 툴킷은 구성 관리 서버에 설치됩니다.
클라이언트 애플리케이션은 NETCONF 서버가 상주하는 디바이스에 로그인할 수 있습니다.
SSH를 통한 NETCONF 서비스는 NETCONF 서버가 상주하는 디바이스에서 활성화됩니다.
개요
NETCONF Java 툴킷 Device
클래스에는 Junos OS CLI 운영 모드 명령을 받아 NETCONF 서버에서 처리할 수 있는 XML의 동등한 RPC로 변환하는 메서드가 포함되어 runCliCommand()
있습니다. 이 runCLICommand()
메서드는 Junos OS CLI에 입력하는 운영 모드 명령을 나타내는 문자열을 인수로 사용합니다.
다음 예제에서는 Junos OS를 실행하는 디바이스에서 명령을 실행합니다 show chassis hardware
. 메서드의 반환 값은 문자열입니다. Junos OS 릴리스 11.4부터 반환 문자열은 Junos OS CLI에서 볼 수 있는 것과 동일한 ASCII 형식의 출력입니다. 이전 버전의 Junos OS를 실행하는 디바이스의 경우 반환 문자열에 Junos XML 태그 요소가 포함됩니다.
구성
Java 프로그램 작성
단계별 절차
Java 프로그램 파일을 구성하려면 다음을 수행합니다.
파일에 설명이 포함된 이름을 지정합니다.
파일 이름은 클래스 이름과 동일해야 합니다. 이 예제에서 파일 및 클래스의 이름은 ExecuteCLICommand입니다.
파일에 코드를 추가하고 원격 호스트 IP 주소, 사용자 이름, 암호 및
<rpc-reply>
태그 요소와 같은 환경별 변수를 업데이트합니다.ExecuteCLICommand.java 프로그램에 대한 전체 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 컴파일러가 필요합니다.
구성 관리 서버에서 코드를 컴파일하고 프로그램을 실행하려면 다음을 수행합니다.
ExecuteCLICommand.java 파일을 컴파일합니다.
> javac ExecuteCLICommand.java
ExecuteCLICommand 프로그램을 실행합니다.
> java ExecuteCLICommand
확인
프로그램 실행 확인
목적
ExecuteCLICommand 프로그램이 올바르게 실행되는지 확인합니다.
행동
프로그램이 성공적으로 실행되면 연결을 설정하고 지정된 디바이스와 NETCONF 세션을 생성합니다. 이 프로그램은 Junos OS CLI 운영 모드 명령을 show chassis hardware
RPC로 변환하고 RPC를 NETCONF 서버로 보냅니다. 서버는 태그 요소에 포함된 <rpc-reply>
요청된 운영 정보로 응답합니다. 프로그램은 RPC 응답을 구문 분석하고 결과 섀시 인벤토리를 인쇄합니다. 다음 샘플 출력은 주니퍼 네트웍스 m7i 라우터에서 가져온 것입니다.
Junos OS 릴리스 11.4 이상 릴리스를 실행하는 디바이스에서 출력은 CLI의 출력과 동일한 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 툴킷 프로그램은 Junos OS를 실행하는 디바이스에 있는 구성 요소의 이름과 해당 온도를 인쇄합니다.
요구 사항
Junos OS를 실행하는 라우팅, 스위칭 또는 보안 디바이스.
NETCONF Java 툴킷은 구성 관리 서버에 설치됩니다.
클라이언트 애플리케이션은 NETCONF 서버가 상주하는 디바이스에 로그인할 수 있습니다.
SSH를 통한 NETCONF 서비스는 NETCONF 서버가 상주하는 디바이스에서 활성화됩니다.
개요
다음 예제에서는 Junos OS를 실행하는 디바이스에서 운영 모드 명령과 show chassis environment
동일한 Junos XML API get-environment-information
RPC를 실행합니다. 프로그램은 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>
태그 요소와 같은 환경별 변수를 업데이트합니다.ShowTemps.java 프로그램에 대한 전체 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>
포함하는 모든 환경 항목을 인쇄합니다.
다음 샘플 출력은 주니퍼 네트웍스 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