C.2. Red Hat Virtualization ユーザーインターフェースプラグインのライフサイクル

C.2.1. Red Hat Virtualization ユーザーインターフェースプラグインのライフサイクル

ユーザーインターフェースプラグインの基本ライフサイクルは次の 3 つの段階に分かれます。

  • プラグインの検出
  • プラグインの読み込み
  • プラグインのブートストラッピング

C.2.2. Red Hat Virtualization ユーザーインターフェースプラグインの検出

プラグインの検出プロセスの第 1 ステップは、プラグイン記述子の作成です。プラグイン記述子には重要なプラグインメタデータとオプションのデフォルトプラグイン固有の設定が含まれます。

管理ポータルの HTML ページ要求 (HTTP GET) 処理の一環として、ユーザーインターフェースプラグインのインフラストラクチャーは、ローカルファイルシステムからプラグイン記述子の検出と読み込みを試みます。各プラグイン記述子に対して、インフラストラクチャーは、デフォルトのプラグイン固有設定 (存在する場合) を上書きして、プラグインのランタイムの振る舞いを修正するのに使用される、対応するプラグインユーザー設定の読み込みも試みます。プラグインユーザー設定はオプションです。記述子および対応するユーザー設定ファイルを読み込んだ後には、oVirt Engine がユーザーインターフェースプラグインのデータを集約し、ランタイム評価のために管理ポータルの HTML ページに埋め込みます。

デフォルトでは、プラグインの記述子は $ENGINE_USR/ui-plug-ins に保管されており、デフォルトマッピングは oVirt Engine のローカル設定で定義されている ENGINE_USR=/usr/share/ovirt-engine です。プラグイン記述子は JSON 形式の仕様に準拠する必要がありますが、これに加えて、Java/C++ 形式のコメント (/*// の両種) も可能です。

デフォルトでは、プラグインユーザー設定ファイルは $ENGINE_ETC/ui-plug-ins に保管されており、デフォルトのマッピングは oVirt Engine のローカル設定で定義されている ENGINE_ETC=/etc/ovirt-engine です。プラグインユーザー設定ファイルは、プラグイン記述子と同じコンテンツ形式のルールを順守する必要があります。

注記

プラグインユーザー設定ファイルは、通常、<descriptorFileName>-config.json 命名規則に従います。

C.2.3. Red Hat Virtualization ユーザーインターフェースプラグインの読み込み

プラグインが検出され、そのデータが管理ポータルの HTML ページに埋め込まれた後に、管理ポータルはアプリケーション起動の一環としてそのプラグインの読み込みを試みます (アプリケーションの起動の一環として読み込まないように設定している場合を除く)。

管理ポータルは、検出されたプラグインごとに、そのホストページを読み込むのに使用する HTML iframe 要素を作成します。プラグインのホストページは、プラグインのブートストラッププロセスを開始するのに不可欠です。ブートストラッププロセスは、プラグインの iframe 要素に照らしてプラグインコードを評価するのに使用されます。ユーザーインターフェースプラグインのインフラストラクチャーは、ローカルシステムからサービスを提供するプラグインリソースファイル (例: プラグインのホストページ) をサポートします。プラグインのホストページは iframe 要素の中に読み込まれ、プラグインコードが評価されます。プラグインコードが評価された後、プラグインは、プラグイン API を使用して管理ポータルと通信を行います。

C.2.4. Red Hat Virtualization ユーザーインターフェースプラグインのブートストラッピング

標準的なプラグインブートストラップシーケンスは以下のような手順で構成されます。

プラグインブートストラップシーケンス

  1. 指定されたプラグインの pluginApi インスタンスの取得
  2. ランタイムプラグイン設定オブジェクトの取得 (オプション)
  3. 関連するイベントハンドラー関数の登録
  4. UI のプラグインインフラストラクチャーにプラグインの初期化を開始するように通知

以下のコードスニペットは、上述の手順を実例として示しています。

// Access plug-in API using 'parent' due to this code being evaluated within the context of an iframe element.
// As 'parent.pluginApi' is subject to Same-Origin Policy, this will only work when WebAdmin HTML page and plug-in
// host page are served from same origin. WebAdmin HTML page and plug-in host page will always be on same origin
// when using UI plug-in infrastructure support to serve plug-in resource files.
var api = parent.pluginApi('MyPlugin');

// Runtime configuration object associated with the plug-in (or an empty object).
var config = api.configObject();

// Register event handler function(s) for later invocation by UI plug-in infrastructure.
api.register({
	    // UiInit event handler function.
		UiInit: function() {
				// Handle UiInit event.
					window.alert('Favorite music band is ' + config.band);
					    }
});

// Notify UI plug-in infrastructure to proceed with plug-in initialization.
api.ready();