Javaスタイル
Javaカスタムプラグインは、データベースやインスタンスなどのアプリケーションと直接対話します。
制限事項
Javaプログラミング言語を使用してプラグインを開発するときは、いくつかの制限事項に注意する必要があります。
プラグインの特性 | Javaプラグイン |
---|---|
複雑さ |
低~中 |
メモリフットプリント |
最大10~20 MB |
他のライブラリへの依存 |
アプリケーション通信用ライブラリ |
スレッド数 |
1 |
スレッドランタイム |
1時間未満 |
Java制限の理由
SnapCenterエージェントの目標は、継続的かつ安全で堅牢なアプリケーション統合を実現することです。Javaプラグインをサポートすることで、プラグインがメモリリークなどの望ましくない問題を引き起こす可能性があります。これらの問題は、特に物事を使いやすくすることを目的としている場合には、取り組むのが難しいです。プラグインの複雑さがそれほど複雑でない場合、開発者がエラーを導入した可能性ははるかに低くなります。Java プラグインの危険性は、 SnapCenter エージェント自体と同じ JVM で実行されていることです。プラグインがクラッシュしたり、メモリがリークしたりすると、Agentに悪影響を及ぼす可能性があります。
サポートされる方法
方法 | 必須 | 説明 | いつ誰に電話したの? |
---|---|---|---|
バージョン |
はい |
プラグインのバージョンを返す必要があります。 |
SnapCenter サーバまたはエージェントがプラグインのバージョンを要求します。 |
休止 |
はい |
アプリケーションで休止を実行する必要があります。ほとんどの場合、これは、アプリケーションをSnapCenterサーバがバックアップ(スナップショットなど)を作成できる状態にすることを意味します。 |
SnapCenter サーバが Snapshot コピーを作成する前、または一般的なバックアップを実行します。 |
休止解除 |
はい |
アプリケーションで休止解除を実行する必要があります。ほとんどの場合、これはアプリケーションを通常の動作状態に戻すことを意味します。 |
SnapCenterサーバがスナップショットを作成した後、または一般的にバックアップを実行した後。 |
クリーンアップ |
いいえ |
プラグインがクリーンアップする必要があるすべての処理を担当します。 |
SnapCenterサーバ上のワークフローが終了したとき(正常に完了したとき、または失敗したとき)。 |
clonePre |
いいえ |
クローニング処理の実行前に必要な処理を実行する必要があります。 |
ユーザが「cloneVol」または「cloneLun」アクションをトリガーし、組み込みのクローニングウィザード(GUI / CLI)を使用した場合。 |
clonePost |
いいえ |
クローニング処理の実行後に必要な処理を実行する必要があります。 |
ユーザが「cloneVol」または「cloneLun」アクションをトリガーし、組み込みのクローニングウィザード(GUI / CLI)を使用した場合。 |
restorePre |
いいえ |
は、リストア処理の呼び出し前に実行する必要があるアクションを実行する必要があります。 |
ユーザがリストア処理をトリガーしたとき。 |
リストア |
いいえ |
アプリケーションのリストア/リカバリを実行します。 |
ユーザがリストア処理をトリガーしたとき。 |
アプリケーションバージョン |
いいえ |
プラグインで管理されているアプリケーションのバージョンを取得します。 |
ASUPデータ収集の一環として、バックアップ/リストア/クローンなどのすべてのワークフローで使用できます。 |
チュートリアル
このセクションでは、Javaプログラミング言語を使用してカスタムプラグインを作成する方法について説明します。
Eclipseの設定
-
Eclipseで新しいJavaプロジェクト「TutorialPlugin」を作成する
-
[ 完了 ] をクリックします。
-
新しいプロジェクト * → * プロパティ * → * Java ビルドパス * → * ライブラリ * → * 外部 JAR の追加 * を右クリックします
-
ホストエージェントの../lib/フォルダに移動し、jars scAgent-5.0-core.jarおよびcommon-5.0.jarを選択します。
-
プロジェクトを選択し、 * src フォルダー * → * New * → * Package * を右クリックして、 com.netapp.snapcreator.agent.plugin.TutorialPlugin という名前で新しいパッケージを作成します
-
新しいパッケージを右クリックし'新規> Javaクラスを選択します
-
名前に「TutorialPlugin」と入力します。
-
スーパークラスの参照ボタンをクリックし、「 * AbstractPlugin 」を検索します。表示される結果は1つだけです。
"AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin". .. [ 完了 ] をクリックします。 .. 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; } }
-
必要なメソッドの実装
休止、休止解除、およびバージョンは、各カスタムJavaプラグインで実装する必要がある必須のメソッドです。
プラグインのバージョンを返すversionメソッドを次に示します。
@Override public VersionResult version() { VersionResult versionResult = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build(); return versionResult; }
Below is the implementation of quiesce and unquiesce method. These will be interacting with the application, which is being protected by SnapCenter Server. As this is just a tutorial, the application part is not explained, and the focus is more on the functionality that SnapCenter Agent provides the following to the plug-in developers:
@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)が含まれます。ロガーを取得するには、final Logger logger=context.getLogger();を呼び出します。loggerオブジェクトは、logbackなど、他のロギングフレームワークで知られている同様のメソッドを提供します。結果オブジェクトでは、終了コードを指定することもできます。この例では問題がなかったため、0が返されます。その他の終了コードは、さまざまな障害シナリオにマッピングできます。
結果オブジェクトの使用
resultオブジェクトには、次のパラメータが含まれています。
パラメータ | デフォルト | 説明 |
---|---|---|
構成 |
構成が空です |
このパラメータを使用すると、設定パラメータをサーバに返送できます。プラグインで更新するパラメータを指定できます。この変更が SnapCenter サーバの構成に実際に反映されるかどうかは、設定の APP_CONF_PERSISTENCE = Y または N パラメータに依存します。 |
終了コード |
0 |
処理のステータスを示します。「 0 」は、操作が正常に実行されたことを示します。その他の値はエラーまたは警告を示します。 |
標準出力 |
リストが空です |
これは、 stdout メッセージを SnapCenter サーバに返送するために使用できます。 |
標準エラー |
リストが空です |
このオプションを使用すると、 stderr メッセージを SnapCenter サーバに返送できます。 |
メッセージ |
リストが空です |
このリストには、プラグインがサーバーに返すすべてのメッセージが含まれています。SnapCenterサーバは、これらのメッセージを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サーバーにプラグインのバージョンを通知します。また、 result から継承されるため、 config 、 exitCode 、 stdout 、 stderr 、および messages パラメータが含まれます。
パラメータ | デフォルト | 説明 |
---|---|---|
メジャー |
0 |
プラグインのメジャーバージョンフィールド。 |
マイナー |
0 |
プラグインのマイナーバージョンフィールド。 |
パッチ |
0 |
プラグインのパッチバージョンフィールド。 |
構築 |
0 |
プラグインのビルドバージョンフィールド。 |
例:
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
コンテキストオブジェクトの使用
contextオブジェクトには、次のメソッドがあります。
コンテキストメソッド | 目的 |
---|---|
文字列 getWorkflowId(); |
現在のワークフローで SnapCenter サーバによって使用されているワークフロー ID を返します。 |
config getconfig(); |
SnapCenter サーバからエージェントに送信されている設定を返します。 |
ワークフローID
ワークフロー ID は、実行中の特定のワークフローを SnapCenter サーバが参照するために使用する ID です。
構成
このオブジェクトには、ユーザが SnapCenter サーバの設定で設定できるパラメータのほとんどが含まれます。ただし、セキュリティ上の理由から、これらのパラメータの一部はサーバ側でフィルタリングされる場合があります。次に、 Config にアクセスしてパラメータを取得する例を示します。
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
""//MyParameter"に、SnapCenterサーバ上のconfigから読み込まれたパラメータが含まれるようになりました。configパラメータキーが存在しない場合は、空の文字列("")を返します。
プラグインのエクスポート
SnapCenterホストにインストールするには、プラグインをエクスポートする必要があります。
Eclipseで次のタスクを実行します。
-
プラグインのベースパッケージを右クリックします(この例では com.netapp.snapcreator.agent.plugin.TutorialPlugin )。
-
「 * Export * → * Java * → * JAR File * 」を選択します
-
「 * 次へ * 」をクリックします。
-
次のウィンドウで、インストール先の jar ファイルのパスを指定します。 tutorial_plugin.jar プラグインのベースクラスは TutorialPlugin.class という名前で、同じ名前のフォルダにプラグインを追加する必要があります。
プラグインが他のライブラリに依存している場合は、次のフォルダを作成できます。lib/
プラグインが依存するjarファイル(データベースドライバなど)を追加できます。SnapCenter は、プラグインをロードすると、このフォルダ内のすべての jar ファイルを自動的に関連付けて、クラスパスに追加します。