Red Hat Training

A Red Hat training course is available for Red Hat Virtualization

C.2. Red Hat Virtualization 用户接口插件生命周期

C.2.1. Red Hat Virtualization 用户界面插件的生命周期

一个用户界面插件的基本生命周期可以被分为 3 个阶段:
  1. 插件发现(plug-in discovery)。
  2. 插件加载(plug-in loading)。
  3. 插件引导(plug-in bootstrapping)。

C.2.2. Red Hat Virtualization 用户界面插件的发现

创建插件的描述符(descriptor)是插件发现阶段的第一步。插件描述符包括了重要的插件元数据和默认的插件配置。
作为处理管理门户 HTML 页请求(HTTP GET)的一部分,用户界面插件系统会尝试从您的本地系统上发现并加载插件描述符。 对于每一个插件描述符,系统会尝试使用相应的插件用户配置来覆盖插件的默认配置,并调整插件运行时的行为。插件的用户配置是可选的。在插件描述符和用户额配置被加载后,oVirt 引擎会把所有的用户界面插件的数据进行综合,并把它们加入到管理门户的 HTML 页中。
在默认的情况下,插件的描述符位于 $ENGINE_USR/ui-plug-ins 中,ENGINE_USR=/usr/share/ovirt-engine 是 oVirt 引擎本地配置的默认值。插件的描述符需要符合 JSON 格式的规则,但它同时也支持 Java/C++ 语言的注释风格(/*//)。
在默认的情况下,插件的用户配置文件位于$ENGINE_ETC/ui-plug-ins 中,ENGINE_ETC=/etc/ovirt-engine 是 oVirt 引擎本地配置的默认值。插件的用户配置文件的格式规则和插件描述符的格式规则相同。

注意

插件的用户配置文件通常使用 <descriptorFileName>-config.json 的命名规则。

C.2.3. Red Hat Virtualization 用户界面插件加载

在一个插件被发现并被加入到管理门户的 HTML 页后,管理门户会把这个插件作为应用程序启动的一部分进行加载(除非您把它设置为不作为应用程序启动的一部分进行加载)。
当插件被发现后,管理门户会创建一个 HTML iframe 项来加载它的主页。插件的引导过程需要这个插件的主页(插件主页会在插件 iframe 项的环境中检查插件代码)。用户界面的插件系统支持本地文件系统提供的插件源文件(如插件的主页)。插件的主页被加载到 iframe 项中,它的代码会被检查。在代码检查完成后,插件使用插件 API 和管理门户进行交流。

C.2.4. Red Hat Virtualization 用户界面插件引导

一个典型的插件引导过程包括以下步骤:

过程 C.1. 插件引导过程

  1. 为插件获得 pluginApi 项
  2. 获得运行时的插件配置项(可选)
  3. 注册相关的 event handler 函数
  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();