C.2. Red Hat Virtualization ユーザーインターフェイスプラグインのライフサイクル
ユーザーインターフェイスプラグインの基本的なライフサイクルは、3 つのステージに分けられます。
- プラグインの検出。
- プラグインの読み込み。
- プラグインのブートストラップ。
C.2.1. Red Hat Virtualization ユーザーインターフェイスプラグインの検出
プラグイン記述子の作成は、プラグイン検出プロセスの最初のステップです。プラグイン記述子には、重要なプラグインメタデータと、オプションでデフォルトのプラグイン固有の設定が含まれています。
管理ポータルの HTML ページ要求 (HTTP GET
) の処理の一部として、ユーザーインターフェイスプラグインインフラストラクチャーは、ローカルファイルシステムからプラグイン記述子を検出してロードしようとします。インフラストラクチャーは、プラグイン記述子ごとにデフォルトプラグイン固有の設定 (存在する場合) をオーバーライドし、それに対応する、プラグイン実行時の動作を微調整するために使用されるプラグインユーザー設定もロードしようとします。プラグインのユーザー設定は任意です。記述子と対応するユーザー設定ファイルをロードした後、oVirt Engine はユーザーインターフェイスプラグインデータを集約し、ランタイム評価のために管理ポータルの HTML ページに埋め込みます。
デフォルトでは、プラグイン記述子は $ENGINE_USR/ui-plug-ins にあり、oVirt Engine ローカル設定で定義されている ENGINE_USR=/usr/share/ovirt-engine のデフォルトマッピングがあります。プラグイン記述子は JSON 形式の仕様に準拠することが期待されていますが、プラグイン記述子では、JSON 形式の仕様に加えて (/*
と //
の両方の) Java/C++ スタイルのコメントを使用できます。
デフォルトでは、プラグインユーザー設定ファイルは $ENGINE_ETC/ui-plug-ins にあり、oVirt Engine ローカル設定で定義されている ENGINE_ETC=/etc/ovirt-engine のデフォルトマッピングがあります。プラグインのユーザー設定ファイルは、プラグイン記述子と同じコンテンツ形式の規則に準拠する必要があります。
プラグインのユーザー設定ファイルは、通常、<descriptorFileName>-config.json の命名規則に従います。
C.2.2. Red Hat Virtualization ユーザーインターフェイスプラグインのロード
プラグインが検出され、そのデータが管理ポータルの HTML ページに埋め込まれた後、管理ポータルは、アプリケーションの起動の一部としてプラグインを読み込もうとします (アプリケーションの起動の一部として読み込まれないように設定した場合を除く)。
検出されたプラグインごとに、管理ポータルはホストページの読み込みに使用される HTML iframe 要素を作成します。プラグインホストページは、プラグインブートストラッププロセスを開始するために必要です。このプロセス (ブートストラッププロセス) は、プラグインの iframe 要素のコンテキストでプラグインコードを評価するために使用されます。ユーザーインターフェイスプラグインインフラストラクチャーは、ローカルファイルシステムからのプラグインリソースファイル (プラグインホストページなど) の提供をサポートします。プラグインホストページが iframe 要素に読み込まれ、プラグインコードが評価されます。プラグインコードが評価された後、プラグインはプラグイン API を使用して管理ポータルと通信します。
C.2.3. Red Hat Virtualization ユーザーインターフェイスプラグインのブートストラップ
一般的なプラグインブートストラップシーケンスは、次の手順で設定されます。
プラグインブートストラップシーケンス
- 指定されたプラグインの pluginApi インスタンスを取得します。
- ランタイムプラグイン設定オブジェクトを取得します (オプション)。
- 関連するイベントハンドラー関数を登録します。
- 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();