VMmanager
Режим фокусировки

Изменение XML-конфигураций ВМ

Это документация VMmanager 6 для редакций Hosting и Infrastructure. Документация VMmanager для редакции ФСТЭК находится в разделе VMmanager 6 ФСТЭК.

Вы можете добавлять собственные настройки (трансформации) в XML-конфигурации виртуальных машин (ВМ). Подробнее об XML-конфигурации см. в документации Libvirt.

Трансформации могут быть применены к существующей ВМ или к конфигурации, из которой создаются ВМ.

В текущей версии платформы изменение XML-конфигураций доступно только через API. 

Логика работы

Изменение XML-конфигурации — потенциально опасное действие и может привести к потере управления ВМ через платформу. Рекомендуем проверять вносимые изменения на тестовых ВМ.

Трансформации создаются на языке 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 байт.

Передача дополнительных параметров QEMU
<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 конфигурации.