Cisco CNS Configuration Engine 1.4 アドミニストレータ ガイド
IMGW Device Module Development Toolkit の使用方法
IMGW Device Module Development Toolkit の使用方法
発行日;2012/02/04 | 英語版ドキュメント(2009/02/14 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf | フィードバック

目次

IMGW Device Module Development Toolkit の使用方法

概要

入力パラメータ

終了コード

プラグイン デバイス モジュールのイベントのフロー

デバイス設定の更新

コマンドの実行

ホップのテスト

新しいデバイス モジュールの追加

既存のデバイス モジュールの更新

デバイス モジュールの削除

コード サンプル

IMGW Device Module Development Toolkit の使用方法

この付録では、IMGW Device Module Development Toolkit を使用してデバイス モジュールを追加、更新、削除する方法を説明します。

概要

プログラムはスクリプトまたはバイナリ プログラムです。次の形式のコマンドライン引数が必要です。

設定イベント:

<plugin program> <temp_logfile_name> <logging_level> <device_id> <action_type> <warning_logifle_name> <error_logfile_name> <hop_information_string> <configuration_file_name> <persistence> <operation_timeout_value> <prompt_timeout_value>

実行イベント:

<plugin program> <temp_logfile_name> <logging_level> <device_id> <action_type> <hop_information_string> <command_to_be_executed> <command_arguments> <exec_response_logfile_name> <operation_timeout_value> <prompt_timeout_value>

ホップのテスト:

<plugin program> <temp_logfile_name> <logging_level> <device_id> <action_type> <hop_information_string> <operation_timeout_value> <prompt_timeout_value>

入力パラメータ

次に、現在サポートされているデバイス プログラムの引数とその説明を示します。プラグイン プログラムは渡された引数を別の意味に解釈することがあるので、必ずしも渡された引数をすべて使用するとは限りません。

plug-in program:IMGW ランタイムによって分岐された子プロセスで実行されるプラグイン プログラム。システム管理者が登録時にこの情報を IMGW ランタイムに提供します。

temp_logfile_name:デバイス モジュールの一時ログ ファイルへのフル パス。デバイス モジュールはこのパスを使用して、オペレーションの 1 つのインスタンス(設定のダウンロード、コマンドの実行、ホップのテスト)の処理履歴をログに記録する必要があります。デフォルトでは、このファイルは CNS 2100 Series システムの/tmpディレクトリにあります。プラグイン プログラムの終了後、IMGW ランタイムはこのファイルの内容をデバッグに使用するために
/opt/CSCOimgw/bin/IMGW-DEVMOD_LOGという集中ログ ファイルに記録し、このファイルをリンク解除します。

logging_level:値は、verbose、error、または silent を指定できます。このフラグは、CNS 2100 Series のシステムでセットアップ コマンドを実行することによって設定できます。デバイス モジュールが指定したロギング レベルに基づいて情報をファイル <temp_logfile_name> に記録するように設定することをお勧めします。

device_id:デバイス モジュールによって処理されるデバイスの ID。この ID は、
cisco.mgmt.cns.config.load または cisco.mgmt.cns.exec.cmdイベントによって渡されます。

action_type:config、exec、または hoptest を指定できます。アクション タイプ config を指定すると、デバイス モジュールはデバイス設定を更新するように通知されます。アクション タイプ exec を指定すると、デバイス モジュールはデバイスに対してコマンドを実行するように通知されます。アクション タイプ hoptest を指定すると、デバイス モジュールは、<hop_information_string> で提供されたホップ情報を使用してデバイスがアクセス可能であるかどうかをテストするように通知されます。デバイス モジュールは、このフラグに対して正確に処理される必要があります。

warning_logfile_name:すべての警告メッセージとそれと対応する設定コマンドの行番号を記録するためにデバイス モジュールによって使用されるファイルへのフル パス。このパラメータは、アクション タイプが config の場合にのみ、IMGW ランタイムによって提供されます。このファイルの情報は、設定が警告付きで成功した場合に cisco.mgmt.cns.config.load イベントへの応答メッセージを生成するためにのみ使用されるからです。IMGW ランタイムが適切な応答メッセージを生成するためには、各警告メッセージは新しい行で開始され、文字列 LINE <警告メッセージの原因となった設定コマンドの行番号>が先頭に付いている必要があります。警告ファイルの例を次に示します。

LINE 3: The interface has already been removed
.
.
.
LINE 7: The interface already exists.
 

このファイルの場所は、CNS 2100 Series システムの /tmp の下です。プラグイン プログラムの終了後、IMGW ランタイムはこのファイルの内容を応答イベント ペイロードに置いてから、すぐにこのファイルをリンク解除します。

 

error_logfile_name:エラー メッセージの発生および対応する設定コマンドの行番号を記録するためにデバイス モジュールによって使用されるファイルへのフル パス。このパラメータは、アクション タイプが config の場合にのみ、IMGW ランタイムによって提供されます。このファイルの情報は、設定が失敗した場合に cisco.mgmt.cns.config.load イベントへの応答メッセージを生成するためにのみ使用されるからです。IMGW ランタイムが適切な応答メッセージを生成するためには、各エラー メッセージは新しい行で開始され、文字列 LINE <エラー メッセージの原因となった設定コマンドの行番号> が先頭に付いている必要があります。エラー ファイルの例を次に示します。

LINE 3: % Invalid input detected at
LINE 7: % Incomplete command
.
.
.
LINE 12: % The interface already exists
 

このファイルの場所は、CNS 2100 Series システムの /tmp の下です。プラグイン プログラムの終了後、IMGW ランタイムはこのファイルの内容を応答イベント ペイロードに置いてから、すぐにこのファイルをリンク解除します。

exec_response_logfile_name:デバイスに対するコマンド実行の出力を記録するために使用されるファイルへのフル パス。このパスは、アクション タイプが exec であり、CNS 2100 Series システムの /tmp にある場合にのみ、IMGW ランタイムによって提供されます。プラグイン プログラムの終了後、IMGW ランタイムはこのファイルの内容を応答イベント ペイロードに置いてから、すぐにこのファイルをリンク解除します。

hop_information_string:デバイスのアクセス情報を保存するために使用される文字列。デバイスの個々のホップ情報をすべて、順番に並べた文字列連結です。ホップ情報とその
<hop_information_string> の例を次に示します。

 

ホップの種類
IP アドレス
ポート
ユーザ名
パスワード

IOS_LOGIN

172.29.145.45

Admin

Cisco

IOS_EN

Lab

Lab

対応する <hop_information_string> は、次のようになります。

“IOS_LOGIN” “172.29.145.45” “ ” “Admin” “Cisco” “IOS_EN” “ ” “ ” “Lab” “Lab”

) ヌル値を含むこれらのホップ情報フィールドには、子プロセスへ渡す前に、IMGW ランタイムが自動的にスペースを追加します。


command_to_be_executed:デバイスに対して実行されるコマンド。アクション タイプが exec の場合にのみ、IMGW ランタイムによって提供されます。

command_arguments:デバイスに対して実行されるコマンドの引数。アクション タイプが exec の場合にのみ、IMGW ランタイムによって提供されます。

configuration_file_name:デバイスにダウンロードされる設定ファイルへのフル パス。このパスは、アクション タイプが config であり、CNS 2100 Series システムの /tmp にある場合にのみ、IMGW ランタイムによって提供されます。プラグイン プログラムの終了後、IMGW ランタイムはただちにこのファイルをリンク解除します。

persistence:y または n。y の記号は、設定が不揮発性ストレージなどに書き込まれる必要があることを意味します。アクション タイプが config の場合にのみ、IMGW ランタイムによって提供されます。このオプションは、デバイスの種類によって異なります。つまり、デバイス タイプがこのオプションをサポートしていない場合、デバイス モジュールはこのオプションを無視できます。

operation_timeout_value:デバイスに対してコマンドを実行できる最長時間。このパラメータは、IOS、CatOS、CatIOS、PIX、CSS および CE デバイス用の IMGW レガシー デバイス モジュールにある Expect スクリプトで使用されています。ユーザ定義のデバイス モジュールでこのパラメータを使用しない場合は、このパラメータを無視できます。

prompt_timeout_value:デバイスへのログイン セッション中に、次のプロンプトまで待機できる最長時間。このパラメータは、IOS、CatOS、CatIOS、PIX、CSS および CE デバイス用の IMGW レガシー デバイス モジュールにある Expect スクリプトで使用されています。ユーザ定義のデバイス モジュールでこのパラメータを使用しない場合は、このパラメータを無視できます。

終了コード

分岐されたプロセス(プラグイン プログラムが実行されるプロセス)が終了したとき、IMGW ランタイムは次の終了コードを分岐されたプロセスから返します。

設定イベント

0:ダウンロード成功

1:ダウンロード失敗

2:ダウンロードが警告メッセージ付きで成功

実行イベント

0:コマンドの実行成功

1:コマンド実行失敗

ホップのテスト

0:ホップのテスト成功

1:ホップのテスト失敗

プラグイン デバイス モジュールのイベントのフロー

次に、config、exec、および hoptest の 3 つのコマンドのプログラム フローについて簡単に説明します。最初の 2 つのコマンドは、それぞれ cisco.mgmt.cns.config.load イベントおよび
cisco.mgmt.cns.exec.cmd イベントへの応答です。これに対して、最後のコマンドは IMGW ランタイムが必要とする内部のルーチン処理であるため、ネットワーク オペレータの関与を必要としません。

IMGW ランタイムが子プロセスを発生してプラグイン プログラムを実行した後、対応するデバイス モジュールがパラメータ リストからアクション タイプを読み込む必要があります。アクション タイプが config の場合、デバイス モジュールはデバイス設定を更新する必要があります。exec の場合は、デバイス モジュールはコマンドを実行する必要があります。hoptest の場合は、デバイス モジュールはホップのテストを行う必要があります。

デバイス設定の更新

1. <hop_information_string> を使用して、デバイスにアクセスします。

2. <configuration_file_name> で指定した設定ファイルをデバイスにダウンロードします。

3. 上記のダウンロード オペレーションが成功した場合、<persistence> が y に設定されます。デバイスはこのオプションをサポートし、非揮発性ストレージに設定を書き込みます。

4. デバイスによってプロンプトされたすべての警告メッセージおよび対応する設定コマンドの行番号を、<warning_logfile_name> で指定したファイルに書き込みます。このファイルの内容は、ダウンロードに成功したが警告メッセージがある場合、応答イベントのペイロードの一部になります。

5. デバイスによってプロンプトされたすべてのエラー メッセージおよび対応する設定コマンドの行番号を、<error_logfile_name> で指定したファイルに書き込みます。最初のエラー メッセージおよび対応する設定コマンド ライン番号は、ダウンロードに失敗した場合、応答イベントのペイロードの一部になります。

6. <logging_level> に基づき、プロシージャ全体を通してデバッグするために
<temp_logfile_name> で指定したファイルへと、処理履歴を重点的にリダイレクトします。

7. 適切な終了コードで終了して、IMGW ランタイムに制御を返します。

コマンドの実行

1. <hop_information_string> を使用して、デバイスにアクセスします。

2. <command_to_be_executed> に <command_arguments> を指定してデバイスに対して実行します。

3. コマンド実行からのすべての出力を <exec_response_logfile_name> で指定したファイルに書き込みます。このファイルの内容は、応答イベントのペイロードの一部になります。

4. <logging_level> に基づき、プロシージャ全体を通してデバッグするために
<temp_logfile_name> で指定したファイルへと、処理履歴を重点的にリダイレクトします。

5. 適切な終了コードで終了して、IMGW ランタイムに制御を返します。

ホップのテスト

1. <hop_information_string> を使用して、デバイスにアクセスします。

2. <logging_level> に基づき、プロシージャ全体を通してデバッグするために
<temp_logfile_name> で指定したファイルへと、処理履歴を重点的にリダイレクトします。

3. 適切な終了コードで終了して、IMGW ランタイムに制御を返します。

「コード サンプル」に簡単な例を示します。サンプル プログラムは、rlogin を使用して UNIX/Linux ワークステーションに接続し、渡されたコマンドを実行するスクリプトです。このプログラムは、実行イベントに応答します。

新しいデバイス モジュールの追加


ステップ 1 デバイス モジュールのプラグイン プログラムを作成します。

ステップ 2 ステップ 1 で作成したプログラムのユニット テストを行います。

ステップ 3 プログラムを CNS 2100 Series システムの /opt/CSCOimgw/plugin-modules/<device_type> の下にコピーします。

ここに実行の権限があることを確認します。

デバイス タイプを MYDEV とすると、次の例のようになります。/opt/CSCOimgw/plugin-modules/MYDEV/my-handler.exp

ステップ 4 プログラムを CNS 2100 Series システムに登録するには、次のコマンドを入力します(CNS 2100 Series システムのゲートウェイ ID を imgw-test1 としています)。

% imgw-devmod-register -gateway imgw-test1 -devtype MYDEV -optype exec -cmd /opt/CSCOimgw/plugin-modules/MYDEV/my-handler.exp

ステップ 5 DAT を使用してデバイス タイプとホップ タイプを追加します。

a. Home ページで、Tools タブをクリックします。

b. DAT をクリックして、ログインします。

c. DAT ページで、IMGW をクリックします。

d. Edit Hop/Device Type をクリックします。

e. New DeviceType ボックスにステップ 3 のデバイス タイプを入力し、Add to list をクリックします(図 B-1 を参照)。

f. New HopType ボックスに新しいホップ タイプを入力し、Add to list をクリックします。

g. Modify をクリックします。


 

図 B-1 デバイス モジュールの追加

 

既存のデバイス モジュールの更新


ステップ 1 新しいデバイス モジュールのプラグイン プログラムを用意します。

ステップ 2 古いプログラムの登録を取り消すには、次のコマンドを入力します。

% imgw-devmod-deregister -gateway imgw-test1 -devtype MYDEV -optype exec

ステップ 3 ステップ 1 で作成したプログラムを CNS 2100 Series システムの /opt/CSCOimgw/plugin-modules/<device_type> の下にコピーします。

この例では、新しいファイルは次のようになります。

/optCSCOimgw/plugin-modules/MYDEV/new_handler.exp

ステップ 4 新しいプログラムを CNS 2100 Series システムに登録するには、次のコマンドを入力します。

% imgw-devmod-register -gateway imgw-test1 -devtype MYDEV -optype exec -cmd /optCSCOimgw/plugin-modules/MYDEV/new_handler.exp


 

デバイス モジュールの削除


ステップ 1 DAT を使用してデバイス タイプとホップ タイプを削除します。

a. Home ページで、Tools タブをクリックします。

b. DAT をクリックして、ログインします。

c. DAT ページで、IMGW をクリックします。

d. Edit Hop/Device Type をクリックします。

e. 削除するデバイス タイプを選択し、Remove をクリックします(図 B-1 を参照)。

f. 削除したデバイス タイプに関連付けられているホップ タイプを選択し、Remove をクリックします。

g. Modify をクリックします。

ステップ 2 プログラムの登録を取り消すには、次のコマンドを入力します。

% imgw-devmod-register -gateway imgw-test1 -devtype MYDEV -optype exec

ステップ 3 /opt/CSCOimgw/plugin-modules からプラグイン プログラムを削除するには、次のコマンドを入力します。

% rm -fr /opt/CSCOimgw/plugin-modules/MYDEV/


 

コード サンプル

 
#!/usr/bin/expect
 
# exit status:
# 0: success
# 1: failure
 
#exp_internal 1
 
###################################################################
#
# Get necessary arguments
#
###################################################################
 
# arg 1 loglevel is not used in this script
# arg 2 deviceid is not used in this script
 
# the contents of log is written to /opt/CSCOimgw/bin/IMGW-DEVMOD-LOG
set log [lindex $argv 0]
 
set action [lindex $argv 3]
 
###################################################################
#
# Hopinfo contains information to access a device.
# Hopinfo format:
# <hoptype> <ip> <port> <username> <password>
# eg)
# "IOS_LOGIN" "10.1.2.3" "0" "admin" "cisco"
# "IOS_EN" "" "" "labuser" "labpasswd"
#
###################################################################
 
set hopinfo [lindex $argv 4]
 
# hostname is 1st arg in hopinfo, username is 3rd and password the 4th
set hostname [lindex $argv 5]
set username [lindex $argv 7]
set password [lindex $argv 8]
 
set f [open $log w]
puts $f "hostname= $hostname, user= $username, passwd=$password"
 
###################################################################
#
# Get command to be executed.
#
###################################################################
 
# for this test script, there is only one hop entry, so the next arg is at
# [hopindex + 5].If more than one hop entry exists, the next arg will be
# at [hopindex + x*5] where x is the number of hop entries.
 
set cmd [lindex $argv 9]
set cmdargs [lindex $argv 10]
 
 
###################################################################
#
# the contents of response log is included in the response event,
# and is logged in /opt/CSCOimgw/bin/IMGW-LOG-<hostname>
#
###################################################################
 
set reslog [lindex $argv 11]
 
# the remaining args op_timeout and prompt_timeout are not used
 
puts $f "Executing rlogin.exp"
puts $f "action= $action, cmd= $cmd, cmdargs= $cmdargs, hopinfo= $hopinfo"
 
 
###################################################################
#
# Do some error checking for input arguments.
#
###################################################################
 
if { [string match $action "exec"] !=1 } {
puts $f "Error: Unknown action type, exit program."
close $f
exit 1
}
 
###################################################################
#
# Actual work here
#
###################################################################
 
puts $f "Calling command rlogin $hostname -l $username"
eval spawn -noecho "rlogin $hostname -l $username"
 
log_file -noappend $reslog
expect {
-nocase "Password:" { send "$password\r" }
}
 
expect {
-re "\-\>" {
send "$cmd $cmdargs\r"
}
-re "\\$" {
send "$cmd $cmdargs\r"
}
}
 
expect {
-re "\-\>" {
send "exit\n"
}
-re "\\$" {
send "exit\n"
}
}
log_file
 
puts $f "Done"
close $f
 
###################################################################
#
# Return success exit code here
#
###################################################################
 
exit 0