ネイティブ・コマンド・セット・スクリプト内の JavaScript
ネイティブ・コマンド・セットは、 JavaScript スクリプト機能をサポートします。これにより、作成者は、ネットワーク・リソースへのネイティブ・コマンドの送信に関する独自のロジック・フローを追加したり、外部コマンドからデータを実行または返すことができます。
構文
スクリプト・モードが有効になっていることをワークフロー・エンジンに示すには、ネイティブ・コマンド・セットの最初の行が //#javascript または //#js でなければなりません。
execute という名前の関数が含まれている必要があります。この関数は、3 つのパラメーターを受け入れ、作業単位 (UOW) が成功したか失敗したかを示す true または false を返します。//#javascript
function execute(scriptAuditLogger, deviceInterface, systemInterface) {
//enter javascript logic here
return true;
}これは、次のように書くこともできます。//#javascript
function execute(logger, device, system) {
//enter javascript logic here
return true;
}スクリプトの実行時に、ワークフロー・エンジンは関数パラメーターに対応する 3 つのクラスをスクリプトに渡します。 パラメーターに任意の名前を選択する場合は、その名前を関数の本体内で使用する必要があります。
$ 文字を使用しないでください。 代わりに #single_dollar# を使用してください (ハッシュタグを含む)。 Netcool Configuration Manager は、 $ 文字を置換変数の先頭として解釈します。これにより、ネイティブ・コマンド・セットでパラメーターを使用できるようになります。 したがって、単一の $ 文字は置換の開始として解釈され、終了 $ 文字がない場合はエラーが発生します。方法
各クラスで使用可能なメソッドを説明するために、「シンタックス」セクションの最初の例のパラメーター名が使用されます。
| メソッド | 説明 | 例 |
|---|---|---|
| void info (ストリング・メッセージ) | 監査ログ・メッセージを UOW ログに送信します。 | scriptAuditLogger.log(“このメッセージは作業単位ログに表示されます”); |
| void エラー (ストリング・メッセージ、例外例外) | 監査ログ・エラー・メッセージを UOW ログに送信します。 | scriptAuditLogger.error(“この操作は失敗しました”, e); |
| メソッド | 説明 | 例 |
|---|---|---|
| ストリング送信 (String コマンド) | デバイスにコマンドを送信し、応答を返します。 | var response = deviceInterface.send ("show ip interface brief"); |
| 文字列 send(文字列 command, 文字列 responseRegExp ) | デバイスにコマンドを送信し、応答で正規表現を実行した結果を返します。 最初のグループ一致のみが返されます。 | var response = deviceInterface.send ("show ip interface brief", "^ (¥ w +) ¥ s"); |
| sendAndExpect(String コマンド、文字列 expectedResponse | コマンドをデバイスに送信し、予期される応答を待機し、デバイスの応答を返します。 この方法は、対話式コマンドを送信する場合に使用します。 | deviceInterface.sendAndExpect("copy run start"、"[startup-config]?"); deviceInterface.send("r"); |
| 文字列 sendAndExpect(String コマンド、文字列 expectedResponse, 文字列 responseRegExp ) | デバイスにコマンドを送信し、予期される応答を待機し、応答で正規表現を実行した結果を返します。 最初のグループ一致のみが返されます。 この方法は、対話式コマンドを送信する場合に使用します。 |
| メソッド | 説明 | 例 |
|---|---|---|
| public Path createFile(String filePathName, String content) throw Exception | 絶対ファイル・パスとコンテンツをストリングとして指定して、ファイルを作成するメソッド。 このメソッドを使用するには、許可されたクラスとして sun.nio.fs.UnixPath をシステム・プロパティーに追加する必要があります。 |
var response = system.createFile(source,"initial content of
file\n"); |
| public Path updateFile(String filePathName, String content) throw Exception | 絶対ファイル・パスと内容をストリングとして指定して、ファイルを更新するメソッド。 このメソッドを使用するには、許可されたクラスとして sun.nio.fs.UnixPath をシステム・プロパティーに追加する必要があります。 |
var response = system.updateFile(source,"appended update to
file\n"); |
| public void deleteFile(String filePathName ) throws Exception | 絶対ファイル・パスを指定してファイルを削除するメソッド。 | system.deleteFile(source); |
public boolean sftpFile (String sourceFilePathName, String destinationFilePathName, Map<String,String> options) throws Exception |
指定されたサーバーにファイルを SFTP で送信する方式。 このメソッドを使用するには、許可された Java パッケージとして「システム・プロパティー」内の java.util パッケージが必要です。 |
|
| 文字列 executeSystemCommand(String shellName, 文字列 shellArgs, 文字列コマンド、文字列チェックサム) | システム・コマンドを実行し、システム・コマンドの出力を返します。 システム・コマンドは、シェル・スクリプトを含むファイルです。 ユーザーは、icosutil を使用してファイルのチェックサムを計算する必要があります。 その後、チェックサムをネイティブ・コマンド・セットに入力する必要があります。 |
var response = systemInterface.executeSystemCommand(“/bin/sh”, “-c”, “getNetStat.sh”, “<generated checksum>”); サーバー上の getNetStat.sh スクリプトのチェックサムを生成するには、次のコマンドを実行します。
<install_dir>;/bin/icosutil CalculateChecksum getNetStat.sh重要: チェックサムの生成後に外部スクリプトが変更された場合は、新しいチェックサムを生成し、ネイティブ・コマンド・セット・スクリプトを更新する必要があります。 |
| 文字列 executeSystemCommand(String shellName, 文字列 shellArgs, 文字列コマンド、文字列 responseRegExp, 文字列チェックサム) | システム・コマンドを実行し、システム・コマンドの出力に対して正規表現を実行した結果を返します。 最初のグループ一致のみが返されます。 システム・コマンドは、シェル・スクリプトを含むファイルです。 ユーザーは、icosutil を使用してファイルのチェックサムを計算する必要があります。 その後、チェックサムをネイティブ・コマンド・セットに入力する必要があります。 |
var response = systemInterface.executeSystemCommand(“/bin/sh”, “-c”, “getExternalData.sh”, “^(w+)\s“, <generated checksum>”); サーバー上の getExternalData.sh スクリプトのチェックサムを生成するには、次のコマンドを実行します。
<install_dir>;/bin/icosutil CalculateChecksum getExternalData.sh重要: チェックサムの生成後に外部スクリプトが変更された場合は、新しいチェックサムを生成し、ネイティブ・コマンド・セット・スクリプトを更新する必要があります。 |
制限付きコマンド
reload//#javascript
function execute(scriptAuditLogger, deviceInterface, systemInterface) {
var command = “reload”;
deviceInterface.send(command);
return true;
}スクリプトの無効化
- スクリプト-スクリプトの実行を有効にする
- システムは実行時にこのプロパティーを検査し、「false」に設定すると、スクリプトの実行を許可しません。
外部システム・コマンドの無効化
- スクリプト-外部システム・コマンド実行の有効化
- システムは実行時にこのプロパティーを検査し、「false」に設定すると、スクリプトの実行を許可しません。
スクリプトでのクラスおよびパッケージの許可
- スクリプト-スクリプトで許可されるクラス
- このシステム・プロパティーは、許可される Java クラスのリストを保管します。 スクリプト内のクラスが許可されているかどうかを判別するために、実行時に検査されます。
- スクリプト-スクリプトで許可されるパッケージ
- このシステム・プロパティーは、許可される Java パッケージのリストを保管します。 スクリプト内のパッケージが許可されているかどうかを判別するために、実行時に検査されます。
スクリプトのタイムアウトの設定
- スクリプト-最大スクリプト実行時間
- デフォルトのスクリプト実行制限は 10 分です。システム管理者は 1 分から 120 分までの時間制限を設定できます。
スクリプト・サンプル
//#javascript
function execute(scriptAuditLogger, deviceInterface, systemInterface) {
var response = deviceInterface.send("show ntp status", "(Clock is unsynchronized)");
if (response == null) {
scriptAuditLogger.info("Clock IS synchronized");
return true;
} else {
scriptAuditLogger.info("Clock is NOT synchronized");
response = deviceInterface.send("show ntp association", "(#\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
if (response != null) {
var ipAddress = response.substring(1);
scriptAuditLogger.info("IP address of master = " + ipAddress);
response = deviceInterface.send("ping " + ipAddress);
scriptAuditLogger.info(response);
} else {
scriptAuditLogger.info("NTP master is NOT configured.");
}
return false;
}
}
//#javascript
importClass(java.util.regex.Pattern);
importClass(java.util.regex.Matcher);
function execute(logger, device, system) {
var ipAddresses = device.send("show ip int brie | ex (Interface|unassigned|down)");
logger.info(ipAddresses);
var regexpression = "((?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))";
var pattern = Pattern.compile(regexpression, Pattern.MULTILINE);
var matcher = pattern.matcher(ipAddresses);
while (matcher.find()) {
var ipAddress = matcher.group();
logger.info("Found ip address [" + ipAddress + "]. Performing nslookup...");
var response = system.executeSystemCommand("/bin/sh", "-c", "/home/icosuser/scripts/nslookup.sh " + ipAddress, "57b0b52e4a43da0591f90d4b7da6f6d189b985bbf4ec787a416104910f7610ac");
logger.info(response);
}
return true;
}nslookup.shは、 Netcool Configuration Manager サーバー上の /home/icosuser/scripts ディレクトリーに書き込まれ、保存されています。 台本は1行で構成されていた: nslookup $1