Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Примеры использования REST API

Примеры в этом разделе показывают, как использовать REST API для настройки базовой среды zVirt и создания виртуальной машины. В дополнение к стандартным предварительным требованиям для этих примеров требуется следующее:

  • Установленная и настроенная среда zVirt, имеющая доступ к сети.

  • Файл ISO, содержащий операционную систему виртуальной машины, которую вы хотите установить. В этой главе в качестве примера установки ISO используется CentOS 7.

В примерах используется curl для демонстрации запросов API с помощью клиентского приложения. Вы можете использовать любое приложение, которое отправляет HTTP-запросы.

Заголовки HTTP-запросов в этом примере опускают заголовки Host и Authorization. Однако эти поля являются обязательными и требуют данных, специфичных для вашей установки zVirt.

В curl примерах используется имя пользователя api-user@internalsso, пароль mypassword, расположение сертификата /etc/pki/ovirt-engine/ca.pem и имя хоста myengine.example.com. Вы должны заменить их правильными значениями для вашей среды.

zVirt генерирует уникальный идентификатор атрибута id для каждого ресурса. Идентификационные коды в этом примере будут отличаться от идентификационных кодов в вашей среде zVirt.

Во многих примерах некоторые атрибуты результатов, возвращаемых API, для краткости опущены.

1. Доступ к точке входа API

Следующий запрос извлекает представление основной точки входа для API версии 4:

GET /ovirt-engine/api HTTP/1.1
Version: 4
Accept: application/xml

Тот же запрос, но с использованием префикса URL /v4 вместо заголовка Version:

GET /ovirt-engine/api/v4 HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
--user 'api-user@internalsso:mypassword' \
https://myengine.example.com/ovirt-engine/api

Результатом является объект типа Api:

<api>
    <link href="/ovirt-engine/api/clusters" rel="clusters"/>
    <link href="/ovirt-engine/api/clusters?search={query}" rel="clusters/search"/>
    ...
    <product_info>
        <instance_id>6fdd60c6-fdfd-11ed-94ee-00163e232a46</instance_id>
        <name>zVirt Engine</name>
        <version>
            <build>9</build>
            <full_version>4.4.9.5-1.1587.zvirt.el7</full_version>
            <major>4</major>
            <minor>4</minor>
            <revision>0</revision>
        </version>
    </product_info>
    <special_objects>
        <blank_template href="..." id="..."/>
        <root_tag href="..." id="..."/>
    </special_objects>
    <summary>
        <hosts>
            <active>3</active>
            <total>3</total>
        </hosts>
        <storage_domains>
            <active>2</active>
            <total>3</total>
        </storage_domains>
        <users>
            <active>2</active>
            <total>2</total>
        </users>
        <vms>
            <active>1</active>
            <total>1</total>
        </vms>
    </summary>
    <time>2023-06-02T18:09:00.587+03:00</time>
    ...
</api>

Если не используются ни заголовок, ни префикс URL, сервер автоматически выберет версию. Версия по умолчанию - 4. Вы можете изменить версию по умолчанию с помощью параметра конфигурации ENGINE_API_DEFAULT_VERSION:

echo "ENGINE_API_DEFAULT_VERSION=3" > \
/etc/ovirt-engine/engine.conf.d/99-set-default-version.conf

systemctl restart ovirt-engine

Изменение этого параметра влияет на всех пользователей API, не указывающих версию явно.

Точка входа предоставляет пользователю ссылки (link) на коллекции в среде виртуализации. Атрибут rel каждой ссылки на коллекцию предоставляет контрольную точку для каждой ссылки. На следующем шаге в этом примере исследуется коллекция центра данных, доступная по ссылке datacenters.

Точка входа также содержит другие данные, такие как product_info, special_objects и summary.

2. Список центров данных

zVirt при установке создает центр данных Default. В этом примере центр данных Default используется в качестве основы для виртуальной среды.

Следующий запрос извлекает представление центров данных:

GET /ovirt-engine/api/datacenters HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
--user 'api-user@internalsso:mypassword' \
https://myengine.example.com/ovirt-engine/api/datacenters

Результатом будет список объектов типа DataCenter:

<data_centers>
    <data_center href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46" id="6e1b9a78-fdfd-11ed-afe5-00163e232a46">
        <actions>
            <link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/setmaster" rel="setmaster"/>
            <link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/cleanfinishedtasks" rel="cleanfinishedtasks"/>
        </actions>
        <name>Default</name>
        <description>The default Data Center</description>
        <link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/storagedomains" rel="storagedomains"/>
        <link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/permissions" rel="permissions"/>
        <link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/clusters" rel="clusters"/>
        ...
        <local>false</local>
        <quota_mode>disabled</quota_mode>
        <status>up</status>
        <storage_format>v5</storage_format>
        <supported_versions>
            <version>
                <major>4</major>
                <minor>6</minor>
            </version>
        </supported_versions>
        <version>
            <major>4</major>
            <minor>6</minor>
        </version>
    </data_center>
</data_centers>

Обратите внимание на id вашего центра данных Default. Он идентифицирует этот центр данных по отношению к другим ресурсам вашей виртуальной среды.

Центр данных также содержит ссылку на сервис AttachedStorageDomains, который управляет доменами хранения, подключенными к центру данных:

<link href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46/storagedomains" rel="storagedomains"/>

Этот сервис используется для присоединения доменов хранения из основной коллекции storagedomains, что будет рассмотрено в этом примере позже.

3. Получение списка кластеров

zVirt при установке создает кластер Default. В этом примере кластер Default используется для группировки ресурсов в среде zVirt.

Следующий запрос извлекает представление коллекции кластеров:

GET /ovirt-engine/api/clusters HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
--user 'api-user@internalsso:mypassword' \
https://myengine.example.com/ovirt-engine/api/clusters

Результатом будет список объектов типа Cluster:

<clusters>
    <cluster href="/ovirt-engine/api/clusters/6e1d0a3e-fdfd-11ed-ad51-00163e232a46" id="6e1d0a3e-fdfd-11ed-ad51-00163e232a46">
        <name>Default</name>
        <description>The default server cluster</description>
        <comment></comment>
        <link href="/ovirt-engine/api/clusters/6e1d0a3e-fdfd-11ed-ad51-00163e232a46/permissions" rel="permissions"/>
        <link href="/ovirt-engine/api/clusters/6e1d0a3e-fdfd-11ed-ad51-00163e232a46/networks" rel="networks"/>
        ...
        <cpu>
            <architecture>x86_64</architecture>
            <type>Intel Icelake Server Family</type>
        </cpu>
        <version>
            <major>4</major>
            <minor>6</minor>
        </version>
        <virt_service>true</virt_service>
        <data_center href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46" id="6e1b9a78-fdfd-11ed-afe5-00163e232a46"/>
    </cluster>
</clusters>

Обратите внимание на id своего кластера Default. Он идентифицирует этот кластер по отношению к другим ресурсам вашей виртуальной среды.

Кластер Default ассоциируется с центрами данных Default посредством связи с использованием атрибутов id и href ссылки data_center:

<data_center href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46" id="6e1b9a78-fdfd-11ed-afe5-00163e232a46"/>

Ссылка networks — это ссылка на сервис DataCenterNetworks, которая управляет сетями, связанными с этим кластером. В следующем разделе коллекция сетей рассматривается более подробно.

4. Список логических сетей

zVirt при установке по умолчанию создает сеть ovirtmgmt. Эта сеть действует как сеть управления Менеджера управления для доступа к хостам.

Эта сеть связана с кластером Default и входит в состав центра данных Default. В этом примере сеть ovirtmgmt используется для подключения виртуальных машин.

Следующий запрос извлекает список логических сетей:

GET /ovirt-engine/api/networks HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
--user 'api-user@internalsso:mypassword' \
https://myengine.example.com/ovirt-engine/api/networks

Результатом будет список объектов типа Network:

<networks>
    <network href="/ovirt-engine/api/networks/00000000-0000-0000-0000-000000000009" id="00000000-0000-0000-0000-000000000009">
        <name>ovirtmgmt</name>
        <description>Management Network</description>
        <comment></comment>
        <link href="/ovirt-engine/api/networks/00000000-0000-0000-0000-000000000009/permissions" rel="permissions"/>
        <link href="/ovirt-engine/api/networks/00000000-0000-0000-0000-000000000009/vnicprofiles" rel="vnicprofiles"/>
        <link href="/ovirt-engine/api/networks/00000000-0000-0000-0000-000000000009/networklabels" rel="networklabels"/>
        <mtu>0</mtu>
        <port_isolation>false</port_isolation>
        <stp>false</stp>
        <usages>
            <usage>vm</usage>
        </usages>
        <vdsm_name>ovirtmgmt</vdsm_name>
        <data_center href="/ovirt-engine/api/datacenters/6e1b9a78-fdfd-11ed-afe5-00163e232a46" id="6e1b9a78-fdfd-11ed-afe5-00163e232a46"/>
    </network>
</networks>

Сеть ovirtmgmt подключена к центру данных Default через связь, использующую id центра данных.

Сеть ovirtmgmt также подключена к кластеру Default посредством связи в подколлекции сетей кластера.

5. Список хостов

В этом примере извлекается список хостов и отображается хост с именем host1-kf, зарегистрированным в среде виртуализации:

GET /ovirt-engine/api/hosts HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
--user 'api-user@internalsso:mypassword' \
https://myengine.example.com/ovirt-engine/api/hosts

Результатом будет список объектов типа Host:

<hosts>
    <host href="/ovirt-engine/api/hosts/5650f5c0-6c01-4967-bce0-76465be8fbf1" id="5650f5c0-6c01-4967-bce0-76465be8fbf1">
        <name>host1-kf</name>
        <comment></comment>
        <link href="/ovirt-engine/api/hosts/5650f5c0-6c01-4967-bce0-76465be8fbf1/nics" rel="nics"/>
        ...
        <address>host1-kf</address>
        <cpu>
            <name>Intel Xeon Processor (Icelake)</name>
            <speed>3000</speed>
            <topology>
                <cores>1</cores>
                <sockets>6</sockets>
                <threads>1</threads>
            </topology>
            <type>Intel Icelake Server Family</type>
        </cpu>
        <memory>16777216000</memory>
        <os>
            <type>RHEL</type>
            <version>
                <build>2</build>
                <full_version>7.3.2 - 40.el7</full_version>
                <major>7</major>
                <minor>3</minor>
            </version>
        </os>
        <port>54321</port>
        <status>up</status>
        <cluster href="/ovirt-engine/api/clusters/6e1d0a3e-fdfd-11ed-ad51-00163e232a46" id="6e1d0a3e-fdfd-11ed-ad51-00163e232a46"/>
    </host>
</hosts>

Обратите внимание на id вашего хоста. Он идентифицирует этот хост по отношению к другим ресурсам вашей виртуальной среды.

Этот хост является членом кластера Default, а доступная подколлекция nics показывает, что этот хост подключен к сети ovirtmgmt.

6. Создание домена хранения данных на базе NFS

Домен хранения данных на базе NFS — это экспортированный общий ресурс NFS, подключенный к центру данных и предоставляющий хранилище для виртуализированных гостевых образов. Для создания нового домена хранения требуется запрос POST, содержащий представление домена хранения, отправленный по URL-адресу коллекции доменов хранения.

Вы можете включить опцию очистки после удаления по умолчанию в домене хранения. Чтобы настроить это, укажите wipe_after_delete в запросе POST. Этот параметр можно изменить после создания домена, но это не изменит свойства очистки после удаления уже существующих дисков.

Запрос должен быть таким:

POST /ovirt-engine/api/storagedomains HTTP/1.1
Accept: application/xml
Content-type: application/xml

А тело запроса должно выглядеть следующим образом:

<storage_domain>
  <name>mydata</name>
  <type>data</type>
  <description>My data</description>
  <storage>
    <type>nfs</type>
    <address>mynfs.example.com</address>
    <path>/exports/mydata</path>
  </storage>
  <host>
    <name>myhost</name>
  </host>
</storage_domain>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<storage_domain>
  <name>mydata</name>
  <description>My data</description>
  <type>data</type>
  <storage>
    <type>nfs</type>
    <address>mynfs.example.com</address>
    <path>/exports/mydata</path>
  </storage>
  <host>
    <name>myhost</name>
  </host>
</storage_domain>
' \
https://myengine.example.com/ovirt-engine/api/storagedomains

Сервер использует хост myhost для создания домена хранения данных типа NFS mydata с именем пути экспорта mynfs.example.com:/exports/mydata. API также возвращает следующее представление только что созданного ресурса домена хранения типа StorageDomain:

<storage_domain href="/ovirt-engine/api/storagedomains/005" id="005">
  <name>mydata</name>
  <description>My data</description>
  <available>42949672960</available>
  <committed>0</committed>
  <master>false</master>
  <status>unattached</status>
  <storage>
    <address>mynfs.example.com</address>
    <path>/exports/mydata</path>
    <type>nfs</type>
  </storage>
  <storage_format>v5</storage_format>
  <type>data</type>
  <used>9663676416</used>
</storage_domain>

7. Создание домена ISO на базе NFS

Домен ISO на базе NFS — это смонтированная общая папка NFS, подключенная к центру данных и обеспечивающая хранилище для DVD/CD-ROM ISO и файлов образов виртуальных гибких дисков (VFD). Для создания нового домена хранения требуется запрос POST с включенным представлением домена хранения, отправленный по URL-адресу коллекции доменов хранения:

Запрос должен быть таким:

POST /ovirt-engine/api/storagedomains HTTP/1.1
Accept: application/xml
Content-type: application/xml

А тело запроса должно выглядеть следующим образом:

<storage_domain>
  <name>myisos</name>
  <description>My ISOs</description>
  <type>iso</type>
  <storage>
    <type>nfs</type>
    <address>mynfs.example.com</address>
    <path>/exports/myisos</path>
  </storage>
  <host>
    <name>myhost</name>
  </host>
</storage_domain>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<storage_domain>
  <name>myisos</name>
  <description>My ISOs</description>
  <type>iso</type>
  <storage>
    <type>nfs</type>
    <address>mynfs.example.com</address>
    <path>/exports/myisos</path>
  </storage>
  <host>
    <name>myhost</name>
  </host>
</storage_domain>
' \
https://myengine.example.com/ovirt-engine/api/storagedomains

Сервер использует хост myhost для создания домена ISO на базе NFS, который называется myisos c путем экспорта mynfs.example.com:/exports/myisos. API также возвращает следующее представление только что созданного ресурса домена хранения типа StorageDomain:

<storage_domain href="/ovirt-engine/api/storagedomains/006" id="006">
  <name>myiso</name>
  <description>My ISOs</description>
  <available>42949672960</available>
  <committed>0</committed>
  <master>false</master>
  <status>unattached</status>
  <storage>
    <address>mynfs.example.com</address>
    <path>/exports/myisos</path>
    <type>nfs</type>
  </storage>
  <storage_format>v5</storage_format>
  <type>iso</type>
  <used>9663676416</used>
</storage_domain>

8. Прикрепление доменов хранения к центру данных

В следующем примере домены хранения mydata и myisos подключаются к центру данных Default.

Чтобы подключить домен хранения данных mydata, отправьте запрос следующего вида:

POST /ovirt-engine/api/datacenters/001/storagedomains HTTP/1.1
Accept: application/xml
Content-type: application/xml

С таким телом запроса:

<storage_domain>
  <name>mydata</name>
</storage_domain>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<storage_domain>
  <name>mydata</name>
</storage_domain>
' \
https://myengine.example.com/ovirt-engine/api/datacenters/001/storagedomains

Чтобы подключить домен ISO myisos, отправьте запрос следующего вида:

POST /ovirt-engine/api/datacenters/001/storagedomains HTTP/1.1
Accept: application/xml
Content-type: application/xml

С таким телом запроса:

<storage_domain>
  <name>myisos</name>
</storage_domain>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<storage_domain>
  <name>myisos</name>
</storage_domain>
' \
https://myengine.example.com/ovirt-engine/api/datacenters/001/storagedomains

9. Создание виртуальной машины

В следующем примере в кластере Default на основе шаблона Blank создается виртуальная машина с именем myvm. Запрос также определяет память виртуальной машины в размере 512 МБ и устанавливает в качестве загрузочного устройства виртуальный жесткий диск.

Запрос должен содержать объект типа Vm, описывающий создаваемую виртуальную машину:

POST /ovirt-engine/api/vms HTTP/1.1
Accept: application/xml
Content-type: application/xml

Тело запроса должно выглядеть следующим образом:

<vm>
  <name>myvm</name>
  <description>My VM</description>
  <cluster>
    <name>Default</name>
  </cluster>
  <template>
    <name>Blank</name>
  </template>
  <memory>536870912</memory>
  <os>
    <boot>
      <devices>
        <device>hd</device>
      </devices>
    </boot>
  </os>
</vm>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<vm>
  <name>myvm</name>
  <description>My VM</description>
  <cluster>
    <name>Default</name>
  </cluster>
  <template>
    <name>Blank</name>
  </template>
  <memory>536870912</memory>
  <os>
    <boot>
      <devices>
        <device>hd</device>
      </devices>
    </boot>
  </os>
</vm>
' \
https://myengine.example.com/ovirt-engine/api/vms

Тело ответа будет объектом типа Vm:

<vm href="/ovirt-engine/api/vms/007" id="007">
  <name>myvm</name>
  <link href="/ovirt-engine/api/vms/007/diskattachments" rel="diskattachments"/>
  <link href="/ovirt-engine/api/vms/007/nics" rel="nics"/>
  ...
  <cpu>
    <architecture>x86_64</architecture>
    <topology>
      <cores>1</cores>
      <sockets>1</sockets>
      <threads>1</threads>
    </topology>
  </cpu>
  <memory>1073741824</memory>
  <os>
    <boot>
      <devices>
        <device>hd</device>
      </devices>
    </boot>
    <type>other</type>
  </os>
  <type>desktop</type>
  <cluster href="/ovirt-engine/api/clusters/002" id="002"/>
  <status>down</status>
  <original_template href="/ovirt-engine/api/templates/000" id="00"/>
  <template href="/ovirt-engine/api/templates/000" id="000"/>
</vm>

10. Создание сетевой карты виртуальной машины

В следующем примере создается виртуальный сетевой интерфейс для подключения примера виртуальной машины к сети ovirtmgmt.

Запрос должен быть таким:

POST /ovirt-engine/api/vms/007/nics HTTP/1.1
Content-Type: application/xml
Accept: application/xml

Тело запроса должно содержать объект типа Nic, описывающий создаваемую сетевую карту:

<nic>
  <name>mynic</name>
  <description>My network interface card</description>
</nic>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<nic>
  <name>mynic</name>
  <description>My network interface card</description>
</nic>
' \
https://myengine.example.com/ovirt-engine/api/vms/007/nics

11. Создание диска виртуальной машины

В следующем примере создается диск с возможностью копирования при записи объемом 8 ГБ для примера виртуальной машины.

Запрос должен быть таким:

POST /ovirt-engine/api/vms/007/diskattachments HTTP/1.1
Content-Type: application/xml
Accept: application/xml

Тело запроса должно быть объектом типа DiskAttachment, описывающим диск и способ его подключения к виртуальной машине:

<disk_attachment>
  <bootable>false</bootable>
  <interface>virtio</interface>
  <active>true</active>
  <disk>
    <description>My disk</description>
    <format>cow</format>
    <name>mydisk</name>
    <provisioned_size>8589934592</provisioned_size>
    <storage_domains>
      <storage_domain>
        <name>mydata</name>
      </storage_domain>
    </storage_domains>
  </disk>
</disk_attachment>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<disk_attachment>
  <bootable>false</bootable>
  <interface>virtio</interface>
  <active>true</active>
  <disk>
    <description>My disk</description>
    <format>cow</format>
    <name>mydisk</name>
    <provisioned_size>8589934592</provisioned_size>
    <storage_domains>
      <storage_domain>
        <name>mydata</name>
      </storage_domain>
    </storage_domains>
  </disk>
</disk_attachment>
' \
https://myengine.example.com/ovirt-engine/api/vms/007/diskattachments

Атрибут storage_domains указывает API хранить диск в домене хранения данных mydata.

12. Прикрепление ISO-образа к виртуальной машине

Загрузочный носитель для следующего примера виртуальной машины требует ISO-образ компакт-диска или DVD для установки операционной системы. В этом примере используется образ CentOS 7.

Для использования виртуальными машинами образы ISO должны быть доступны в домене ISO myisos. Вы можете использовать сервисы ImageTransfers для создания передачи образа и ImageTransfer для загрузки ISO-образа.

После загрузки ISO-образа можно использовать API для запроса списка файлов из домена хранения ISO:

GET /ovirt-engine/api/storagedomains/006/files HTTP/1.1
Accept: application/xml

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request GET \
--header 'Version: 4' \
--header 'Accept: application/xml' \
https://myengine.example.com/ovirt-engine/api/storagedomains/006/files

Сервер возвращает следующий список объектов типа File, по одному для каждого доступного образа ISO:

<files>
  <file href="..." id="CentOS-7-x86_64-Minimal.iso">
    <name>CentOS-7-x86_64-Minimal.iso</name>
  </file>
  ...
</files>

Пользователю API необходимо прикрепить CentOS-7-x86_64-Minimal.iso к примеру виртуальной машины. Прикрепление ISO-образа эквивалентно использованию кнопки Сменить CD на администрирования или пользовательском портале.

Запрос должен быть таким:

PUT /ovirt-engine/api/vms/007/cdroms/00000000-0000-0000-0000-000000000000 HTTP/1.1
Accept: application/xml
Content-type: application/xml

Тело запроса должно быть объектом типа Cdrom, содержащим внутренний атрибут file для указания идентификатора образа ISO:

<cdrom>
  <file id="CentOS-7-x86_64-Minimal.iso"/>
</cdrom>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request PUT \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<cdrom>
  <file id="CentOS-7-x86_64-Minimal.iso"/>
</cdrom>
' \
https://myengine.example.com/ovirt-engine/api/vms/007/cdroms/00000000-0000-0000-0000-000000000000

Дополнительные сведения см. в документации сервиса VmCdrom, управляющего компакт-дисками виртуальных машин.

13. Запуск виртуальной машины

Виртуальная среда готова, а виртуальная машина содержит все необходимые для работы компоненты. В этом примере виртуальная машина запускается с помощью метода start.

Запрос должен быть таким:

POST /ovirt-engine/api/vms/007/start HTTP/1.1
Accept: application/xml
Content-type: application/xml

Тело запроса должно выглядеть следующим образом:

<action>
  <vm>
    <os>
      <boot>
        <devices>
          <device>cdrom</device>
        </devices>
      </boot>
    </os>
  </vm>
</action>

Тот же запрос с помощью команды curl:

curl \
--cacert '/etc/pki/ovirt-engine/ca.pem' \
--user 'api-user@internalsso:mypassword' \
--request POST \
--header 'Version: 4' \
--header 'Content-Type: application/xml' \
--header 'Accept: application/xml' \
--data '
<action>
  <vm>
    <os>
      <boot>
        <devices>
          <device>cdrom</device>
        </devices>
      </boot>
    </os>
  </vm>
</action>
' \
https://myengine.example.com/ovirt-engine/api/vms/007/start

В теле запроса в качестве загрузочного устройства виртуальной машины задается CD-ROM только для этой загрузки. Это позволяет виртуальной машине установить операционную систему из прикрепленного ISO-образа. Загрузочное устройство возвращается к диску для всех будущих загрузок.