SnapCenter Software 5 マニュアル ( CA08871-403 )
Javaスタイル
Javaカスタム プラグインは、データベースやインスタンスなどのアプリケーションと直接連携します。
制限事項
Javaプログラミング言語を使用してプラグインを開発する際は、いくつかの制限事項に注意する必要があります。
プラグインの特性 | Javaプラグイン |
---|---|
複雑さ |
低~中 |
メモリー フットプリント |
最大10~20MB |
他のライブラリーへの依存 |
アプリケーション通信用のライブラリー |
スレッド数 |
1 |
スレッドの実行時間 |
1時間未満 |
Javaに制限事項がある理由
SnapCenterエージェントの目的は、継続的かつ安全で堅牢なアプリケーション統合を実現することにあります。Javaプラグインをサポートすることで、プラグインがメモリー リークなどの望ましくない問題を引き起こす可能性があります。特に使いやすさを目的としている場合、これらの問題は対処が困難になります。プラグインがそれほど複雑ではない場合、そのようなエラーの責任は開発者にないことがほとんどです。Javaプラグインの危険性は、プラグインがSnapCenterエージェントそのものと同じJVM内で実行されていることにあります。プラグインがクラッシュしたり、メモリーがリークしたりすると、エージェントにも悪影響が及ぶ可能性があるからです。
サポートされるメソッド
方法 | 必須 | 説明 | 呼び出し元と呼び出すタイミング |
---|---|---|---|
version |
○ |
プラグインのバージョンを返す必要がある。 |
SnapCenter Serverまたはエージェントがプラグインのバージョンを要求したとき。 |
quiesce |
○ |
アプリケーションで休止を実行する必要がある:多くの場合、これによってアプリケーションはSnapCenter Serverでバックアップ(Snapshotコピーなど)を作成できる状態になります。 |
SnapCenter ServerがSnapshotコピーを作成する前か、一般的なバックアップを実行する前。 |
unquiesce |
○ |
アプリケーションで休止解除を実行する必要がある:多くの場合、これによってアプリケーションは通常の動作状態に戻ります。 |
SnapCenter ServerがSnapshotコピーを作成するか、一般的なバックアップを実行したあと。 |
cleanup |
× |
プラグインでクリーンアップする必要があるすべてのものをクリーンアップする。 |
SnapCenter Server上のワークフローが(正常に、または障害で)終了したとき。 |
clonePre |
× |
クローニング処理の実行前に必要な操作を実行する必要がある。 |
ユーザーが「cloneVol」または「cloneLun」操作をトリガーし、組み込みのクローニング ウィザード(GUI / CLI)を使用するとき。 |
clonePost |
× |
クローニング処理の実行後に必要な操作を実行する必要がある。 |
ユーザーが「cloneVol」または「cloneLun」操作をトリガーし、組み込みのクローニング ウィザード(GUI / CLI)を使用するとき。 |
restorePre |
× |
リストア処理の呼び出し前に必要な操作を実行する必要がある。 |
ユーザーがリストア処理をトリガーするとき。 |
restore |
× |
アプリケーションのリストア / リカバリーを行う。 |
ユーザーがリストア処理をトリガーするとき。 |
appVersion |
× |
プラグインで管理されているアプリケーションのバージョンを取得する。 |
バックアップ / リストア / クローンなどのワークフローごとに、ASUPデータ収集の一環として。 |
チュートリアル
このセクションでは、Javaプログラミング言語を使用してカスタム プラグインを作成する方法について説明します。
Eclipseの設定
-
Eclipseで新しいJavaプロジェクト「TutorialPlugin」を作成します
-
[Finish]をクリックします。
-
[New Project]を右クリックし、[Properties] > [Java Build Path] > [Libraries] > [Add External JARs]の順に移動します
-
ホスト エージェントの../lib/フォルダーに移動し、jars scAgent-5.0-core.jarおよびcommon-5.0.jarを選択します
-
プロジェクトを選択して、[src]フォルダーを右クリックし、[New] > [Package]の順に移動して、com.netapp.snapcreator.agent.plugin.TutorialPluginという名前の新しいパッケージを作成します
-
新しいパッケージを右クリックし、[New] > [Java Class]の順に選択します。
-
名前として「TutorialPlugin」と入力します。
-
スーパークラスの参照ボタンをクリックし、「*AbstractPlugin」を検索します。表示される結果は次の1つのみです:
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin"
-
[Finish]をクリックします。
-
Javaクラス:
package com.netapp.snapcreator.agent.plugin.TutorialPlugin; import com.netapp.snapcreator.agent.nextgen.common.result.Describe Result; import com.netapp.snapcreator.agent.nextgen.common.result.Result; import com.netapp.snapcreator.agent.nextgen.common.result.VersionR esult; import com.netapp.snapcreator.agent.nextgen.context.Context; import com.netapp.snapcreator.agent.nextgen.plugin.AbstractPlugin; public class TutorialPlugin extends AbstractPlugin { @Override public DescribeResult describe(Context context) { // TODO Auto-generated method stub return null; } @Override public Result quiesce(Context context) { // TODO Auto-generated method stub return null; } @Override public Result unquiesce(Context context) { // TODO Auto-generated method stub return null; } @Override public VersionResult version() { // TODO Auto-generated method stub return null; } }
-
必須メソッドの実装
quiesce、unquiesce、versionは、各カスタムJavaプラグインで実装する必要がある必須メソッドです。
プラグインのバージョンを返すversionメソッドを次に示します。
@Override public VersionResult version() { VersionResult versionResult = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build(); return versionResult; }
quiesceおよびunquiesceメソッドの実装を以下に示します。これらは、SnapCenter Serverによって保護されているアプリケーションと連携します。ここではチュートリアルの説明なので、アプリケーションの部分については説明しません。SnapCenterエージェントがプラグイン開発者に提供する次の機能について重点的に説明します。
@Override public Result quiesce(Context context) { final Logger logger = context.getLogger(); /* * TODO: Add application interaction here */
logger.error("Something bad happened."); logger.info("Successfully handled application");
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build(); return result; }
メソッドはContextオブジェクトで渡されます。ここには、LoggerやContext Storeなどの複数のヘルパーと、現在の処理に関する情報(ワークフローID、ジョブID)が含まれます。loggerを取得するには、final Logger logger = context.getLogger();を呼び出します。loggerオブジェクトは、logbackなど、他のロギング フレームワークから認識されている同様のメソッドを提供します。resultオブジェクトには、終了コードを指定することもできます。この例では、問題が発生していないためゼロが返されます。その他の終了コードは、さまざまな障害シナリオにマッピングできます。
resultオブジェクトの使用
resultオブジェクトには、次のパラメーターが含まれます。
パラメーター | デフォルト | 説明 |
---|---|---|
Config |
空き |
このパラメーターを使用すると、設定パラメーターをサーバーに返送できます。ここには、プラグインで更新する必要があるパラメーターを指定できます。この変更が実際にSnapCenter Serverの設定に反映されるかは、configのAPP_CONF_PERSISTENCY=YまたはNパラメーターによって決まります。 |
exitCode |
0 |
処理のステータスを示します。「0」は、処理が正常に実行されたことを示します。その他の値はエラーまたは警告を示します。 |
Stdout |
空き リスト |
これを使用して、stdoutメッセージをSnapCenter Serverに送信できます。 |
Stderr |
空き リスト |
これを使用して、stderrメッセージをSnapCenter Serverに送信できます。 |
Messages |
空き リスト |
このリストには、プラグインからサーバーに返す必要があるすべてのメッセージが含まれます。SnapCenter Serverは、これらのメッセージをCLIまたはGUIに表示します。 |
SnapCenterエージェントは、すべての結果タイプにビルダー(ビルダー パターン)を提供します。これにより、メッセージを非常に簡単に使用できるようになります。
Result result = Result.builder() .withExitCode(0) .withStdout(stdout) .withStderr(stderr) .withConfig(config) .withMessages(logger.getMessages()) .build()
たとえば、終了コードを0に設定し、stdoutとstderrのリストを設定して、configパラメーターを設定し、サーバーに返送されるログ メッセージも追加します。すべてのパラメーターが必要というわけではない場合は、必要なパラメーターのみを送信します。各パラメーターにはデフォルト値があるため、次のコードから.withExitCode(0)を削除しても、結果は変わりません。
Result result = Result.builder() .withExitCode(0) .withMessages(logger.getMessages()) .build();
VersionResult
VersionResultは、SnapCenter Serverにプラグインのバージョンを通知します。また、これはResultから継承するので、ここにはconfig、exitCode、stdout、stderr、およびmessagesパラメーターも含まれています。
パラメーター | デフォルト | 説明 |
---|---|---|
Major |
0 |
プラグインのメジャー バージョン フィールド。 |
Minor |
0 |
プラグインのマイナー バージョン フィールド。 |
Patch |
0 |
プラグインのパッチ バージョン フィールド。 |
Build |
0 |
プラグインのビルド バージョン フィールド。 |
次に例を示します。
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
contextオブジェクトの使用
contextオブジェクトは、次のメソッドを提供します。
contextメソッド | 目的 |
---|---|
String getWorkflowId(); |
現在のワークフローについて、SnapCenter Serverが使用しているワークフローIDを返します。 |
Config getConfig(); |
SnapCenter Serverからエージェントに送信されている設定を返します。 |
ワークフローID
ワークフローIDは、SnapCenter Serverが特定の実行ワークフローを参照するために使用するIDです。
Config
このオブジェクトには、SnapCenter Serverのconfigでユーザーが設定できるパラメーター(のほとんど)が含まれています。ただし、セキュリティ上の理由により、これらのパラメーターの一部はサーバー側でフィルターされる可能性があります。configにアクセスしてパラメーターを取得する例を以下に示します。
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
""// myParameter"には、SnapCenter Serverのconfigから読み取られたパラメーターが含まれています。 configのパラメーター キーが存在しない場合は、空の文字列("")が返されます。
プラグインのエクスポート
SnapCenterホストにプラグインをインストールするには、プラグインをエクスポートする必要があります。
Eclipseで次のタスクを実行します。
-
プラグインの基本パッケージ(この例では、com.netapp.snapcreator.agent.plugin.TutorialPlugin)を右クリックします。
-
[エクスポート] > [Java] > [Jar File]を選択します。
-
[次へ]をクリックします。
-
次のウィンドウで、jarファイルのデスティネーション パス「tutorial_plugin.jar」を指定します。 プラグインのベース クラスはTutorialPlugin.classという名前で、プラグインは同じ名前のフォルダーに追加する必要があります。
プラグインが他のライブラリーにも依存している場合は、lib/というフォルダーを作成できます
プラグインが依存しているjarファイル(データベース ドライバーなど)を追加できます。SnapCenterでプラグインをロードすると、このフォルダー内のすべてのjarファイルが自動的にプラグインに関連付けられ、クラスパスに追加されます。