NETCONF Java Toolkit を使用した運用タスクの実行
デバイス オブジェクトのメソッドを使用した RPC と動作コマンドの実行
NETCONF Java ツールキット オブジェクトには、リモート デバイスから情報を要求し、リモート デバイスで運用 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 を実行します。 get-chassis-inventory
RPC は、プロトコル(プロトコル)の動作モード コマンドJunos OS コマンドライン インターフェイス show chassis hardware
しますCLI。
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で動作タスクを実行するには、このメソッド runCliCommand()
をオブジェクトに呼び出 Device
します。この runCliCommand()
方法では、リモート デバイスJunos OS NETCONF サーバーに、リモート モード コマンドを送信します。引数は、フィールドに入力する動作モード コマンドを表す文字列Junos OS CLI。RPC は NETCONF サーバーによって処理され、このサーバーから RPC 応答が返されます。Junos OS リリース 11.4 で始まる戻り文字列は、次の表に示す ASCII 形式の出力Junos OS CLI。以前のバージョンのインスタンスを実行しているJunos OS、戻り文字列には XML タグ要素Junos含まれています。
この手法の構文は次のとおりです。
public String runCLICommand (String command)
次のコード スニペットは、CLIを実行しているデバイスの NETCONF サーバーに、CLI operational mode コマンド show chassis hardware
を送信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();
例: 運用リクエスト RPC を実行する NETCONF Java アプリケーション
この NETCONF Java ツールキット プログラムは RPC を実行してデバイスから動作情報を取得し、そこから標準出力に印刷されます。この例は、基本的なNETCONF Javaツールキットプログラムを作成および実行するための手順の例として機能します。
要件
NETCONF Java ツールキットが設定管理サーバーにインストールされます。
クライアント アプリケーションは、NETCONF サーバーが存在するデバイスにログインできます。
SSH 上の NETCONF サービスは、NETCONF サーバーが存在するデバイスで有効になっています。
概要
NETCONF Java ツールキットを使用して、リモート デバイスから運用情報を要求できます。次の例は、NETCONF Java ツールキット プログラムを作成して、仮想マシンで実行しているデバイス上で 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 の運用に対応する使用可能な方法の完全なリストについては、 NETCONF Java ツールキット Javadocs を参照してください。動作要求
executeRPC()
RPC コマンドを使用してこのメソッドを引数として呼び出します。この例では、XML API RPC Junosを使用
get-chassis-inventory
します。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 を NETCONF サーバーに送信し、サーバーはタグ要素内で囲まれた要求された運用情報 get-chassis-inventory
で <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サーバーが存在するデバイスでNETCONF over SSHが有効になっていない、または別のポートで有効になっている可能性があります。
ソリューション
NETCONF サーバーが存在するデバイスで、SSH 上で NETCONF over SSH が有効になっているか確認します。例プログラムでは引数に特定のポート番号が指定されていないので、NETCONF セッションはデフォルトの Device
NETCONF-over-SSH ポート 830 で確立されます。Junos OSを実行しているデバイスのデフォルト ポートでNETCONF over SSHが有効になっているかどうかを確認するには、リモート デバイスで次の動作モード コマンドを入力します。
user@host> show configuration system services ftp; netconf { ssh; }
設定階層が気に入る場合は、設定モードで次のステートメントを発行し、デフォルト ポートで SSH 上で netconf
NETCONF over SSH を有効にします。
[edit] user@host# set system services netconf ssh user@host# commit
設定階層でデフォルト ポート以外のポートが指定されている場合は、オブジェクト コンストラクタの引数に新しいポート netconf
Device
番号を含める必要があります。たとえば、ポート12345でNETCONF over SSHに対して以下のデバイスが設定されています。
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 Application for executing CLI コマンド
この NETCONF Java ツールキット プログラムは、指定された Junos OS 動作モード コマンドを NETCONF サーバーに送信して、仮想ネットワークで実行しているデバイスから情報を要求したり、操作タスクを実行する方法をデモンストレーションJunos OS。 runCLICommand()
要件
ルーティング、スイッチング、セキュリティのデバイスで動作Junos OS。
NETCONF Java ツールキットが設定管理サーバーにインストールされます。
クライアント アプリケーションは、NETCONF サーバーが存在するデバイスにログインできます。
SSH 上の NETCONF サービスは、NETCONF サーバーが存在するデバイスで有効になっています。
概要
NETCONF Java ツールキット クラスには、Junos OS CLI 動作モード コマンドを使用して Device
、NETCONF サーバーが処理できる XML 内の同等の RPC に変換する方法が runCliCommand()
含まれています。この runCLICommand()
メソッドは、メソッドに入力した動作モード コマンドを表す文字列としてJunos OS CLI。
次の例では、デバイスで実行 show chassis hardware
されているデバイスで コマンドを実行Junos OS。メソッドの戻り値は文字列です。Junos OS リリース 11.4 で始まる戻り文字列は、次の表に示す ASCII 形式の出力Junos OS CLI。以前のバージョンのインスタンスを実行しているJunos OS、戻り文字列には XML タグ要素Junos含まれています。
構成
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 モード コマンドを RPC に変換し、RPC を show chassis hardware
NETCONF サーバーに送信します。サーバーは、タグ要素に囲まれた要求された動作情報で応答します。 プログラムは RPC 応答を解析し、結果のシャーシ インベントリ <rpc-reply>
を印刷します。次のサンプル出力は m7i ジュニパーネットワークス出力です。
Junos OSリリース11.4以降を実行しているデバイスでは、出力はASCII形式のテキストで示され、これは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
リリース11.3 Junos OSを実行しているデバイスでは、出力には XML 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>
例:コンポーネント温度印刷用NETCONF Javaアプリケーション
この NETCONF Java ツールキット プログラムは、デバイスで動作しているデバイスにコンポーネントの名前と対応する温度Junos OS。
要件
ルーティング、スイッチング、セキュリティのデバイスで動作Junos OS。
NETCONF Java ツールキットが設定管理サーバーにインストールされます。
クライアント アプリケーションは、NETCONF サーバーが存在するデバイスにログインできます。
SSH 上の NETCONF サービスは、NETCONF サーバーが存在するデバイスで有効になっています。
概要
次の例では、XML API RPC Junosを実行します。これは、デバイスで実行されている動作モード コマンドに相当 get-environment-information
show chassis environment
Junos OS。プログラムが RPC 応答を解析し、温度を示すすべてのコンポーネントに対して、プログラムはコンポーネント名と対応する温度を印刷します。
RPC リクエストの RPC 返信形式 get-environment-information
は次の形式です。
<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 セッションが作成されます。次に、このプログラムは XML API RPC Junosを実行し、RPC 応答を解析し、子ノードを含むすべての環境項目 get-environment-information
を印刷します <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