Как создать пул ресурсов биллинга с помощью API?
Пул ресурсов биллинга создаётся методом POST /v1/connections/upsert. Для доступа используется JWT billing API.
Все адреса, имена и идентификаторы в примерах условные. Значения в угловых скобках необходимо заменить своими данными.
Получение токена доступа:
Запрос:
POST /v1/auth/token HTTP/1.1 Host: billing.example.com Content-Type: application/json { "client_id": "<client_id>", "client_secret": "<client_secret>" }
Поле
Описание
client_idИдентификатор клиента billing API.
client_secretСекрет клиента billing API.
При успешной авторизации API возвращает HTTP 200. Из ответа необходимо взять поле
access_tokenи передавать его в заголовке последующих запросов:Authorization: Bearer <access_token>
Используется токен billing API. Пароль OpenStack передаётся отдельно в параметрах создаваемого пула.
Создание пула:
Запрос:
POST /v1/connections/upsert HTTP/1.1 Host: billing.example.com Authorization: Bearer <access_token> Content-Type: application/json
Пример тела запроса:
{ "name": "example-pool", "domain": "ExampleDomain", "username": "service-user", "password": "<openstack_password>", "auth_url": "https://identity.example.com:5000", "project_name": "example-project", "region": "ExampleRegion", "currency": "RUB" }
Параметры тела запроса:
Поле
Обязательность
Описание
nameДа
Имя пула.
domainДа
Домен для авторизации в OpenStack.
usernameДа
Имя пользователя OpenStack.
passwordДа
Пароль пользователя OpenStack.
auth_urlДа
URL сервиса идентификации OpenStack Keystone.
project_nameУсловно
Имя проекта OpenStack. Необходимо передать хотя бы одно из полей
project_nameилиproject_id.project_idУсловно
Идентификатор проекта OpenStack; альтернатива
project_name.regionНет
Регион OpenStack. Поле называется именно
region.currencyДа
Код валюты ISO 4217, например
RUB.Для создания нового пула поле
idв примере не передаётся. Метод также поддерживает обновление существующего пула; учитывайте это при повторной отправке запросов.Требования к currency:
Поле
currencyнеобходимо передавать явно. Значение по умолчанию при отсутствии поля не подставляется:Поле не может отсутствовать.
Значение
nullне допускается.Пустая строка не допускается.
Значение должно быть действительным кодом валюты ISO 4217.
Успешный ответ:
API возвращает HTTP 200 и объект
connectionс параметрами созданного пула.Пример ответа с условными значениями:
{ "connection": { "auth_url": "https://identity.example.com:5000", "currency": "RUB", "description": null, "domain": "ExampleDomain", "hidden_at": null, "id": "42", "is_hidden": false, "name": "example-pool", "project_id": null, "project_name": "example-project", "region": "ExampleRegion", "username": "service-user", "uuid": "123e4567-e89b-42d3-a456-426614174000" } }
Сохраните возвращённые
idиuuidдля идентификации пула. Пароль в ответе не возвращается.
Проверка созданного пула:
Получите список пулов:
GET /v1/connections HTTP/1.1 Host: billing.example.com Authorization: Bearer <access_token>
При успешном запросе API возвращает HTTP 200 и объект с массивом
connections. Найдите запись поid, полученному при создании, и проверьте её параметры:name,auth_url,project_nameилиproject_id,region,currency.Наличие записи подтверждает сохранение пула в billing.
Ошибки валидации:
Если параметры запроса не соответствуют требованиям, API возвращает HTTP 422 и массив ошибок.
Пример ответа при отсутствии
currency:[ { "loc": ["currency"], "msg": "field required", "type": "value_error.missing" } ]
Параметры:
Ошибка в запросе
Сообщение
msgТип
typeОтсутствует
currencyfield requiredvalue_error.missingcurrencyравнаnullnone is not an allowed valuetype_error.none.not_allowedcurrency— пустая строкаensure this value has at least 1 charactersvalue_error.any_str.min_lengthcurrencyравнаINVALIDcurrency must be a valid ISO 4217 currency code, got 'INVALID'value_error.validationОтсутствуют и
project_name, иproject_idEither project_name or project_id must be providedvalue_errorПоле
locуказывает, к какому параметру относится ошибка. Для ошибки выбора проекта используетсяloc: ["__root__"], поскольку проверяется сочетание полей.