Java スタイル
Java カスタムプラグインは、データベースやインスタンスなどのアプリケーションと直接対話します。
制限
Java プログラミング言語を使用してプラグインを開発する場合は、一定の制限事項に注意する必要があります。
プラグインの特性 | Java プラグイン |
---|---|
複雑さ |
低 ~ 中 |
メモリフットプリント |
最大 10 ~ 20 MB |
他のライブラリとの依存関係 |
アプリケーション通信用ライブラリ |
スレッド数 |
1. |
スレッドランタイム |
1 時間未満 |
Java の制限の理由
SnapCenter エージェントの目標は、継続的、安全、堅牢なアプリケーション統合を実現することです。Java プラグインをサポートすることで、プラグインがメモリリークなどの不要な問題をもたらす可能性があります。これらの課題に取り組むことは困難です。特に、使いやすいものを維持することが目的である場合には困難です。プラグインの複雑さがそれほど複雑でない場合は、開発者がエラーを発生させてしまう可能性ははるかに低くなります。Javaプラグインの危険性は、プラグインがあることです SnapCenterエージェント自体と同じJVM内で実行されています。プラグインがクラッシュしたりメモリがリークしたりすると、 Agent に悪影響を与える可能性もあります。
サポートされている方法
メソッド | 必須 | 説明 | いつ、誰が電話をかけましたか? |
---|---|---|---|
バージョン |
はい。 |
プラグインのバージョンを返す必要があります。 |
のバージョンを要求するSnapCenterサーバまたはエージェント プラグイン。 |
休止 |
はい。 |
アプリケーションで休止を実行する必要があります。ほとんどの場合、この状態になると、 SnapCenter サーバでバックアップ( Snapshot コピーなど)を作成できるようになります。 |
SnapCenterサーバがSnapshotコピーまたはを作成する前に 一般的なバックアップを実行します。 |
休止解除 |
はい。 |
アプリケーションに対して休止解除を実行する必要があります。ほとんどの場合、これ アプリケーションを通常の動作状態に戻すことを意味します。 |
SnapCenterサーバがSnapshotコピーまたはを作成したあと 一般的にバックアップを実行しました。 |
クリーンアップ |
いいえ |
プラグインがクリーンアップする必要があるすべての項目をクリーンアップする責任があります。 |
SnapCenter サーバでワークフローが完了したとき(正常終了したとき、または障害が発生したとき)。 |
clonePre- |
いいえ |
クローニング処理を実行する前に、必要な処理を実行する必要があります。 |
ユーザが「 cloneVol 」または「 cloneLun 」アクションをトリガーし、組み込みのクローニングウィザード( GUI / CLI )を使用する場合。 |
clonePost を実行します |
いいえ |
クローニング処理の実行後に必要な処理を実行する必要があります。 |
ユーザが「 cloneVol 」または「 cloneLun 」アクションをトリガーし、組み込みのクローニングウィザード( GUI / CLI )を使用する場合。 |
restorePre |
いいえ |
は、リストア処理が呼び出される前に実行する必要がある操作を実行します。 |
ユーザがリストア処理をトリガーした場合。 |
リストア |
いいえ |
アプリケーションのリストア / リカバリを実行します。 |
ユーザがリストア処理をトリガーした場合。 |
AppVersion (アプリバージョン) |
いいえ |
プラグインによって管理されているアプリケーションバージョンを取得する。 |
バックアップ / リストア / クローンなど、すべてのワークフローで ASUP データ収集の一部として実行 |
チュートリアル
このセクションでは、 Java プログラミング言語を使用してカスタムプラグインを作成する方法について説明します。
Eclipse のセットアップ
-
Eclipse で新しい Java プロジェクト「 TutorialPlugin 」を作成します
-
[ 完了 ] をクリックします。
-
新しいプロジェクト * → * プロパティ * → * Java ビルドパス * → * ライブラリ * → * 外部 JAR の追加 * を右クリックします
-
ホスト・エージェントの ./lib/folder に移動し 'jar 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 プラグインを実装するには、休止、休止解除、およびバージョンの各必須メソッドが必要です。
以下は、プラグインのバージョンを返すバージョンメソッドです。
@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 オブジェクトで渡されます。これには、ロガーとコンテキストストアなどの複数のヘルパーと、現在の操作に関する情報(ワークフロー ID 、ジョブ ID )が含まれます。ロガーは、最終ロガーロガー = context.getLogger(); を呼び出すことで取得できます。logger オブジェクトは、 logback などの他のロギングフレームワークで知られている同様のメソッドを提供します。結果オブジェクトでは、終了コードを指定することもできます。この例では、問題が存在しないため 0 が返されます。その他の終了コードは、さまざまな障害シナリオに対応する場合があります。
結果オブジェクトを使用します
result オブジェクトには、次のパラメータが含まれます。
パラメータ | デフォルト | 説明 |
---|---|---|
構成 |
空です 構成 |
このパラメータを使用すると、設定パラメータをサーバに返送できます。それは には、プラグインで更新するパラメータを指定できます。この変化がそうであるかどうか SnapCenterサーバの設定に実際に反映されるのは、に依存します CONFIGのAPP_CONF_PERSISTENCY = YまたはNパラメータ。 |
イキシコード |
0 |
処理のステータスを示します。「0」は、操作が行われたことを示します が実行されました。その他の値は、エラーまたは警告を示します。 |
標準出力 |
空です リスト |
これは、stdoutメッセージをSnapCenterに送信するために使用できます サーバ: |
stderr |
空です リスト |
これは、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 サーバにプラグインのバージョンを通知します。それはまた継承します 結果から、config、exitCode、stdout、stderr、およびmessagesパラメータが含まれます。
パラメータ | デフォルト | 説明 |
---|---|---|
メジャー( Major ) |
0 |
プラグインのメジャーバージョンフィールド。 |
マイナー |
0 |
プラグインのマイナーバージョンフィールド。 |
パッチ |
0 |
プラグインの PATCH version フィールド。 |
構築 |
0 |
プラグインのビルドバージョンフィールド。 |
例:
VersionResult result = VersionResult.builder() .withMajor(1) .withMinor(0) .withPatch(0) .withBuild(0) .build();
コンテキストオブジェクトの使用
コンテキストオブジェクトには、次のメソッドがあります。
コンテキストメソッド | 目的 |
---|---|
文字列 getWorkflowId(); |
にSnapCenterサーバで使用されているワークフローIDを返します 現在のワークフロー。 |
Config GetConfig (); |
SnapCenterサーバからに送信中の設定を返します 捜査官 |
ワークフロー ID
ワークフローIDは、SnapCenterサーバが特定の実行を参照するために使用するIDです ワークフロー:
構成
このオブジェクトには、の設定でユーザが設定できるパラメータのほとんどが含まれています SnapCenterサーバ。ただし、セキュリティ上の理由により、これらのパラメータの一部が取得される可能性があります サーバー側でフィルタリングされます。次に、Config and Retrieveにアクセスする例を示します パラメータ:
final Config config = context.getConfig(); String myParameter = config.getParameter("PLUGIN_MANDATORY_PARAMETER");
"//MyParameter"には、SnapCenterサーバの設定から読み取ったパラメータが含まれるようになりました 設定パラメータキーが存在しない場合は、空の文字列("")を返します。
プラグインのエクスポート
SnapCenter ホストにインストールするには、プラグインをエクスポートする必要があります。
Eclipse では、次のタスクを実行します。
-
プラグインの基本パッケージを右クリックします(この例では com.netapp.snapcreator.agent.plugin.TutorialPluginを参照)。
-
「 * Export * → * Java * → * JAR File * 」を選択します
-
「 * 次へ * 」をクリックします。
-
次のウィンドウで、jarファイルの保存先パスtutorial_plugin.jarを指定します プラグインの基本クラスはTutorialPlugin.classという名前で、プラグインをフォルダに追加する必要があります 同じ名前で
プラグインが追加のライブラリに依存している場合は、 lib/ というフォルダを作成できます
jar ファイルを追加できます。このプラグインは従属ファイルに依存します(たとえば、データベース・ドライバ)。いつ SnapCenterはプラグインをロードし、このフォルダ内のすべてのjarファイルをとに自動的に関連付けます クラスパスに追加します。