Модули пользовательского интерфейса
Модули пользовательского интерфейса
В системе виртуализации ROSA Virtualization существует поддержка модулей пользовательского интерфейса (модулей UI), что позволяет интегрировать Портал администрирования с другими системами. Каждый модуль UI представляет собой набор расширений UI, который можно поместить в пакет и распространять для использования в системе виртуализации.
Модули пользовательского интерфейса системы виртуализации ROSA Virtualization интегрируются в Портал администрирования напрямую на клиенте с помощью языка программирования JavaScript. Модули вызываются Порталом администрирования и выполняются во время выполнения JavaScript веб-браузера. Модули UI могут использовать язык JavaScript и его библиотеки.
Во время ключевых событий в течение времени их выполнения Портал администрирования вызывает отдельные модули с помощью функций обработки событий, представляющих собой обмен информацией между Порталом администрирования и модулем. Хотя Портал администрирования поддерживает множество функций обработки событий, модуль объявляет только те функции, которые представляют интерес для его реализации. Перед запуском в работу Порталом администрирования каждый модуль должен зарегистрировать соответствующие функции обработки событий как часть последовательности программы самозагрузки модуля.
Для облегчения обмена информацией между модулем UI и Порталом администрирования открывается доступ к API модуля как к глобальному (верхнего уровня) объекту pluginApi, который может быть поглощён отдельными модулями. Каждый модуль получает отдельный экземпляр pluginApi, давая возможность Порталу администрирования контролировать вызовы функций API этого модуля со стороны каждого отдельного модуля с учётом жизненного цикла модуля.
Жизненный цикл модуля пользовательского интерфейса
Этапы жизненного цикла модуля пользовательского интерфейса
Базовый жизненный цикл модуля пользовательского интерфейса разделён на следующие этапы:
- Обнаружение модуля UI.
- Загрузка модуля UI.
- Самонастройка модуля UI.
Обнаружение модуля пользовательского интерфейса
Создание дескрипторов модуля — это первый шаг в процессе обнаружения модуля UI. Дескрипторы модуля содержат важные метаданные модуля и возможные конфигурации модуля UI.
Как часть обработки запросов страницы HTML Портала администрирования (HTTP GET), инфраструктура модуля UI пытается обнаружить и загрузить дескрипторы из локальной файловой системы. Для каждого дескриптора инфраструктура также пытается загрузить соответствующие пользовательские конфигурации, используемые для переопределения параметров модуля по умолчанию (если такие есть) и настроить поведение модуля во время исполнения. Пользовательская конфигурация модуля является опциональной. После загрузки дескрипторов и соответствующих файлов пользовательских конфигураций oVirt Engine собирает данные модуля UI и встраивает их в страницу HTML Портала администрирования для оценки во время исполнения.
По умолчанию дескрипторы модуля расположены в $ENGINE_USR/ui-plug-ins с отображением по умолчанию на ENGINE_USR=/usr/share/ovirt-engine, что настроено в локальной конфигурации oVirt Engine. Ожидается, что дескрипторы модуля отвечают требованиям спецификаций формата JSON, но в дескрипторах разрешаются комментарии в стиле Java/C++ (/* и //) в качестве дополнения к спецификациям JSON.
По умолчанию пользовательские конфигурации модуля расположены в $ENGINE_ETC/ui-plug-ins с отображением по умолчанию на ENGINE_USR=/usr/share/ovirt-engine, что настроено в локальной конфигурации oVirt Engine. Ожидается, что пользовательские конфигурации модуля отвечают требованиям тех же спецификаций, что и дескрипторы.
Примечание — Конфигурационные файлы модуля обычно следуют соглашению о наименованиях
-config.json.
Загрузка модуля пользовательского интерфейса
После обнаружения и встраивания данных модуля UI в страницу HTML Портала администрирования осуществляется загрузка модуля в составе запуска приложения (если только для модуля не была отключена такая загрузка).
Для каждого обнаруженного модуля Портал администрирования создаёт элемент HTML iframe, используемый для загрузки страницы хоста модуля. Страница хоста модуля необходима для начала процесса самонастройки, используемого для оценки кода модуля в контексте элемента iframe этого модуля. Инфраструктура модуля UI поддерживает обслуживание файлов ресурсов модуля (например, страница хоста модуля) из локальной файловой системы. Страница хоста модуля загружается в элемент iframe, и происходит оценка кода модуля. После оценки кода модуль UI обменивается информацией с Порталом администрирования с помощью API.
Самонастройка модуля пользовательского интерфейса
Процесс самонастройки модуля UI состоит из последовательного выполнения следующих шагов:
- Получите экземпляр pluginApi для указанного модуля.
- Опционально получите объект конфигурации модуля времени выполнения.
- Зарегистрируйте функции соответствующего обработчика событий.
- Сообщите инфраструктуре модуля UI, что можно инициализировать модуль.
Примечание — Следующий отрывок кода демонстрирует процесс самонастройки модуля 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();
Файлы модуля пользовательского интерфейса
В таблице 85 описываются файлы модуля UI, а также указывается расположение этих файлов в системе.
Пример развёртывания модуля пользовательского интерфейса
В следующей пошаговой инструкции описывается процесс создания модуля UI, запускающего программу "Hello World!" при выполнении входа в систему на Портале администрирования виртуализированного ЦУ.
Для развёртывания модуля "Hello World!":
- Создайте следующий дескриптор модуля в виде файла /usr/share/ovirt-engine/ui-plugins/helloWorld.json в виртуализированном ЦУ:
{
"name": "HelloWorld",
"url": "/ovirt-engine/webadmin/plugin/HelloWorld/start.html",
"resourcePath": "hello-files"
}
- Создайте следующую страницу хоста модуля в виде файла /usr/share/ovirt-engine/ui-plugins/hello-files/start.html в виртуализированном ЦУ:
<!DOCTYPE html><html><head>
<script>
var api = parent.pluginApi('HelloWorld');
api.register({
UiInit: function() { window.alert('Hello world'); }
});
api.ready();
</script>
</head><body></body></html>
В случае успешной реализации модуля "Hello World!" следующая заставка (рисунок 190) появится при выполнении входа в систему на Портале администрирования виртуализированного ЦУ.

Рисунок 190 ‒ Заставка модуля "Hello World!"