Как создать пул ресурсов биллинга с помощью API?

Пул ресурсов биллинга создаётся методом POST /v1/connections/upsert. Для доступа используется JWT billing API.

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

  1. Получение токена доступа:

    Запрос:

    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 передаётся отдельно в параметрах создаваемого пула.

  2. Создание пула:

    Запрос:

    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 для идентификации пула. Пароль в ответе не возвращается.

  3. Проверка созданного пула:

    Получите список пулов:

    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.

  4. Ошибки валидации:

    Если параметры запроса не соответствуют требованиям, API возвращает HTTP 422 и массив ошибок.

    Пример ответа при отсутствии currency:

    [
      {
        "loc": ["currency"],
        "msg": "field required",
        "type": "value_error.missing"
      }
    ]
    

    Параметры:

    Ошибка в запросе

    Сообщение msg

    Тип type

    Отсутствует currency

    field required

    value_error.missing

    currency равна null

    none is not an allowed value

    type_error.none.not_allowed

    currency — пустая строка

    ensure this value has at least 1 characters

    value_error.any_str.min_length

    currency равна INVALID

    currency must be a valid ISO 4217 currency code, got 'INVALID'

    value_error.validation

    Отсутствуют и project_name, и project_id

    Either project_name or project_id must be provided

    value_error

    Поле loc указывает, к какому параметру относится ошибка. Для ошибки выбора проекта используется loc: ["__root__"], поскольку проверяется сочетание полей.