NETCONF Java Toolkit を使用して構成タスクを実行する
デバイス オブジェクトの方法を使用して設定変更をロードする
NETCONF Java ツールキット Device ・オブジェクトには、リモート・デバイスを構成するための方法があります。必要に応じて、メソッドはさまざまな形式を取得するためにオーバーロードされます。
リモートデバイス上の設定データを読み込むには、 Device Junos OS設定モードコマンド、フォーマットされたASCIIテキスト、またはJunos XMLタグ要素のセットとして設定データを定義できるいくつかの方法があります。設定データをプログラムコードに供給することも、必要な設定変更を含むデータファイルを参照することもできます。
候補構成のプライベートコピーを設定するには、設定変更を openConfiguration("private") 読み込む前に、デバイスオブジェクトの文字列引数「private」でメソッドを呼び出します。これは、Junos OS CLI の configure private コマンドと同じです。メソッドの呼び出しを openConfiguration("private") 省略した場合、設定変更は候補コンフィギュレーションのグローバルコピーに読み込まれます。
設定データの読み込みに使用される方法は、データのソースと形式によって異なります。以下の方法では、string 引数 loadType の merge 値は または replaceで、設定モード コマンド load merge または load replace Junos OS を実行するデバイスで同等のコマンドを実行します。
Junos OS 設定モード コマンド — 以下の方法は、設定データを Junos OS 設定モード コマンドのセットとして読み込みます。これらの方法は、Junos OSリリース11.4以降のリリースを実行するデバイスでのみサポートされています。Junos OSは、設定命令を一行ずつ実行します。各要素に対して、 コマンドで完全なステートメントパスを指定することも、 などの
editナビゲーションコマンドを使用して、CLI設定モードと同様に設定階層を移動することもできます。loadSetConfiguration(String setCommands)- メソッド引数またはメソッドに渡される変数として、プログラム・コード内の構成データを指定します。loadSetFile(String filePath)で指定されたファイルから設定データを filePath読み込みます。
書式設定されたASCIIテキスト — 次の方法は、設定データをフォーマットされたASCIIテキストとして読み込みます。標準の Junos OS CLI 表記(改行文字、タブ、スペース、中括弧、角括弧)を使用して、設定ステートメント間の階層関係を示します。
loadTextConfiguration(String textConfiguration, String loadType)- メソッド引数またはメソッドに渡される変数として、プログラム・コード内の構成データを指定します。loadTextFile(String filePath, String loadType)で指定されたファイルから設定データを filePath読み込みます。
Junos XML タグ要素 — 以下の方法は、構成データを Junos XML タグ要素として読み込みます。ルート、タグ要素、新しい要素または変更された要素ごとに、構成階層のすべてのレベルを
<configuration>表すタグ要素を含めます。loadXMLConfiguration(String XMLConfiguration, String loadType)—プログラム・コード内のコンフィギュレーション・データをnet.juniper.netconf.XMLオブジェクトとして指定し、メソッドに渡します。loadXMLFile(String filePath, String loadType)で指定されたファイルから設定データを filePath読み込みます。
次のコードスニペットは、 ステートメントを ftp 階層レベルの候補構成に [edit system services] マージします。各タイプのロード・コンフィギュレーション・メソッドの Java ステートメントが表示されます。ファイルから読み込む場合、ファイルには目的の形式で適切な階層が含まれている必要があります。
/*
r1-config-set.txt:
set system services ftp
r1-config-text.txt:
system {
services {
ftp;
}
}
r1-config-xml.txt:
<system>
<services>
<ftp/>
</services>
</system>
*/
String config_file_set = "configs/r1-config-set.txt"
String config_file_text = "configs/r1-config-text.txt"
String config_file_xml = "configs/r1-config-xml.txt"
XMLBuilder builder = new XMLBuilder();
XML ftp_config = builder.createNewConfig("system", "services", "ftp");
Device device = new Device("10.10.1.1","admin","PaSsWoRd",null);
device.connect();
//open a private copy of the candidate configuration
device.openConfiguration("private");
// load configuration data as Junos OS configuration mode commands
device.loadSetConfiguration("set system services ftp");
device.loadSetFile(config_file_set);
// load configuration data as formatted ASCII text
device.loadTextConfiguration("system { services { ftp; } }", "merge");
device.loadTextFile(config_file_text, "merge");
// load configuration data as Junos XML tag elements
device.loadXMLConfiguration(ftp_config.toString(), "merge");
device.loadXMLFile(config_file_xml, "merge");
device.commit();
device.close();
例:構成の読み込みとコミットのための NETCONF Java アプリケーション
次の NETCONF Java ツールキット プログラムの例では、構成階層を構築し、その後、指定されたデバイス上の候補構成とマージします。その後、結果の設定がコミットされます。設定階層の例は、Junos OS を実行するデバイスを対象としています。
要件
Junos OS を実行するルーティング、スイッチング、またはセキュリティ デバイス。
NETCONF Java ツールキットが構成管理サーバーにインストールされています。
クライアント アプリケーションは、NETCONF サーバーが存在するデバイスにログインできます。
NETCONFサーバーが存在するデバイスでは、SSH経由のNETCONFサービスが有効になっています。
概要
次の例では、 load merge Junos OS を実行しているデバイスで候補の設定を更新する操作を実行し、新しい設定をコミットします。設定に追加される XML 階層は、オブジェクトで XMLBuilder 構築され、 変数に ftp_config 格納されます。または、Junos OS リリース 11.4 以降のリリースを実行するデバイスの設定データを、Junos OS 設定モード コマンドのセットとしてテキストおよび として読み込むことができます。
デバイスでFTPサービスを有効にする新しい設定階層は次のとおりです。
<configuration>
<system>
<services>
<ftp/>
</services>
</system>
</configuration>
プログラム コードは、新しい Device オブジェクトを作成し、メソッドを connect() 呼び出します。これにより、SSHv2 接続と、NETCONF サーバーが実行されるデバイスとのデフォルト NETCONF セッションが確立されます。
候補の設定を同時に編集できる他のユーザーとの競合を防ぐために、コードはデバイス オブジェクトでメソッドを lockConfig() 呼び出して設定をロックします。ロックが失敗した場合、メソッドはエラー メッセージを生成し、プログラムを終了します。ロックが成功した場合、メソッドは loadXMLConfiguration(ftp_config.toString(), "merge") 、 オプションを使用して新しいコンフィギュレーション階層を候補コンフィギュレーションに merge 読み込みます。構成階層は最初は XML として構築されていますが、メソッドの引数として渡す前に、その階層を文字列に変換する loadXMLConfiguration() 必要があることに注意してください。
新しいコンフィギュレーション階層が候補コンフィギュレーションとマージされると、プログラムはコンフィギュレーションのコミットを試みます。コミット操作が失敗した場合、プログラムは関連するエラーメッセージを印刷します。その後、プログラムは設定のロックを解除し、NETCONF セッションとデバイス接続を閉じます。
候補コンフィギュレーションに設定階層とステートメントを merge 読み込む場合の および replace オプションの詳細については、 CLIユーザーガイドを参照してください。
構成
Java プログラムの作成
手順
構成変更および要求のコードを含む Java プログラム・ファイルを作成するには、以下を行います。
ファイルにわかりやすい名前を付けます。
ファイル名はクラス名と同じでなければなりません。この例では、ファイルとクラスの名前は EditConfig です。
コードをファイルに追加し、リモート ホストの IP アドレス、ユーザー名、パスワードなどの環境固有の変数を更新します。
EditConfig プログラムの完全な Java コードがここに示されています。
import java.io.IOException; 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; public class EditConfig { public static void main(String[] args) throws LoadException, IOException, NetconfException, ParserConfigurationException, SAXException { /*Build the following XML hierarchy to add to the configuration: * <configuration> * <system> * <services> * <ftp/> * </services> * </system> * </configuration> */ XMLBuilder builder = new XMLBuilder(); XML ftp_config = builder.createNewConfig("system", "services", "ftp"); //Create the device Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); //Lock the configuration boolean isLocked = device.lockConfig(); if(!isLocked) { System.out.println("Could not lock configuration. Exit now."); return; } //Load and commit the configuration try { device.loadXMLConfiguration(ftp_config.toString(), "merge"); device.commit(); } catch(LoadException e) { System.out.println(e.getMessage()); return; } catch(CommitException e) { System.out.println(e.getMessage()); return; } //Unlock the configuration and close the device device.unlockConfig(); device.close(); } }
Java プログラムのコンパイルと実行
手順
ソースコードをコンパイルし、実行可能プログラムを作成するには、Java コンパイラが必要です。
コードをコンパイルし、構成管理サーバーでプログラムを実行するには、以下を行います。
EditConfig.java ファイルをコンパイルします。
> javac EditConfig.java
EditConfig プログラムを実行します。
> java EditConfig
検証
プログラムの実行の検証
目的
EditConfig プログラムが正しく動作することを確認します。
アクション
プログラムが正常に実行されると、接続が確立され、指定されたデバイスとの NETCONF セッションが作成されます。プログラムは、新しい階層をデバイス上の候補構成とマージし、設定をコミットします。
リモートデバイスで結果の設定を表示することで、設定が正しくマージされ、コミットされたことを確認できます。ステートメントは ftp アクティブなコンフィギュレーションにあるはずです。Junos OS を実行しているデバイスで、以下の動作モード コマンドを入力して階層を [edit system services] 表示します。
user@host> show configuration system services
ftp;
netconf {
ssh;
}
例:セット設定コマンドを読み込む NETCONF Java アプリケーション
この NETCONF Java ツールキット プログラムは、一連の Junos OS 設定モード コマンドを使用して設定を更新する方法を示 loadSetConfiguration() しています。
要件
Junos OS リリース 11.4 以降を実行するルーティング、スイッチング、またはセキュリティ デバイス。
NETCONF Java ツールキットが構成管理サーバーにインストールされています。
クライアント アプリケーションは、NETCONF サーバーが存在するデバイスにログインできます。
NETCONFサーバーが存在するデバイスでは、SSH経由のNETCONFサービスが有効になっています。
概要
クラスDeviceには、 および loadSetFile() メソッドが含まれておりloadSetConfiguration()、Junos OSリリース11.4以降のリリースを実行するデバイス上で、設定データをJunos OS設定モードコマンドのセットとして読み込みます。設定要素ごとに、 コマンドで完全なステートメントパスを指定するか、 などのeditナビゲーションコマンドを使用して、CLI設定モードと同様に設定階層を移動できます。NETCONF Java ツールキットは、コマンド セットを、Junos OS を実行するデバイス上の NETCONF サーバーが処理できる同等の RPC(XML)に変換します。Junos OS は、構成命令を 1 行ずつ実行します。
メソッドの構文は次のとおりです。
public void loadSetConfiguration (String setCommands) public void loadSetFile (String filePath)
このメソッドはloadSetConfiguration()、Junos OS CLI 設定モードで入力する設定コマンド文字列を引数として取ります。たとえば、 階層レベルで ステートメントを[edit system services]追加ftpするには、 コマンドをset system services ftp使用します。このメソッドはloadSetFile()、一連の設定コマンドを含むファイルのパスを引数として受け取ります。
両方の方法を使用して、複数のコマンドを読み込めることもできます。メソッドを使用して複数のコマンドを loadSetConfiguration() 読み込むには、コマンドを単一の文字列としてリストし、改行シーケンスで \n 区切るか、各コマンドに対してメソッドを個別に実行できます。メソッドを使用して複数のコマンドを loadSetFile() 読み込むには、各コマンドをファイル内の別の行に置きます。
ナビゲーションコマンドでメソッドをloadSetConfiguration()使用する場合は、コマンドを単一の文字列としてリストし、改行シーケンスで\n区切る必要があります。などのup単一のloadSetConfiguration()ナビゲーション コマンドでメソッドを呼び出すことはできません。
この例のプログラムは、2つの設定コマンドを読み込み、2つのステートメントをJunos OSリリース11.4を実行するデバイス上の候補設定にマージします。最初のコマンド である 、 set system services ftpは、 ftp 階層レベルで ステートメントを [edit system services] 追加します。2 番目のコマンドである 、 set interfaces ge-0/0/0 disableは、 disable 階層レベルで ステートメントを [edit interfaces ge-0/0/0] 追加します。プログラム・コード内の関連ステートメントは以下のとおりです。
String system_config = "set system services ftp"; String interfaces_config = "set interfaces ge-0/0/0 disable"; device.loadSetConfiguration(system_config); device.loadSetConfiguration(interfaces_config);
構成
Java プログラムの作成
手順
Java プログラム・ファイルを作成するには、以下の手順にしたがってください。
ファイルにわかりやすい名前を付けます。
ファイル名はクラス名と同じでなければなりません。この例では、ファイルとクラスは LoadSetConfig という名前です。
コードをファイルに追加し、リモート ホスト IP アドレス、ユーザー名、パスワード、タグ要素などの環境固有の変数を
<rpc-reply>更新します。ここでは、LoadSetConfig.java プログラムの完全な Java コードが示されています。
ファイルからコマンドのセットを読み込む場合は、コマンドを含むファイルを作成し、2 つの
loadSetConfiguration()メソッド呼び出しをメソッドへの呼び出しにloadSetFile()置き換えます。/*LoadSetConfig*/ import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.Device; import net.juniper.netconf.CommitException; import net.juniper.netconf.LoadException; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import org.xml.sax.SAXException; public class LoadSetConfig { public static void main(String args[]) throws NetconfException, ParserConfigurationException, SAXException, IOException { String system_config = "set system services ftp"; String interfaces_config = "set interfaces ge-0/0/0 disable"; Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); try { device.connect(); System.out.println("Connection successful."); if (device.lockConfig()) { System.out.println("Configuration successfully locked."); try { System.out.println("Updating configuration."); device.loadSetConfiguration(system_config); device.loadSetConfiguration(interfaces_config); System.out.println("Committing configuration."); device.commit(); } catch (LoadException e) { System.out.println("LoadException occurred: " + e.getMessage()); } catch (CommitException e) { System.out.println("CommitException occurred: " + e.getMessage()); } device.unlockConfig(); device.close(); } else { System.out.println("Error - cannot lock configuration"); } } catch (NetconfException e) { System.out.println("Could not connect to device: " + e.getMessage()); } } }
Java プログラムのコンパイルと実行
手順
ソースコードをコンパイルし、実行可能プログラムを作成するには、Java コンパイラが必要です。
コードをコンパイルし、構成管理サーバーでプログラムを実行するには、以下を行います。
LoadSetConfig.java ファイルをコンパイルします。
> javac LoadSetConfig.java
LoadSetConfig プログラムを実行します。
> java LoadSetConfig
検証
プログラムが正常に動作していることを確認するには、次の手順にしたがっています。
プログラムの実行の検証
目的
LoadSetConfig プログラムが正しく動作することを確認します。
アクション
プログラムが正常に実行されると、接続が確立され、指定されたデバイスとの NETCONF セッションが作成されます。プログラムは、新しいステートメントをデバイス上の候補コンフィギュレーションとマージし、設定をコミットします。
>java LoadSetConfig Connection successful. Configuration successfully locked. Updating configuration. Committing configuration.
設定変更の検証
目的
リモートデバイスで結果の設定を表示することで、設定が正しくマージされ、コミットされたことを確認できます。ftpおよび のdisableステートメントは、アクティブなコンフィギュレーションにあるはずです。Junos OSを実行しているデバイスで、以下の動作モードコマンドを発行して、 および [edit interfaces] 階層レベルを[edit system services]表示します。
アクション
admin@host> show configuration system services
ftp;
netconf {
ssh;
}
admin@host> show configuration interfaces
ge-0/0/0 {
disable;
}
コミットの検証
目的
さらに、コミット ログを確認して、コミットが成功したことを確認できます。Junos OS を実行しているデバイスで、 動作モード コマンドを show system commit 発行してコミット ログを表示します。この例では、ログは、ユーザー admin が特定の日時にNETCONFセッションで候補の設定をコミットしたことを確認します。
アクション
動作モード コマンドを show system commit 発行し、コミット ログを確認します。
admin@host> show system commit 0 2011-09-02 14:16:44 PDT by admin via netconf 1 2011-07-08 14:33:46 PDT by root via other