REST API

Примечание

Для получения доступа к REST API необходим токен. Получение токена описано во вкладке с дополнительной информацией.


VDI server API

Предоставляет API для управления виртуальными рабочими столами (VDI).

Информация о модуле

Подробная информация о модуле.

GET
/v1/info
Получение подробной информации о модуле.
Запрос
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/info | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
version (Optional) body string Номер версии модуля.
license (Optional) body string Информация о лицензии.

Пример получения информации о модуле в JSON формате:

{
    "info": {
        "license": {
            "created_at": 1538141220,
            "expire_at": 1545955200,
            "module_package": "tionix_vdi_server",
            "name": "Laboratoria",
            "product": "TIONIX.VDIServer",
            "surrogate_name": "TIONIX.VDIServer",
            "unique_id": "07-002-decf3c6c893561752802",
            "verified": true
        },
        "version": "1.35.1.dev38"
    }
}

VDI проекты

Действия с VDI проектами.

POST
/v1/projects/
Создание VDI проекта.

Создание нового VDI проекта с заданными параметрами.

Запрос
Параметры запроса:
Name In Type Description
name body string Имя проекта, уникальное в рамках домена.
enabled (Optional) body bool Состояние проекта (включен/выключен).
description (Optional) body string Описание проекта.
parent_id (Optional) body string Идентификатор родительского проекта/домена.
is_domain (Optional) body bool Флаг, указывающий возможность использовать проект в качестве домена.
tags (Optional) body string Список тэгов проекта.
domain_id (Optional) body string Идентификатор домена проекта.
flavor_id body string Идентификатор типа виртуальных машин проекта.
image_id body string Идентификатор образа виртуальных машин проекта.
operation_mode (Optional) body string

Режим работы VDI машин проекта. Возможные значения:

  • 1 - Standard/Стандартный;
  • 2 - Simultaneous/Совместный.
network_id (Optional) body string Идентификатор сети проекта.
availability_zone (Optional) body string Зона доступности проекта.
instance_init_script (Optional) body string Скрипт, закодированный в формате base64. Исполняется при создании всех VDI машин проекта.
min_reserve_vm (Optional) body integer Минимальное количество резервных виртуальных машин в проекте. По умолчанию: None.
instance_name_pattern (Optional) body string Шаблон имен виртуальных машин.
use_cinder_root body bool

Расположение корневого диска. Возможные значения:

  • true - корневой диск располагается в системе хранения, управляемой службой Cinder;
  • false - корневой диск располагается на вычислительном узле.

По умолчанию: false.

volume_name_pattern (Optional) body string Шаблон имен дисков.
volume_type_id (Optional) body string Идентификатор типа диска.
volume_size body integer Размер корневого диска в ГБ. Возможное значение от 0 до 999. Обязателен только при значении true параметра use_cinder_root.
delete_on_termination body bool Флаг для удаления корневого диска при удалении VDI машины. Обязателен только при значении true параметра use_cinder_root.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"project":{"name": "test_proj","enabled": true,"description":"Test Project_2","parent_id":"37e51ab4c5134e5198788d1f6afe5b8b","domain_id":"37e51ab4c5134e5198788d1f6afe5b8b","flavor_id": "25a8679f-582a-4f7c-b9c2-286a60bedb76","image_id": "bdd277be-ebf3-4ff7-8c05-c6f20cbddd61","network_id": "39523179-37b5-4fd7-bf14-a1f7134a6b1f","operation_mode": "2", "availability_zone": "nova"}}' http://controller:9364/v1/projects/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор проекта.

Пример результата в JSON формате:

{
    "project": {
        "id": "d394da7c4d0747bd879e0e865222b3d9",
   }
}
PUT
/v1/projects/{project_id}
Редактирование VDI проекта.

Изменение параметров VDI проекта.

Запрос
Параметры запроса:
Name In Type Description
project_id path string Идентификатор проекта.
name (Optional) body string Имя проекта, уникальное в рамках домена.
enabled (Optional) body bool Состояние проекта (включен/выключен).
description (Optional) body string Описание проекта.
domain_id (Optional) body string Идентификатор домена проекта.
tags (Optional) body string Список тэгов проекта.
flavor_id (Optional) body string Идентификатор типа виртуальных машин проекта.
image_id (Optional) body string Идентификатор образа виртуальных машин проекта.
network_id (Optional) body string Идентификатор сети проекта.
availability_zone (Optional) body string Зона доступности проекта.
instance_init_script (Optional) body string Скрипт, закодированный в формате base64. Исполняется при создании всех VDI машин проекта.
min_reserve_vm (Optional) body integer Минимальное количество резервных виртуальных машин в проекте. По умолчанию: None.
instance_name_pattern (Optional) body string Шаблон имен виртуальных машин.
use_cinder_root (Optional) body bool

Расположение корневого диска. Возможные значения:

  • true - корневой диск располагается в системе хранения, управляемой службой Cinder;
  • false - корневой диск располагается на вычислительном узле.

По умолчанию: false.

volume_name_pattern (Optional) body string Шаблон имен дисков.
volume_type_id (Optional) body string Идентификатор типа диска.
volume_size (Optional) body integer Размер корневого диска в ГБ. Возможное значение от 0 до 999. Обязателен только при значении true параметра use_cinder_root.
delete_on_termination (Optional) body bool Флаг для удаления корневого диска при удалении VDI машины. Обязателен только при значении true параметра use_cinder_root.
Пример запроса:
curl -X PUT -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"project":{"name": "new name","enabled": false,"description":"Test Project_2","flavor_id": "25a8679f-582a-4f7c-b9c2-286a60bedb76","image_id": "bdd277be-ebf3-4ff7-8c05-c6f20cbddd61","network_id": "39523179-37b5-4fd7-bf14-a1f7134a6b1f", "availability_zone": "nova", "instance_init_script": "IyEvYmluL3NoCmVjaG8gJ0hlbGxvIGZyb20gdGhlIGRldiB0ZWFtISc="}}' http://controller:9364/v1/projects/5f62c4da73f34e869d9a3e8ab79b147a | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор проекта.
flavor_id (Optional) body string Идентификатор типа виртуальных машин проекта.
image_id (Optional) body string Идентификатор образа виртуальных машин проекта.
network_id (Optional) body string Идентификатор сети проекта.
availability_zone (Optional) body string Зона доступности проекта.
operation_mode (Optional) body string

Режим работы VDI машин проекта. Возможные значения:

  • 1 - Standard/Стандартный;
  • 2 - Simultaneous/Совместный.
instance_init_script (Optional) body string Скрипт, закодированный в формате base64. Исполняется при создании всех VDI машин проекта.
instance_name_pattern (Optional) body string Шаблон имен виртуальных машин.

Пример результата в JSON формате:

{
    "project": {
        "id": "d394da7c4d0747bd879e0e865222b3d9",
        "image_id": "bdd277be-ebf3-4ff7-8c05-c6f20cbddd61",
        "flavor_id": "25a8679f-582a-4f7c-b9c2-286a60bedb76",
        "network_id": "39523179-37b5-4fd7-bf14-a1f7134a6b1f",
        "availability_zone": "nova",
        "operation_mode": "1",
        "instance_init_script": "IyEvYmluL3NoCmVjaG8gJ0hlbGxvIGZyb20gdGhlIGRldiB0ZWFtISc="
   }
}
GET
/v1/projects/
Получение списка VDI проектов.

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

Запрос
Параметры запроса:
Name In Type Description
name (Optional) body string Имя проекта, уникальное в рамках домена.
enabled (Optional) body bool Состояние проекта (включен/выключен).
domain (Optional) body string Доменное имя проекта.
user (Optional) body string Идентификатор пользователя.
operation_mode (Optional) body string

Режим работы VDI машин проекта. Возможные значения:

  • 1 - Standard/Стандартный;
  • 2 - Simultaneous/Совместный.
with_os_object (Optional) path bool Параметр, позволяющий расширять ответ объектом os_project, содержащим атрибуты проекта OpenStack.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/projects/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор проекта.
image_id (Optional) body string Идентификатор образа виртуальных машин проекта.
flavor_id (Optional) body string Идентификатор типа виртуальных машин проекта.
network_id (Optional) body string Идентификатор сети проекта.
availability_zone (Optional) body string Зона доступности проекта.
operation_mode (Optional) body string

Режим работы VDI машин проекта. Возможные значения:

  • 1 - Standard/Стандартный;
  • 2 - Simultaneous/Совместный.
os_project (Optional) body object Проект OpenStack.

Пример результата в JSON формате:

{
    "projects": [
        {
            "id": "d394da7c4d0747bd879e0e865222b3d9",
            "image_id": "d91232fa-14ad-4e41-980a-d82dc9ea3929",
            "flavor_id": "0972fadc-6f8d-415a-b4cb-d4a0992b2370",
            "network_id": "2506940c-22f9-4b81-a865-9aa6e7d7cba3",
            "availability_zone": "nova",
            "operation_mode": "1"
        },
        {
            "id": "37e51ab4c5134e5198788d1f6afe5b8b",
            "image_id": "747488c2-5aa6-4d92-a982-e0319bee70e1",
            "flavor_id": "fc77978d-02fb-4a53-b839-313abb7343c3",
            "network_id": "d57e3c66-69bb-46d3-af75-28c41ed1076f",
            "availability_zone": "nova",
            "operation_mode": "2"
        }
    ]
}
GET
/v1/projects/{project_id}
Получение подробной информации о VDI проекте.

Получение подробной информации о VDI проекте.

Запрос
Параметры запроса:
Name In Type Description
project_id path string Идентификатор проекта.
with_os_object (Optional) path bool Параметр, позволяющий расширять ответ объектом os_project, содержащим атрибуты проекта OpenStack.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" "http://controller:9364/v1/projects/$project_id?with_os_object=true" | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор проекта.
image_id (Optional) body string Идентификатор образа виртуальных машин проекта.
flavor_id (Optional) body string Идентификатор типа виртуальных машин проекта.
network_id (Optional) body string Идентификатор сети проекта.
availability_zone (Optional) body string Зона доступности проекта.
operation_mode (Optional) body string

Режим работы VDI машин проекта. Возможные значения:

  • 1 - Standard/Стандартный;
  • 2 - Simultaneous/Совместный.
instance_init_script (Optional) body string Скрипт, закодированный в формате base64. Исполняется при создании всех VDI машин проекта.
min_reserve_vm (Optional) body integer Минимальное количество резервных виртуальных машин в проекте. По умолчанию: None.
instance_name_pattern (Optional) body string Шаблон имен виртуальных машин.
os_project (Optional) body object Проект OpenStack.
use_cinder_root (Optional) body bool

Расположение корневого диска. Возможные значения:

  • true - корневой диск располагается в системе хранения, управляемой службой Cinder;
  • false - корневой диск располагается на вычислительном узле.

По умолчанию: false.

volume_name_pattern (Optional) body string Шаблон имен дисков.
volume_type_id (Optional) body string Идентификатор типа диска.
volume_size (Optional) body integer Размер корневого диска в ГБ. Возможное значение от 0 до 999. Обязателен только при значении true параметра use_cinder_root.
delete_on_termination (Optional) body bool Флаг для удаления корневого диска при удалении VDI машины. Обязателен только при значении true параметра use_cinder_root.

Пример результата в JSON формате:

{
    "project": {
        "availability_zone": "",
        "flavor_id": "41f2e2b1-d806-4688-8814-d4bedd6aee20",
        "id": "c445f25f8c7e48a99ee7985309ed6954",
        "image_id": "1e56ddcc-4d8d-42a1-8650-8a496c498e8c",
        "instance_init_script": null,
        "network_id": "3bff4756-aed7-4603-8fec-cfbe83654f14",
        "operation_mode": "1",
        "os_project": {
            "availability_zone": "",
            "description": "",
            "domain_id": "default",
            "enabled": true,
            "flavor_id": "41f2e2b1-d806-4688-8814-d4bedd6aee20",
            "id": "c445f25f8c7e48a99ee7985309ed6954",
            "image_id": "1e56ddcc-4d8d-42a1-8650-8a496c498e8c",
            "is_domain": false,
            "links": {
                "self": "http://dev-cnt7q-ovs-02.stand.loc:5000/v3/projects/c445f25f8c7e48a99ee7985309ed6954"
            },
            "name": "0745ee8b21a949fab34cd2d05265234c_horizon_tnx_tenan",
            "network_id": "3bff4756-aed7-4603-8fec-cfbe83654f14",
            "operation_mode": "1",
            "parent_id": "default",
            "project_type": "VDI",
            "tags": [
                "vdi"
            ]
        }
    }
}
GET
/v1/projects/actions/get-instance-name-pattern
Получение шаблона имен VDI машин.

Получение шаблона имен VDI машин по умолчанию из конфигурационного файла. Используется при создании VDI проекта.

Параметры запроса:

Запрос не имеет параметров.

Пример запроса:
curl -X GET -H "X-Auth-Token: $token" "http://controller:9364/v1/projects/actions/get-instance-name-pattern" | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
instance_name_pattern (Optional) body string Шаблон имен виртуальных машин.

Пример результата в JSON формате:

{
  "instance_name_pattern": "vdi-**"
}

Виртуальные VDI машины

Действия с виртуальными VDI машинами.

POST
/v1/servers/
Создание VDI машины.

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

Запрос
Параметры запроса:
Name In Type Description
name (Optional) body string Имя виртуальной машины. Максимальная длина имени VDI машины не должна превышать 245 символов.
count (Optional) body integer Количество созданных виртуальных машин.
description (Optional) body string Описание виртуальной машины.
users (Optional) body array Пользователи виртуальной VDI машины.
groups (Optional) body array Группы пользователей виртуальной машины.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"server":{"name": "test_vm", "count": 1,"description":"Test VDI vm"}}' http://controller:9364/v1/servers/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор асинхронной задачи на создание VDI машины.

Пример результата в JSON формате:

{
    "tasks": [
        {
            "id": 1,
        },
        {
            "id": 2,
        },
    ],
}
PUT
/v1/servers/{server_id}
Редактирование VDI машины.

Изменение параметров VDI машины.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
users (Optional) body array Пользователи виртуальной VDI машины.
groups (Optional) body array Группы пользователей виртуальной машины.
Пример запроса:
curl -X PUT -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"server":{"users": ["d91232fa-14ad-4e41-980a-d82dc9ea3929", "0972fadc-6f8d-415a-b4cb-d4a0992b2370"], "groups": ["d57e3c66-69bb-46d3-af75-28c41ed1076f"]}}' http://controller:9364/v1/servers/254ba49f-584b-419d-9e86-afe9aa8a122e | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
users (Optional) body array Пользователи виртуальной VDI машины.
groups (Optional) body array Группы пользователей виртуальной машины.

Пример результата в JSON формате:

{
    "server": {
        "users": ["d91232fa-14ad-4e41-980a-d82dc9ea3929",
                  "0972fadc-6f8d-415a-b4cb-d4a0992b2370"],
        "groups": ["d57e3c66-69bb-46d3-af75-28c41ed1076f"]
    }
}
GET
/v1/servers/
Получение списка VDI машин.

Получение списка VDI машин.

Запрос
Параметры запроса:
Name In Type Description
project_id (Optional) body string Идентификатор проекта.
group (Optional) body string Группа пользователей виртуальной машины.
user (Optional) body string Пользователь виртуальной VDI машины.
with_os_object (Optional) path bool Параметр, позволяющий расширять ответ объектом os_server, содержащим атрибуты виртуальной машины OpenStack.

Параметры, поддерживающие модификаторы: project_id.

Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/servers/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор виртуальной машины.
users (Optional) body array Пользователи виртуальной VDI машины.
groups (Optional) body array Группы пользователей виртуальной машины.
os_server (Optional) body object Виртуальная машина OpenStack.

Пример результата в JSON формате:

{
    "servers": [
        {
            "id": "2506940c-22f9-4b81-a865-9aa6e7d7cba3",
            "users": ["0972fadc-6f8d-415a-b4cb-d4a0992b2370"],
            "groups": [],
        },
        {
            "id": "0972fadc-6f8d-415a-b4cb-d4a0992b2370",
            "users": ["2506940c-22f9-4b81-a865-9aa6e7d7cba3",
                      "747488c2-5aa6-4d92-a982-e0319bee70e1"],
            "groups": ["d91232fa-14ad-4e41-980a-d82dc9ea3929"],
        }
    ]
}
GET
/v1/servers/{server_id}
Получение подробной информации о VDI машине.

Получение подробной информации о VDI машине.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
with_os_object (Optional) path bool Параметр, позволяющий расширять ответ объектом os_server, содержащим атрибуты виртуальной машины OpenStack.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" "http://controller:9364/v1/servers/$server_id?with_os_object=true" | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор виртуальной машины.
users (Optional) body array Пользователи виртуальной VDI машины.
groups (Optional) body array Группы пользователей виртуальной машины.
os_server (Optional) body object Виртуальная машина OpenStack.

Пример результата в JSON формате:

{
    "server": {
        "groups": [
            "4a2fa50aad544c81ae23dfb22a871755"
        ],
        "id": "7ad6183a-817e-47c7-b848-741fdfbecc40",
        "os_server": {
            "OS-DCF:diskConfig": "MANUAL",
            "OS-EXT-AZ:availability_zone": "test",
            "OS-EXT-SRV-ATTR:host": null,
            "OS-EXT-SRV-ATTR:hostname": "d2a83cd9-8ba7-4807-a29e-f59e11b7e49a-2",
            "OS-EXT-SRV-ATTR:hypervisor_hostname": null,
            "OS-EXT-SRV-ATTR:instance_name": "instance-00000009",
            "OS-EXT-SRV-ATTR:kernel_id": "",
            "OS-EXT-SRV-ATTR:launch_index": 1,
            "OS-EXT-SRV-ATTR:ramdisk_id": "",
            "OS-EXT-SRV-ATTR:reservation_id": "r-sr4oac5f",
            "OS-EXT-SRV-ATTR:root_device_name": "/dev/vda",
            "OS-EXT-SRV-ATTR:user_data": null,
            "OS-EXT-STS:power_state": 0,
            "OS-EXT-STS:task_state": null,
            "OS-EXT-STS:vm_state": "active",
            "OS-SRV-USG:launched_at": null,
            "OS-SRV-USG:terminated_at": null,
            "accessIPv4": "",
            "accessIPv6": "",
            "addresses": {},
            "config_drive": "",
            "created": "2018-12-17T12:25:04Z",
            "description": null,
            "flavor": {
                "disk": 0,
                "ephemeral": 0,
                "extra_specs": {},
                "original_name": "c1_r1G_d0",
                "ram": 1024,
                "swap": 0,
                "vcpus": 1
            },
            "hostId": "",
            "host_status": "",
            "id": "7ad6183a-817e-47c7-b848-741fdfbecc40",
            "image": {
                "id": "d0bed70d-560d-48cd-bd20-0b1818545d39",
                "links": [
                    {
                        "href": "http://dev-cnt7q-ovs-02.stand.loc:8774/ce1eaa969dd74cf0a33fe222f087533c/images/d0bed70d-560d-48cd-bd20-0b1818545d39",
                        "rel": "bookmark"
                    }
                ]
            },
            "key_name": null,
            "links": [
                {
                    "href": "http://dev-cnt7q-ovs-02.stand.loc:8774/v2.1/ce1eaa969dd74cf0a33fe222f087533c/servers/7ad6183a-817e-47c7-b848-741fdfbecc40",
                    "rel": "self"
                },
                {
                    "href": "http://dev-cnt7q-ovs-02.stand.loc:8774/ce1eaa969dd74cf0a33fe222f087533c/servers/7ad6183a-817e-47c7-b848-741fdfbecc40",
                    "rel": "bookmark"
                }
            ],
            "locked": false,
            "metadata": {},
            "name": "d2a83cd9-8ba7-4807-a29e-f59e11b7e49a-2",
            "os-extended-volumes:volumes_attached": [],
            "progress": 0,
            "status": "ACTIVE",
            "tags": [
                "vdi"
            ],
            "tenant_id": "184e540c7dc74df9ba31df50e1c3daf5",
            "updated": "2018-12-17T12:43:06Z",
            "user_id": "cf5910a0ff0c43158c82f86a2b974b55"
        },
        "users": [
            "47aa3ba7eb48459bac24c5929f49a3c3"
        ]
    }
}

Пользователи и группы пользователей VDI машин

Управление пользователями и группами пользователей VDI машин.

POST
/v1/servers/{server_id}/users/
Назначение пользователей VDI машине.

Назначение пользователей VDI машине. Вся информация о назначениях пользователей и их отмене сохраняется в базе данных.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
users body array Пользователи виртуальной VDI машины.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"users": ["d91232fa-14ad-4e41-980a-d82dc9ea3929", "2506940c-22f9-4b81-a865-9aa6e7d7cba3"]}' http://controller:9364/v1/servers/246bc0c0-6f82-4343-8d9e-9c1ef706a3d0/users/

Эта операция не имеет содержания ответа.

POST
/v1/servers/{server_id}/groups/
Назначение групп пользователей VDI машине.

Назначение групп пользователей VDI машине. Вся информация о назначениях групп и их отмене сохраняется в базе данных.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
groups body array Группы пользователей виртуальной машины.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"groups": ["d91232fa-14ad-4e41-980a-d82dc9ea3929", "2506940c-22f9-4b81-a865-9aa6e7d7cba3"]}' http://controller:9364/v1/servers/246bc0c0-6f82-4343-8d9e-9c1ef706a3d0/groups/

Эта операция не имеет содержания ответа.

POST
/v1/users/{user_id}/servers/
Назначение пользователя VDI машинам.

Назначение пользователя VDI машинам. Вся информация о назначениях пользователей и их отмене сохраняется в базе данных.

Запрос
Параметры запроса:
Name In Type Description
user_id path string Идентификатор пользователя.
servers body array Виртуальные VDI машины пользователя.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"servers": ["d91232fa-14ad-4e41-980a-d82dc9ea3929", "2506940c-22f9-4b81-a865-9aa6e7d7cba3"]}' http://controller:9364/v1/users/246bc0c0-6f82-4343-8d9e-9c1ef706a3d0/servers/

Эта операция не имеет содержания ответа.

POST
/v1/groups/{group_id}/servers/
Назначение группы пользователей VDI машинам.

Назначение группы пользователей VDI машинам. Вся информация о назначениях групп и их отмене сохраняется в базе данных.

Запрос
Параметры запроса:
Name In Type Description
group_id path string Идентификатор группы пользователей.
servers body array Виртуальные машины группы пользователей.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"servers": ["d91232fa-14ad-4e41-980a-d82dc9ea3929", "2506940c-22f9-4b81-a865-9aa6e7d7cba3"]}' http://controller:9364/v1/groups/246bc0c0-6f82-4343-8d9e-9c1ef706a3d0/servers/

Эта операция не имеет содержания ответа.

GET
/v1/servers//users/
Получение списка пользователей VDI машины.

Получение списка пользователей VDI машины.

Запрос
Параметры запроса:
Name In Type Description
server_id body string Идентификатор виртуальной машины.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/servers/2506940c-22f9-4b81-a865-9aa6e7d7cba3/users/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор пользователя.

Пример результата в JSON формате:

{
    "users": [
                {"id": "0972fadc-6f8d-415a-b4cb-d4a0992b2370"},
                {"id": "2506940c-22f9-4b81-a865-9aa6e7d7cba3"},
                {"id": "747488c2-5aa6-4d92-a982-e0319bee70e1"}
             ]
}
GET
/v1/servers//groups/
Получение списка групп пользователей VDI машины.

Получение списка групп пользователей VDI машины.

Запрос
Параметры запроса:
Name In Type Description
server_id body string Идентификатор виртуальной машины.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/servers/2506940c-22f9-4b81-a865-9aa6e7d7cba3/groups/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
id (Optional) body string Идентификатор группы пользователей.

Пример результата в JSON формате:

{
    "groups": [
                {"id": "0972fadc-6f8d-415a-b4cb-d4a0992b2370"},
                {"id": "2506940c-22f9-4b81-a865-9aa6e7d7cba3"},
                {"id": "747488c2-5aa6-4d92-a982-e0319bee70e1"}
             ]
}
DELETE
/v1/servers//users/
Снятие назначения пользователей VDI машинам.

Снятие назначения пользователей VDI машинам.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
user_id path string Идентификатор пользователя.
Пример запроса:
curl -X DELETE -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/servers/0972fadc-6f8d-415a-b4cb-d4a0992b2370/users/747488c2-5aa6-4d92-a982-e0319bee70e1

Эта операция не имеет содержания ответа.

DELETE
/v1/servers//groups/
Снятие назначения групп пользователей VDI машины.

Снятие назначения групп пользователей VDI машинам.

Запрос
Параметры запроса:
Name In Type Description
server_id path string Идентификатор виртуальной машины.
group_id path string Идентификатор группы пользователей.
Пример запроса:
curl -X DELETE -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/servers/0972fadc-6f8d-415a-b4cb-d4a0992b2370/groups/747488c2-5aa6-4d92-a982-e0319bee70e1

Эта операция не имеет содержания ответа.

Плавающие IP-адреса

Действия с плавающими IP-адресами.

GET
/v1/users/
Получение списка пользователей с назначенным плавающим IP-адресом.

Получение списка всех пользователей, для которых назначены плавающие IP-адреса.

Запрос
Параметры запроса:

Запрос не имеет параметров.

Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/users/ | python -m json.tool
Параметры ответа:
Name In Type Description
id body string Идентификатор пользователя.
floating_ip_id body string Идентификатор плавающего IP-адреса.

Пример результата в JSON формате:

{
    "users": [
        {
            "id": "56d88dd0a3ab4c4c8d1d15534352d7de",
            "floating_ip_id": "c3bdc5ba-cdff-49d0-b84c-ac9329ab1410"
        }
    ]
}
GET
/v1/users/{user_id}
Получение пользователя с назначенным плавающим IP-адресом.

Получение пользователя, на которого назначен плавающий IP-адрес.

Запрос
Параметры запроса:
Name In Type Description
user_id path string Идентификатор пользователя.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/users/$user_id | python -m json.tool
Параметры ответа:
Name In Type Description
id body string Идентификатор пользователя.
floating_ip_id (Optional) body string Идентификатор плавающего IP-адреса.

Пример результата в JSON формате:

{
    "user": [
        {
            "id": "56d88dd0a3ab4c4c8d1d15534352d7de",
            "floating_ip_id": "c3bdc5ba-cdff-49d0-b84c-ac9329ab1410"
        }
    ]
}
POST
/v1/users/{user_id}/floating-ip
Назначение плавающего IP-адреса пользователю.

Назначение плавающего IP-адреса пользователю.

Запрос
Параметры запроса:
Name In Type Description
user_id path string Идентификатор пользователя.
floating_ip_id body string Идентификатор плавающего IP-адреса.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/users/$user_id/floating-ip -d '{"floating_ip_id": "c3bdc5ba-cdff-49d0-b84c-ac9329ab1410"}'

Эта операция не имеет содержания ответа.

PUT
/v1/users/{user_id}/floating-ip
Обновление назначения плавающего IP-адреса пользователю.

Обновление назначения плавающего IP-адреса пользователю.

Запрос
Параметры запроса:
Name In Type Description
user_id path string Идентификатор пользователя.
floating_ip_id body string Идентификатор плавающего IP-адреса.
Пример запроса:
curl -X PUT -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/users/$user_id/floating-ip -d '{"floating_ip_id": "c3bdc5ba-cdff-49d0-b84c-ac9329ab1410"}'

Эта операция не имеет содержания ответа.

DELETE
/v1/users/{user_id}/floating-ip
Снятие назначения плавающего IP-адреса пользователю.

Снятие назначения плавающего IP-адреса пользователю.

Запрос
Параметры запроса:
Name In Type Description
user_id path string Идентификатор пользователя.
Пример запроса:
curl -X DELETE -H "X-Auth-Token: $token" http://controller:9364/v1/users/$user_id/floating-ip

Эта операция не имеет содержания ответа.

Сессии

Действия с сессиями.

GET
/v1/sessions/
Получение списка сессий.

Получение списка сессий.

Запрос
Параметры запроса:
Name In Type Description
user_id (Optional) body string Идентификатор пользователя.
user_name (Optional) body string Имя пользователя.
instance_id (Optional) body string Идентификатор виртуальной машины.
instance_name (Optional) body string Имя виртуальной машины.
project_id (Optional) body string Идентификатор проекта.
connection_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
last (Optional) body bool Дополнительный параметр, указывающий необходимость вывода только последних сессий виртуальных машин.

Параметры, поддерживающие модификаторы: user_id, user_name, instance_id.

Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/sessions/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
instance_id (Optional) body string Идентификатор виртуальной машины.
session_id (Optional) body string Идентификатор сессии.
user_id (Optional) body string Идентификатор пользователя.
user_name (Optional) body string Имя пользователя.
connection_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
closed_at (Optional) body string Дата и время закрытия сессии.
client_ip (Optional) body string IP-адрес клиента.
client_os (Optional) body string Операционная система клиента.
client_info (Optional) body string Информация о клиенте.
created_at (Optional) body string Время создания сессии.

Пример результата в JSON формате:

{
    "sessions": [
        {
            "instance_id": "e3afefea-7dfe-4754-8607-fb3f45b0fe07",
            "session_id": "11fa220f-9f88-406a-ba79-0acbba83c32b",
            "user_id": "56d88dd0a3ab4c4c8d1d15534352d7de",
            "user_name": "admin",
            "connection": "web",
            "closed_at": null,
            "client_ip": "192.168.0.2",
            "client_os": "Ubuntu 16.04",
            "client_info": "TIONIX.VDIclient 1.4.0"
            "created_at": "2018-10-31T12:59:43"
        }
    ]
}
GET
/v1/sessions/count
Получение количества сессий.

Получение количества сессий.

Запрос
Параметры запроса:
Name In Type Description
user_id (Optional) body string Идентификатор пользователя.
user_name (Optional) body string Имя пользователя.
instance_id (Optional) body string Идентификатор виртуальной машины.
instance_name (Optional) body string Имя виртуальной машины.
project_id (Optional) body string Идентификатор проекта.
connection_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
last (Optional) body bool Дополнительный параметр, указывающий необходимость вывода только последних сессий виртуальных машин.
Пример запроса:
curl -X GET -H "X-Auth-Token: $token" -H "Content-Type: application/json" http://controller:9364/v1/sessions/count | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
count (Optional) body integer Количество объектов.

Пример результата в JSON формате:

{
    "count": 5
}
POST
/v1/sessions/
Добавление сессии.

Добавление новой сессии.

Запрос
Параметры запроса:
Name In Type Description
conn_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
instance_id body string Идентификатор виртуальной машины.
client_ip (Optional) body string IP-адрес клиента.
client_os (Optional) body string Операционная система клиента.
client_info (Optional) body string Информация о клиенте.
Пример запроса:
curl -X POST -H "X-Auth-Token: $token" -H "Content-Type: application/json" -d '{"session": {"instance_id": "8735df50-6e08-462e-b091-1552f8588fd4", "conn_type": "web"}}' http://controller:9364/v1/sessions/ | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
instance_id (Optional) body string Идентификатор виртуальной машины.
user_id (Optional) body string Идентификатор пользователя.
user_name (Optional) body string Имя пользователя.
connection_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
closed_at (Optional) body string Дата и время закрытия сессии.
client_ip (Optional) body string IP-адрес клиента.
client_os (Optional) body string Операционная система клиента.
client_info (Optional) body string Информация о клиенте.
created_at (Optional) body string Время создания сессии.

Пример результата в JSON формате:

{
    "session": {
        "instance_id": "e3afefea-7dfe-4754-8607-fb3f45b0fe07",
        "user_id": "56d88dd0a3ab4c4c8d1d15534352d7de",
        "user_name": "admin",
        "connection": "web",
        "closed_at": null,
        "client_ip": "192.168.0.2",
        "client_os": "Ubuntu 16.04",
        "client_info": "TIONIX.VDIclient 1.4.0",
        "created_at": "2018-10-31T12:59:43"
    }
}

VDI broker API

Виртуальные VDI машины

Интерфейс предоставляет возможность подключения к виртуальной VDI машине.

Примечание

Для аутентификации используется протокол HTTP authentication со схемой Basic, логин и пароль передаются в заголовке.

POST
/v1/request-vm/
Получение ID задачи получения виртуальной VDI машины.

Получение ID асинхронной задачи получения адреса виртуальной машины для подключения.

Запрос
Параметры запроса:
Name In Type Description
user body string Имя пользователя.
password body string Пароль пользователя.
user_domain_name body string Доменное имя пользователя.
auth_tenant (Optional) body string Имя проекта, уникальное в рамках домена.
project_domain_name (Optional) body string Доменное имя проекта.
ip_address (Optional) body string IP-адрес для создания правил группы безопасности виртуальной машины.
conn_type (Optional) body string

Тип подключения. Возможные значения:

  • web - подключение через веб клиент;
  • ssh - подключение через консоль;
  • client - подключение через приложение TIONIX.VDIclient.
os (Optional) body string Операционная система клиента.
client (Optional) body string Информация о клиенте.
Пример запроса:
curl -i -X POST -H "Content-Type: application/json" http://controller:9365/v1/request-vm/ -d '{"user": "vdi", "password": "rR0666&4", "user_domain_name": "default"}' | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
X-Auth-Token header string Токен аутентификации.
request_id body string Идентификатор запроса.

Пример результата в JSON формате:

...
X-Auth-Token: eyJhbGciOiJIUzUxMiIsImV4cCI6MTU4MjI5MzczNSwiaWF0IjoxNTgyMjkwMTM1fQ.eyJ1c2VyX2lkIjoiNmU4NzM2NDgwMjBjNDE1NWIzMjI3NGI0NGEwOGM3NDciLCJkb21haW4iOiJkZWZhdWx0IiwidXNlcl9uYW1lIjoidXNlcjEzNiIsInNjb3BlIjpbMl19.Bij8NYgK8gOJfXuIKSvsPicSn4iAeKwu1mFDdmHFwf-bXOz8mW6bLtnwnckzEv-bTV0V-Vm22RPtv7_Z_Q4H-A
...

{
    "request_id": "fe8775d4-1ac0-4224-9fec-93151e0bfc43"
}
POST
/v1/get-vm/
Получение IP-адреса виртуальной VDI машины по ID задачи.

Получение IP виртуальной машины по ID асинхронной задачи.

Примечание

Используйте токен аутентификации из результата запроса на получение ID асинхронной задачи получения адреса виртуальной машины для подключения.

Запрос
Параметры запроса:
Name In Type Description
request body string Идентификатор запроса.
Пример запроса:
curl -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" http://controller:9365/v1/get-vm/ -d '{"request": "req-48a56205-f4b5-4c05-8c64-30342a7e1cee"}' | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
status body string Статус запроса.
message body string Сообщение запроса.
id body string Идентификатор виртуальной машины.
vm_state body string Состояние виртуальной машины.
ip body string IP-адрес виртуальной машины.
progress body integer Состояние прогресса создания виртуальной машины. Проставляется службой nova.
task_state body string Состояние задачи.

Пример результата в JSON формате:

{
    "status": "completed",
    "message": null,
    "server": {
        "status": "ACTIVE",
        "vm_state": "active",
        "ip": "192.168.1.13",
        "progress": 0,
        "task_state": null,
        "id": "c14d27cd-799e-4317-a430-af7c877703cf"
    }
}

Описание ошибок обращений к VDI server

В случае ошибки сервер вернет ответ со статусом HTTP 400, который будет содержать объект error со следующими параметрами:

  • code - код ошибки;
  • message - краткое описание ошибки;
  • data - дополнительная информация об ошибке.
Перечень кодов ошибок с описанием
Код ошибки Описание на английском Сообщение в VDI клиенте на английском Описание на русском Сообщение в VDI клиенте на русском
1
Unexpected error occurred.
Unexpected error occurred. Please contact system administrator.
Произошла непредвиденная ошибка.
Произошла непредвиденная ошибка. Обратитесь к системному администратору.
2
License expired.
License of VDI server {cloud_url} got out. Please contact system administrator.
Истек срок действия лицензии.
Срок лицензии модуля VDI сервер {cloud_url} истек. Обратитесь к системному администратору.
3
Asynchronous task of getting an instance failed.
Ошибка при выполнении асинхронной задачи получения виртуальной машины.
4
Failed to start asynchronous task of getting an instance.
Не удалось запустить асинхронную задачу получения виртуальной машины.
5
No available VDI project in the specified domain found.
No available VDI project found. Please contact system administrator.
Нет доступных VDI проектов для пользователя в указанном домене.
Нет ни одного доступного VDI проекта. Обратитесь к системному администратору.
6
Authentication error.
Invalid credentials. Please contact system administrator.
Ошибка аутентификации.
Неправильные учётные данные. Обратитесь к системному администратору.
7
Password expired.
The password needs to be changed.
Истек срок действия пароля.
Необходимо изменить пароль.
8
The specified project is not VDI.
Not a VDI project: {project_name}.
Указанный проект не является VDI проектом.
Проект {project_name} не является VDI проектом.
9
Invalid request body.
Неверное тело запроса.
10
Unable to find an instance obtain request by given ID.
Не удалось найти запрос на получение виртуальной машины по указанному ID.
11
Forbidden to obtain an instance request.
Нет доступа к указанному запросу на получение виртуальной машины.
12
Project quota exceeded.
Quota exceeded for VDI project "{project_name}". Please contact system administrator.
Превышена квота проекта.
Превышена квота для VDI проекта "{project_name}". Обратитесь к системному администратору.
13
Instance creation failed.
Unable to create instance in project {project_name}. Please contact system administrator.
Не удалось создать новую виртуальную машину.
Не удалось создать виртуальную машину в проекте {project_name}. Обратитесь к системному администратору.
14
No instances found in the specified project.
No instance found in project {project_name}. Please contact system administrator.
Нет доступных виртуальных машин в указанном проекте.
Не найдена виртуальная машина в проекте {project_name}. Обратитесь к системному администратору.
15
Specified domain not found.
Domain {domain_name} not found.
Указанный домен не найден.
Домен {domain_name} не найден.
16
Specified user not found.
User {user_name} not found in domain {domain_name}.
Указанный пользователь не найден.
Пользователь {user_name} не найден в домене {domain_name}.
17
Instance is in an invalid state.
Instance with id {instance_id} is in invalid state: {instance_status}. Please contact system administrator.
Виртуальная машина находится в необрабатываемом статусе.
Виртуальная машина с ID {instance_id} находится в некорректном состоянии: {instance_status}. Обратитесь к системному администратору.
18
Unable to obtain an instance IP address.
Unable to get IP address of instance with id {instance_id}. Please contact system administrator.
Не удалось получить IP-адрес виртуальной машины.
Не удалось получить IP-адрес виртуальной машины с ID {instance_id}. Обратитесь к системному администратору.
19
Password expiration warning.
Password expires in {seconds} seconds and needs to be changed.
Предупреждение о том, что пароль скоро истечёт.
Ваш пароль истекает через {seconds} секунд, измените его.
20
Warning that amount of authentications with current password is limited.
Password expired, {attempts} grace logins remain.
Предупреждение о том, что осталось ограниченое число аутентификаций с использование текущего пароля.
Срок вашего пароля истек, осталось {attempts} попытки для входа.
21
Authentication server is not available.
Authentication server is not available. Please contact system administrator.
Недоступен сервер аутентификации.
Сервер аутентификации недоступен. Обратитесь к системному администратору.
22
Kerberos script file is not available because of it does not exist or it has wrong permissions.
Couldn't change password because of the KERBEROS.script_path file doesn't exist or it's unaccessible. Please contact system administrator.
Файл скрипта для изменения пароля в Kerberos недоступен по причнине того, что он не найден или неверные права доступа.
Не удалось изменить пароль в связи с отсутствием файла KERBEROS.script_path или прав для его запуска. Обратитесь к системному администратору.
23
Error while password change process, so script returned 1
Couldn't change password because of an error while change password process execution. Please contact system administrator.
Ошибка во время выполнения скрипта изменения пароля, скрипт вернул код 1.
Не удалось изменить пароль в связи с ошибкой во время запуска процесса смены пароля. Обратитесь к системному администратору.
24
Auth token is not valid.
Unexpected error occurred. Please contact system administrator.
Токен авторизации недействителен.
Произошла непредвиденная ошибка. Обратитесь к системному администратору.
25
Failed to process asynchronous task of getting an instance.
Не удалось выполнить асинхронную задачу получения виртуальной машины.
26
Request doesn't match current Web Guard settings.
Invalid settings of Web Guard. Please contact system administrator.
Запрос не соответствует текущим настройкам Web Guard.
Неправильные настройки Web Guard.Обратитесь к системному администратору.

Пример ошибки в JSON формате:

{
    "error": {
        "message": "Quota exceeded for VDI project \"c70379f3-e905-431f-b3b4-d0820e225edf\".",
        "code": 12,
        "data": {
            "project_name": "c70379f3-e905-431f-b3b4-d0820e225edf"
        }
    }
}

Пароли

Управление паролями.

POST
/v1/change-password/
Изменение пароля пользователя.

Изменение пароля пользователя.

Запрос
Параметры запроса:
Name In Type Description
user body string Имя пользователя.
user_domain_name body string Доменное имя пользователя.
password body string Пароль пользователя.
new_password body string Новый пароль пользователя.
Пример запроса:
curl -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" http://controller:9365/v1/change-password/ -d '{"user": "demo", "user_domain_name": "default", "password": "123456", "new_password": "Qdr4H2d5bn01"}' | python -m json.tool
Ответ
Параметры ответа:
Name In Type Description
message body string Сообщение.

Пример результата в JSON формате:

{
    "message": "Password successfully changed for user \'admin\'"
}

Подробное описание кодов ответа на запросы доступно во вкладке с дополнительной информацией.