Это документация VMmanager 6 для редакций Hosting и Infrastructure. Документация VMmanager для редакции ФСТЭК находится в разделе VMmanager 6 ФСТЭК.
Вы можете добавлять собственные настройки (трансформации) в XML-конфигурации виртуальных машин (ВМ). Подробнее об XML-конфигурации см. в документации Libvirt.
Трансформации могут быть применены к существующей ВМ или к конфигурации, из которой создаются ВМ.
Логика работы
Трансформации создаются на языке XSLT. Подробнее см. в документации XSLT. Созданная трансформация загружается в платформу и применяется к ВМ или конфигурации через API-запросы.
Для применения трансформации к ВМ в платформе создаётся задача Восстановление xml файла VM. После применения трансформации платформа перезагружает ВМ. Единовременно к каждой ВМ или конфигурации может быть применена только одна трансформация. При отключении трансформации XML-конфигурация возвращается к исходной.
Чтобы изменить или удалить трансформацию из платформы, предварительно её нужно отключить от ВМ или конфигурации.
Примеры трансформаций
Пример 1 - Базовый шаблон копирования
Шаблон копирует параметры узлов и ВМ без изменений и применяется в начале всех остальных транформаций.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>Пример 2 — Смена модели сетевого интерфейса
Шаблон позволяет заменить модель эмулируемой сетевой карты на e1000 во всех interface независимо от того, что выбрано в настройках ВМ.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Базовый шаблон копирования -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- Для каждого интерфейса: скопировать всё, кроме <model>, и подставить свой -->
<xsl:template match="interface">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::model)]"/>
<model type="e1000"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>Пример 3 — Передача дополнительных аргументов QEMU
Шаблон устанавливает размер физического блока для IDE-жесткого диска в 4096 байт.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- Добавляем qemu:commandline в конец domain и объявляем нужное пространство имён -->
<xsl:template match="domain">
<xsl:copy>
<xsl:attribute name="xmlns:qemu">http://libvirt.org/schemas/domain/qemu/1.0</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
<qemu:commandline>
<qemu:arg value="-global"/>
<qemu:arg value="ide-hd.physical_block_size=4096"/>
</qemu:commandline>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>Управление трансформациями
Загрузить трансформацию в платформу
Выполните запрос:
curl -X 'POST' \
'https://vm6.example.com/vm/v3/host_transformation' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"content": "<transformation_content>",
"name": "<transformation_name>"
}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;-
<transformation_content>— содержимое трансформации в формате XSLT;Специальные символы в трансформации (кавычки, обратные слэши, переводы строк и т.д.) должны быть экранированы в соответствии с форматом JSON.Пример <transformation_name>— имя трансформации.
При успешном добавлении ответ будет содержать id трансформации.
Получить список загруженных трансформаций
Выполните запрос:
curl -X 'GET' \
'https://vm6.example.com/vm/v3/host_transformation' \
-H 'accept: application/json'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой.
Запрос выводит только id и имена трансформаций, загруженных в платформу, без привязки к ВМ и конфигурациям.
Изменить трансформацию
Выполните запрос:
curl -X 'POST' \
'https://vm6.example.com/vm/v3/host_transformation/<id>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"content": "<transformation_content>",
"name": "<transformation_name>"
}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<id>— id трансформации;-
<transformation_content>— содержимое трансформации в формате XSLT;
Специальные символы в трансформации (кавычки, обратные слэши, переводы строк и т.д.) должны быть экранированы в соответствии с форматом JSON.Пример <transformation_name>— имя трансформации.
Удалить трансформацию
Выполните запрос:
curl -X 'DELETE' \
'https://vm6.example.com/vm/v3/host_transformation/<id>' \
-H 'accept: application/json'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<id>— id трансформации.
При успешном удалении ответ будет содержать id трансформации.
Применение трансформации к ВМ
Подключить трансформацию к ВМ
Выполните запрос:
curl -X 'POST' \
'https://vm6.example.com/vm/v3/host/<host_id>/transformation/<id>/apply' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<host_id>— id ВМ;<id>— id трансформации.
При успешном подключении ответ будет содержать id ВМ и созданной задачи.
Отключить трансформацию от ВМ
Выполните запрос:
curl -X 'DELETE' \
'https://vm6.example.com/vm/v3/host/<host_id>/transformation/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<host_id>— id ВМ.
Применение трансформации к конфигурации
Подключить трансформацию к конфигурации
Выполните запрос:
curl -X 'POST' \
'https://vm6.example.com/vm/v3/preset/<preset_id>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"transformation_id": <id>}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<preset_id>— id конфигурации;<id>— id трансформации.
Отключить трансформацию от конфигурации
Выполните запрос:
curl -X 'POST' \
'https://vm6.example.com/vm/v3/preset/<preset_id>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"transformation_id": null}'Пояснения:
vm6.example.com— IP-адрес или доменное имя сервера с платформой;<preset_id>— id конфигурации.