Важно: Данный раздел актуален для Платформы данных On-Premise.
RT.ClusterManager, описание API для которого представлено в данном документе, это оркестратор, в котором установка, настройка и обновление кластеров производятся по нажатию кнопки в графическом интерфейсе. При этом все настройки ОС, сервисов, сети, монтирование дисков происходят автоматически.
Примечание: API поддерживает весь функционал RT.ClusterManager, документ еще находится в разработке и будет пополняться новыми методами. Если нужного метода в документе нет, обратитесь, пожалуйста, в техническую поддержку для консультации.
API позволяет выполнять ряд функций RT.ClusterManager без использования визуального интерфейса.
Для использования API, необходимо чтобы было установлено программное обеспечение для выполнения HTTP запросов, например:
Примеры запросов к функциям API представлены для утилиты командной строки curl и Jupyter.
Примечание: Для использования API необходим доступ по ssh к серверу с RT.ClusterManager.
При использовании примеров, представленных в подразделах к данной главе следует учитывать следующее:
1. При использовании Jupyter постоянная часть может быть перенесена в заголовочную часть:
import requests import json host = "http://195.19.105.59:8082" |
примеры для Jupyter представлены с учётом этого.
2. Параметры, указанные в host – ip адрес и порт, также представленные в примерах ниже необходимо заменить на те, что соответствуют размещению RT.ClusterManager.
3. Стоит обратить внимание, что при использовании токена в командах необходимо добавить к нему суффикс «Bearer_».
4. В примерах для утилиты командной строки curl используется разделитель строк ‘\’, и параметры для удобства восприятия указаны с новой строки. Если возникнут трудности с запуском, то разделитель (‘\’) во избежание ошибок можно удалить и всю команду с параметрами расположить в одну строку, а параметры разделять одним пробелом.
5. При использовании утилиты командной строки curl следует учитывать, что в вашей версии библиотек утилиты может отсутствовать ключ «--data-raw», в этом случае его необходимо заменить его на ключ «–data» (например, такого ключа нет в CentOS 7.9 и RHEL 7.5).
6. Если вывод команды curl значений json в одну строку, вам кажется трудночитаемым, то можно придать ему более приемлемый вид:
<curl_command> | python -mjson.tool | less
Каждый запрос к API требует авторизации. Для авторизации необходим специальный уникальный токен.
Для корректной работы всех последующих примеров токен авторизации, полученный в результате запроса на получение токена, необходимо подставлять в параметр Authorization каждого запроса. Время «жизни» токена 2 часа, по их истечении для работы с API, токен надо получать заново.
Важно: При первом запуске RT.ClusterManager (который может осуществляться как с помощью web-интерфейса, так и с помощью данного API) вход осуществляется под пользователем: "rtcm", пароль: "test". При создании пользователя с ролью администратор пользователь "rtcm" будет автоматически заблокирован.
Пример запроса для получения токена:
1) Утилита командной строки curl:
curl --location --request POST 'localhost:8080/rtcm/v1/access/token' \ --header 'Content-Type: application/json' \ --data '{ "keyLogin" : "rtcm@rt.ru", "password" : "test" }' |
2) Jupyter:
url = host+"/rtcm/v1/access/token" headers = { resp_token = requests.request("POST", url, headers=headers, data=payload) |
Пример ответа:
Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsInJvbGVzIjpbIlNFQ1V
Пример запроса получения списка ролей:
1) Утилита командной строки curl:
curl --location --request GET 'localhost:8080/rtcm/v1/user/roles' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --data '' |
2) Jupyter:
url = host+"/rtcm/v1/user/roles" response = requests.request("GET", url, headers=headers, data=payload) |
Пример ответа:
[
{ "created": null,
"updated": null,
"id": 1, "name": "CLUSTER_ADMIN"
},
{
"created": null,
"updated": null,
"id": 2, "name": "SUPPORT_ADMIN"
},
....
]
При создании пользователя необходимо задать список идентификаторов ролей, которые будут ему присвоены для доступа к компонентам RT.ClusterManager. Поле rolesId берем из поля id запроса выше (см. п.4.1).
Пример запроса для создания пользователя:
1) Утилита командной строки curl:
curl --location --request POST 'localhost:8080/rtcm/v1/user' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --header 'Content-Type: application/json' \ --data '{ "userName": "Victor", "userLastName": “Vasnetstov”, "password": "restashkd3234187", "userStatus": "ACTIVE", "email": "test@rt.ru", "rolesId": [ 6 ] }' |
2) Jupyter:
url = host+"/rtcm/v1/user" headers = { |
Пример ответа:
"id": 3,
"userName": "techuser",
"password": "restashkd3234187",
"email": "test@nop.ru",
"userStatus": "ACTIVE",
"rolesId": [
1,
3,
2,
6,
7
],
"photo": null
}
После создания нового пользователя с правами администратора, для выполнения дальнейших запросов, необходимо выполнить процедуру получения токена с данной учетной записью (как указано в п. 4.1). Учетная запись пользователя rtcm более не активна.
Пример запроса получения списка пользователей:
1) Утилита командной строки curl:
curl --location --request GET 'localhost:8080/rtcm/v1/user' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --data '' |
2) Jupyter:
url = host+"/rtcm/v1/user" response = requests.request("GET", url, headers=headers, data=payload) |
Пример ответа:
[{"id":1,
"userName":"rtcm",
"password":"sha1:64000:18:+imLRu5T1BKPgMbgALiFkMid61TW7WcG:8Vl88yr17Y/qjYOs81//v0sY",
"email":"test@nop.ru",
"userStatus":"BLOCKED",
"rolesId":[3],
"photo":null},
{"id":3,
"userName":"techuser",
"password":"sha1:64000:18:Ey3IwcUNIqtBxvBoM1J71Slkh8i5FpYc:wvtKoVSnwWDPFnpLESeoA2yk",
"email":"new@nop.ru",
"userStatus":"ACTIVE",
"rolesId":[1,2,3],
"photo":null}]
Пример запроса на загрузку плагина, размещённого по соответствующему адресу:
1) Утилита командной строки curl:
curl --location --request POST 'http://localhost:8080/rtcm/v1/plugins/download' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --form 'archive=@"/Users/Rostelekom-User/Desktop/plugins/RT.System-0.0.2.tar.gz"' |
2) Jupyter:
url = host+"/rtcm/v1/plugins/download" headers = { response = requests.request("POST", url, headers=headers, data=payload, files=files) |
Операцию по загрузке плагинов необходимо повторить для загрузки всех необходимых для создания ваших кластеров плагинов, а также плагина для создания провайдеров.
Запрос для получения списка плагинов:
1) Утилита командной строки curl:
curl --location --request GET 'http://localhost:8080/rtcm/v1/plugins/list' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' |
Пример ответа:
[
....
{
"id": 3,
"name": "RT.System",
"version": "0.0.3",
"visibility": false,
"platformList": []
}
]
При создании провайдера в параметре pluginId необходимо использовать id соответствующий плагину «RT.System», для этого воспользуемся результатами ответа, полученного в разделе 4.6.
Запрос на создание провайдера:
1) Утилита командной строки curl:
curl --location --request POST 'http://localhost:8080/rtcm/v1/provider' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --header 'Content-Type: application/json' \ --data '{ "pluginId": 3, "description": "string", "providerName": "VCD-NOP" }' |
2) Jupyter:
url = host+"/rtcm/v1/provider" headers = { response = requests.request("POST", url, headers=headers, data=payload) |
Пример ответа:
{"id":1,"providerName":"vcd","description":"vcd description","componentId":15,"pluginId":2}
Важно: Пользователь, с правами которого выполняются операции в данном разделе должен иметь роли с id 6 и 7. Это ограничение было учтено в п. 4.3, подробнее про разграничение ролей можно узнать в п. 3.3 документа «RT.ClusterManager. Руководство администратора».
Пример запроса на получение параметров плагина VCD:
1) Утилита командной строки curl:
curl --location --request GET 'http://localhost:8080/rtcm/v1/provider/1/ui/config' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --header 'Content-Type: application/json' \ --data '' |
2) Jupyter:
url = host+"/rtcm/v1/provider/1/ui/config" response = requests.request("GET", url, headers=headers, data=payload) |
Пример ответа:
{
"config": [
.....
{
"id": 32,
"options": null,
"subName": "vm_cores",
"readOnly": false,
"description": "vm_cores",
"typeValue": "STRING",
"value": "2",
"defaultValue": "2",
"previousValue": "2",
"required": 1
},
{
"id": 33,
"options": null,
"subName": "vcd_org_url",
"readOnly": false,
"description": "vCD Tenant URL",
"typeValue": "STRING",
"value": "https://vcd8.vdcportal.ru/api",
"defaultValue": "https://vcd8.vdcportal.ru/api",
"previousValue": "https://vcd8.vdcportal.ru/api",
"required": 1
},
{
"id": 34,
"options": null,
"subName": "vcd_org_user",
"readOnly": false,
"description": "vCD Tenant User",
"typeValue": "STRING",
"value": "admin",
"defaultValue": "admin",
"previousValue": "admin",
"required": 1
},
......
],
"message": null,
"readOptions": false
}
Пример запроса на задание параметра:
1) Утилита командной строки curl:
curl --location --request POST 'http://localhost:8080/rtcm/v1/provider/1/ui/config' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --header 'Content-Type: application/json' \ --data '[ { "id": 720, "value": "4096" } ]' |
2) Jupyter:
url = host+"/rtcm/v1/provider/1/ui/config" headers = { response = requests.request("POST", url, headers=headers, data=payload) |
Пример ответа:
{'config': [{'id': 720,
, 'options': None,
, 'subName': 'vm_memory',
, 'readOnly': False,
, 'description': 'vm_memory',
, 'typeValue': 'STRING',
, 'value': '4096',
, 'defaultValue': '2048',
, 'previousValue': '2048',
, 'required': 1},
, {'id': 721,
, 'options': None,
, 'subName': 'vm_cpu',
, 'readOnly': False,
, 'description': 'vm_cpu',
, 'typeValue': 'STRING',
, 'value': '2',
, 'defaultValue': '2',
, 'previousValue': '2',
, 'required': 1},
…
, {'id': 733,
, 'options': None,
, 'subName': 'vcd_org_network',
, 'readOnly': False,
, 'description': 'vCD network Name',
, 'typeValue': 'SECRET',
, 'value': 'test',
, 'defaultValue': 'test',
, 'previousValue': 'test',
, 'required': 1}],
, 'message': None,
, 'readOptions': False}
В примерах, представленных в данном разделе речь шла о плагине VCD, подробнее о назначении параметров конфигурации можно посмотреть в Приложении 3.
Пример запроса расчета лицензии:
1) Утилита командной строки curl:
curl --location --request GET 'http://localhost:8080/rtcm/v1/license/2' \ --header 'Authorization: Bearer_eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJydGNtIiwianRpIjoiMSIsI' --header 'Content-Type: application/json' |
2) Jupyter:
url = host+"/rtcm/v1/license/" response = requests.request("GET", url, headers=headers, data=payload) |
Пример ответа:
{"1":3.0}
Примечание: Если у провайдера нет инсталлированных хостов, то данный запрос не будет ничего возвращать.
Скрипт install-rtcm.sh входит в состав дистрибутивного архива. Скрипт использует утилиту командной строки сurl и используется для установки RT.ClusterManager на не подготовленный сервер.
Поддерживаемые ОС:
Скрипт install-rtcm.sh в зависимости от установленных значений переменных может выполнять следующие действия:
В скрипте install-rtcm.sh используются следующие переменные:
1. INSTALL_TYPE – тип установки.
Значения:
2. RTCM_ARCH_INTERNET_SOURCE – путь до архива в сети internet.
3. USER – Имя пользователь, для доступа к Nexus.
4. PASS – пароль пользователя, для доступа к Nexus.
5. DC_BIN – путь до бинарного файла docker-compose
6. RTCM_ARCH_LOCAL_SOURCE – путь до размещённого локально архива RT.ClusterManager.
7. AUTO_CORRECTION – Попытка исправить проблемы во время запуска скрипта с параметром check.
Значения:
8. RUN_RTCM – Запустить RT.ClusterManager после завершения установки.
Значения:
При запуске скрипта install-rtcm.sh без параметров будет выдана подсказка по его использованию.
Основные варианты запуска скрипта:
Для запуска скрипта установки RT.ClusterManager используются 2 варианта:
1. Когда доступ к архиву с инсталляционными файлами осуществляется через интернет с использованием Nexus. В этом случае необходимо в скрипте установить для перечисленных переменных следующие значения:
2. Когда архив с RT.ClusterManager уже скачан и скрипт install-rtcm.sh размещён в том же каталоге. В этом случае необходимо в скрипте установить следующее значение переменной:
После того как вы выбрали вариант установки и заполнили соответствующие значения переменных запустите скрипт:
./install-rtcm.sh install
Для получения данных по конкретному хосту запустите скрипт:
./install-rtcm.sh info
Для проверки готовности RT.ClusterManager запустите скрипт:
./install-rtcm.sh check
Скрипт topgun.sh входит в состав дистрибутивного архива. Скрипт использует утилиту командной строки сurl. Использование скрипта topgun.sh не требует авторизации и использования токенов.
Примечание: Для использование скрипта topgun.sh необходим доступ к серверу с RT.ClusterManager по ssh.
Запуск скрипта без параметров выводит подсказку по использованию:
./topgun.sh
Для запуска RT.ClusterManager наберите:
./topgun.sh up
или
./topgun.sh start
Для остановки RT.ClusterManager наберите:
./topgun.sh down
При остановке RT.ClusterManager удаляются контейнеры, но остаются данные. Для сохранности данных необходимо, чтобы были правильно настроены volumes в docker-compose.yaml.
Для создания резервной копии RT.ClusterManager наберите:
./topgun.sh backup
В директории backuped создаётся новая директория (имя директории формируется по следующему правилу: НАЗВАНИЕ_ХОСТА-ДАТА-ВЕРСИЯ_RTCM), куда складываются директории перечисленные в массиве скрипта topgun.sh.
Примечание: Создание резервной копии рекомендуется перед действиями с RT.ClusterManager.
Для остановки RT.ClusterManager без удаления контейнеров наберите:
./topgun.sh stop
Выключает rtcm (но оставляет контейнеры, сейчас не рекомендована к использованию, так как это не перезагружает конфигурационные файлы)
Для проверки директорий наберите:
./topgun.sh check
Для перезапуска контейнеров наберите:
./topgun restart
Будут перезапущены контейнеры, но перечитывание файла конфигурации docker-compose.yaml не будет произведено.
Для удаления файлов, и очистки RT.ClusterManager наберите:
./topgun clean
Очищает (уничтожает все файлы), включая базу RT.ClusterManager.
Полезно разработчикам и тестировщикам.
Важно: Не использовать на продуктивных системах.
Для удаления файлов, и очистки RT.ClusterManager и его перезапуска наберите:
./topgun destroy
Очищает файлы и сразу запускает RT.ClusterManager, используется при тестировании.
Важно: Не использовать на продуктивных системах.
1. curl: (6) Could not resolve host: localfhost; Unknown error
Проверьте IP адрес.
2. curl: (7) Failed connect to localhost:8887; Connection refused
Проверьте порт.
3. HTTP Status 401 – Unauthorized
Возможна ошибка токена.
4. Whitelabel Error Page + curl: (6) Could not resolve host: Authorization; Unknown error + This application has no explicit mapping for /error, so you are seeing this as a fallback
В запросе есть \ но перенос строки не поставлен:
.../user/roles' \ --header 'Author...
Нужно в несколько строк:
.../user/roles' \
--header 'Author...
Или одной строкой, но без слеша → \
.../user/roles' --header 'Author...
5. Не выполняет команду, а на следующей строке остаётся ">" ожидающая ввода дальнейшей команды
Лишнее кавычка или наоборот не хватает кавычки.
6. curl: option --data-raw: is unknown
Устаревший curl, не имеющий ключа "--data-raw", использовать взамен ключ "--data".
7. "message":"Компонент провайдера не найден"
При создании провайдера необходимо указывать ID RT.System плагина, посмотреть ID можно используя запрос из п. 4.6 или в web-интерфейсе RT.ClusterManager (CM → Меню пользователя –в правом верхнем углу → Плагины).
В таблице ниже представлены только основные методы API, в зависимости от установленных плагинов могут добавляться соответствующие им методы API.
№ |
Метод API |
Вызов, параметры |
1 | Получить токен |
POST http://{{host}}/rtcm/v1/access/token Headers: Content-Type application/json Body: { "username" : "имя_пользователя", "password" : "пароль_пользователя" } |
2 | Получить список доступных ролей |
GET http://{{host}}/rtcm/v1/user/roles Headers: Authorization Bearer_{{token}} |
3 | Создать пользователя |
POST http://{{host}}/rtcm/v1/user Headers: Authorization Bearer_{{token}} Content-Type application/json Body: { "userName": "задайте_имя_пользователя", "password": "задайте_пароль", "userStatus": "ACTIVE", "email": "почта_пользователя", "rolesId": [список_идентификаторов_ролей_через_запятую] } |
4 | Получить список пользователей и их параметры |
GET http://{{host}}/rtcm/v1/user Headers: Authorization Bearer_{{token}} |
5 | Модифицировать данные пользователя |
PUT http://{{host}}/rtcm/v1/user Headers: Authorization Bearer_{{token}} Content-Type application/json Body: { "id": id_модифицируемого_пользователя, "userName": "имя_пользователя", "password": "пароль", "email": "почта_пользователя", "userStatus": "BLOCKED или ACTIVE", "rolesId": [список_идентификаторов_ролей_через_запятую], "photo": null } |
6 | Загрузка плагинов |
POST http://{{host}}/rtcm/v1/provider Headers: Authorization Bearer_{{token}} Content-Type application/json Body: { files=[ ('archive',('имя_файла_с_расширением',open('полный_путь_к_файлу/имя_файла_с_расширением','rb'),'application/octet-stream')) } |
7 | Получить список плагинов |
GET http://{{host}}/rtcm/v1/plugins/list Headers: Authorization Bearer_{{token}} |
8 | Создать провайдера |
POST http://{{host}}/rtcm/v1/provider Headers: Authorization Bearer_{{token}} Content-Type application/json Body: { "pluginId": id_провайдера, "description": "текст_описания_провайдера", "providerName": "имя_провайдера" } |
9 | Получить конфигурационный файл по заданному провайдеру |
GET http://{{host}}/rtcm/v1/provider/1/ui/config Headers: Authorization Bearer_{{token}} |
10 | Изменить конфигурационный файл по заданному провайдеру |
POST http://{{host}}/rtcm/v1/provider/1/ui/config Headers: Authorization Bearer_{{token}} Content-Type application/json Body: [ { "id": id_параметра, "value": "присваиваемое_значение" }, { "id": id_параметра, "value": "присваиваемое_значение" }, … ] |
11 | Данные о лицензиях с разбивкой по кластерам |
GET http://{{host}}/rtcm/v1/license Headers: Authorization Bearer_{{token}} |
Цветом помечены изменяемые значения.
Плагин VCD предназначен для работы с облаками на базе Vmware Vcloud Director. В плагине используется технология Terraform.
Описание параметров плагина VCD представлено в таблице ниже:
№ |
Наименование параметра |
Описание |
1 | vm_memory | Объем оперативной памяти для виртуальной памяти в гигабайтах. |
2 | vm_cpu | Количество виртуальных процессоров для виртуальной машины. |
3 | limit_vm_cpu | Доступное заказчику количество виртуальных процессоров в облачном пуле ресурсов. |
4 | vm_cores | Количество виртуальных ядер для каждого виртуального процессора. |
5 | limit_vm_cores | Доступное заказчику количество виртуальных ядер в облачном пуле ресурсов. |
6 | limit_vm_HDD | Доступный Заказчику лимит дискового пространства в облачном пуле ресурсов. |
7 | vcd_org_url | url адрес Vmware Vcloud Director. |
8 | vcd_org_user | Логин для входа в Vmware Vcloud Director. |
9 | vcd_org_password | Пароль для входа в Vmware Vcloud Director. |
10 | vcd_org_org | Наименование организации Vmware Vcloud Director. |
11 | vcd_org_vdc | Имя виртуального дата центра заказчика. |
12 | vcd_org_max_retry_timeout | Максимальное время ожидания ответов от Vmware Vcloud Director. |
13 | vcd_org_allow_unverified_ssl | Разрешить SSL подключение с использованием неподтвержденных сертификатов. |
14 | vcd_org_edge_name | Имя шлюза в виртуальном пространстве заказчика. |
15 | vcd_org_catalog | Наименование используемой библиотеки образов. |
16 | vcd_template_os_centos7 | Шаблон для операционной системы Centos7. |
17 | vcd_org_network | Имя сети в виртуальном пространстве заказчика. |
Плагин DE предназначен для работы с облаками на базе платформы Digital Energy (Базис.DynamiX). В плагине используется технология Terraform.
Описание параметров плагина DE представлено в таблице ниже:
№ |
Наименование параметра |
Описание |
1 | de_controller_url | URL контроллера облачной платформы Базис.DynamiX. |
2 | de_oauth2_url | URL авторизационного провайдера работающего по протоколу OAuth2. |
3 | de_app_id | Параметр авторизации на провайдере с поддержкой OAuth2 , используется совместно с de_app_secret. |
4 | de_app_secret | Параметр авторизации на провайдере с поддержкой OAuth2 , используется совместно с de_app_id. |
5 | de_account_id | численный идентификатор подписчика, используется как альтернатива account_name. |
6 | de_image_id | Численный идентификатор образа. Образы это дисковые ресурсы, уже содержащие некоторые данные ("golden image"), для которых реализован механизм быстрого клонирования/копирования в новый диск. |
7 | de_net_id | Численный идентификатор виртуальной сети. |