ディスカバリーパターンで使用される EVAL スクリプトの例Issue 概要 サービスマッピングとディスカバリーでは、パターンを使用して組織内のデバイスとアプリケーションを検出またはマッピングします。パターンデザイナーを使用してパターンを作成または変更すると、パターンステップで EVAL スクリプトを使用して、フィールド内の文字列を評価できます。 JavaScript の eval() 関数をパラメーター値として使用します。 この記事では、EVAL スクリプトを適用する方法について説明し、Java および Groovy 用の最も一般的な EVAL スクリプトの例を示します。Resolution手順 「EVAL」と入力し、フィールドの横にある編集アイコンをクリックします。[EVAL スクリプトエディター] ウィンドウで、JavaScript モードがオンになっていることを確認するか、Groovy などの他のスクリプトタイプの場合は [その他] をクリックします。エディターペインにスクリプトを入力します。必要に応じて、[検索]、[置換]、および [フォーマット] ボタンを使用してスクリプトを変更します。 JavaScript ではリンティングやハイライト表示を使用できます。[適用] をクリックします。 Java で最も一般的な EVAL スクリプトの例 switch を使用してデバイス情報を取得するには rtrn = ""; var type = ${proc_scsi_table_disk[].type}; >switch (type){ case "cdrom": rtrn = "cd"; break; case "CD-ROM": rtrn = "cd"; break; case "Direct-Access": rtrn = "disk"; break; default: rtrn = "logical"; } ) リストを文字列に変更するには var rtrn = "";var array = ${temp_description};var i;for (i=0; i<array.size() ; i++)rtrn = rtrn + " \n" + array.get(i); 文字列を置き換えるには var name =${dep_app1[].name};var rtrn; rtrn= name.replace('_','#'); 特定の名前とバージョンを確認してテーブルから重複を削除するには var tableWithoutDuplicates = ''; tableWithoutDuplicates = DuplicateRemover.removeDuplicates(${PKG},["name","version"]); CTX.setAttribute("PKG", tableWithoutDuplicates); 特定の VIP サーバー IP と serverPort を確認してテーブルから重複を削除するには var tableWithoutDuplicates = ''; tableWithoutDuplicates = DuplicateRemover.removeDuplicates(${vserverServiceTable},["vsvrName","serverIP", "serverPort"]); CTX.setAttribute("vserverServiceTable", tableWithoutDuplicates); システム名の書式を設定するには var rtrn = ''; var hostnameFormatter = new Packages.com.glide.util.HostnameFormatter(${fqdnRegex}); hostnameFormatter.setCase(${hostnameCase}); hostnameFormatter.setIncludeDomain(${shouldIncludeDomain}=="true"); var formattedHostname = hostnameFormatter.format(${sysName}); rtrn = (formattedHostname)?formattedHostname.fFormattedName:''; フェイルオーバー用にデバイスに適切なステータス ID を設定するには var rtrn = ''; if (${failureStatusId}=='0' || ${failureStatusId}=='1') { rtrn='1'; } else { rtrn='2'; } 情報 (すべてのインターフェイス) を 1 行で設定するには var rtrn = ''; var interfaces = ${IfTable[*].info}.toArray(); var line; var i; for ( i = 0; i < interfaces.length; i++ ){ rtrn+= interfaces[i] ; if ( i % 2 == 1 ){ rtrn += '$$$$'; } } すべてのロードバランサーサーバーを実行するコマンドを設定するには var rtrn = ''; var command = "show lb vserver " + ${vserversTable[].vsvrName}; var rule_def = CTX.getCommandManager().shellCommand(command, false, null, null, CTX); rtrn = rule_def; すべてのプールメンバーに関する情報を取得するには var rtrn = ''; try{ var command = "list sys db bigpipe.displayservicenames | grep value" dummy= CTX.getCommandManager().shellCommand(command, false, null, null, CTX); stat=dummy.split('"')[1] var command = "modify sys db bigpipe.displayservicenames value false" dummy= CTX.getCommandManager().shellCommand(command, false, null, null, CTX); var command = "list ltm pool all members | grep -e 'ltm pool' ':' 'address' 'state'"; var members_def = CTX.getCommandManager().shellCommand(command, false, null, null, CTX); var command = "modify sys db bigpipe.displayservicenames value " + stat dummy = CTX.getCommandManager().shellCommand(command, false, null, null, CTX); rtrn = members_def; } catch (e) {} クリーンな並べ替えの説明を取得するには var rtrn = ""; var array = ${temp_description}; var i; for (i=0; i<array.size() ; i++) rtrn = rtrn + " \n" + array.get(i); アプリケーションデバイスのエディションに関する情報を取得するには var table = CTX.getAttribute("component[*].str").toArray(); var edition; for (var i =0; i<table.length; i++) { var comp = table[i].toLowerCase(); if (comp.indexOf("coherence") > -1) edition = "Suite"; else if (comp.indexOf("cluster") > -1) edition = "Enterprise"; else edition = "Standard"; } edition; 数値の MAC アドレスを標準形式に変換するには この EVAL スクリプトは、MAC アドレスを正しい文字列 (00:50:56:90:8B:16) に修正します。 var mac = "005056908B16"; mac_array = mac.match(/../g); std_format_mac = mac_array.join(":"); Groovy で最も一般的な EVAL スクリプトの例 テーブルから新しい行とスペースを削除するには この EVAL スクリプトは、テーブルから \n とスペースを削除します。 virtual_server = ${servers_groups_table[].servers_ports}; virtual_server = virtual_server.replaceAll('\\n','&') virtual_server = virtual_server.replaceAll('\\s+',' ') virtual_server = virtual_server.replaceAll('&','\\\n') return virtual_server 区切り文字を含む情報を取得して行を分割するには この EVAL スクリプトは、区切り文字を含む情報を取得して行を分割します。この情報は、後で解析に使用できます。 arry = ${vserverFull[*].info} str = "" for (i=0;i<arry.size();i++) { if (arry[i].contains('Type:')) { str = str + "####"+arry[i] + "\n" } else { str = str + arry[i] + "\n" } } return str; ディスカバリータイプを取得するには この情報は、後でパターン実行時間を見つけるために使用できます。 ctx.getWork().getDiscoveryType(); sudo ユーザーを特定するには このスクリプトを使用して、使用する特権コマンドを見つけることができます。 return ${ctx}.getDiscoveryProvider(com.snc.sw.dto.ProviderType.SSH).getPrivilegedCommand(); アプリケーションパスを Windows パスに変換するには スラッシュ </> をバックスラッシュ <\> に置き換えます。 ${dep_apps[].appdir}.replace('/',${fs}) WAR ファイルを weblogic.xml 情報に置き換えるには この EVAL スクリプトは、Weblogic.xml を実行した後にファイルをフォルダーに変換し、ファイル済 weburi から .war を削除します。 return ${uri_table[].forEach}.replace(${substr},'') テーブルを反復処理し、各行に対してシェルコマンドを実行するには この EVAL スクリプトは、同じテーブル (war[]) がソースフィールドとターゲットフィールドとして使用されるテーブル変換操作に追加されます。 try { return com.snc.sw.commands.SshCommand.getSSHProvider(ctx).execCommand(${war[].command}); } catch (Exception e) { return \"None\”; }