Лимиты и квоты
Аккаунт ограничен и по количеству ресурсов, и по суммарным вычислительным ресурсам машин. API отдаёт эти ограничения вместе с текущим потреблением, чтобы клиент мог показать остаток и предупредить пользователя до отправки запроса, а не после отказа.
Что возвращает GET /limits
Ответ состоит из квот. У каждой квоты три числа: limit — сколько всего можно,
used — сколько занято сейчас, remaining — сколько ещё можно создать. Поле
remaining никогда не бывает отрицательным.
projects,accessTokens,networks,publicIps— квоты на количество ресурсов у пользователя.vmResources— суммарныеcpu,ramиdiskпо всем машинам пользователя. Единицы: ядра, гигабайты, гигабайты.maxSshKeysPerProject— число, а не квота: ограничение действует внутри одного проекта, поэтому потребление зависит от того, какой проект вы смотрите.
curl --request GET \
--url 'https://api.zennohosting.com/v1/limits' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json'
Потребление — это снимок, а не гарантия
Значение used отражает состояние на момент запроса и может немного отставать. Оно предназначено для
показа и предварительных проверок. Окончательное решение принимается при создании ресурса, поэтому запрос может быть
отклонён даже тогда, когда remaining только что был больше нуля. Считайте лимиты подсказкой для
интерфейса, а не заменой обработки ошибки.
Что возвращает GET /limits/name-lengths
Это не квоты, а правила валидации: максимальные длины значений, которые задаёт пользователь. Они одинаковы для всех и не зависят от запроса, поэтому потребления в ответе нет — только предельные числа.
maxProjectNameLength,maxNetworkNameLength,maxVmNameLength— имена проекта, сети и машины.maxSshKeyNameLengthиmaxSshKeyPublicKeyLength— имя SSH-ключа и длина самого публичного ключа.maxAccessTokenNameLength— имя токена доступа.
Забирайте эти значения при старте клиента и проверяйте по ним ввод до отправки запроса: API применяет те же ограничения и отклонит слишком длинное значение с ошибкой валидации.
curl --request GET \
--url 'https://api.zennohosting.com/v1/limits/name-lengths' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json'
Три разных ограничения
Не путайте квоты аккаунта с двумя другими видами ограничений — они живут в разных местах API и ведут себя по-разному.
Квота аккаунта — сколько ресурсов разрешено вам. Смотрите
GET /limits.Доступность мощностей — есть ли сейчас место в кластере под конкретную конфигурацию. Смотрите поля
availabilityиmaxCountв списке конфигураций. Это ограничение платформы, а не ваше: при его нехватке создание машины отвечает409 Conflictс кодомinsufficientCapacity.Правила валидации — длины имён и ключей. Смотрите
GET /limits/name-lengths.
- 1
Запросите лимиты при входе пользователя
Один вызов
GET /limitsдаёт всё, что нужно для индикаторов остатка по проектам, сетям, публичным адресам, токенам и вычислительным ресурсам. - 2
Кешируйте длины имён, но не потребление
Ответ
GET /limits/name-lengthsстабилен, его можно запросить один раз за сессию. Потребление изGET /limitsменяется вместе с ресурсами, поэтому обновляйте его после создания и удаления. - 3
Проверяйте ввод до отправки
Если
remainingравен нулю, не отправляйте запрос на создание — объясните пользователю, что квота исчерпана. Если имя длиннее допустимого, покажите ошибку в форме. - 4
Всё равно обрабатывайте отказ
Проверка на клиенте не отменяет обработку ответа: между чтением лимитов и созданием ресурса состояние могло измениться, в том числе из другой сессии того же пользователя.
Связанные эндпоинты
/limitsПолучить квоты пользователя вместе с текущим потреблением.
/limits/name-lengthsПолучить максимальные длины имён и публичного SSH-ключа.
/configurationsПроверить доступность мощностей под конфигурацию машины.
/projects/{projectId}Прочитать resourceCounts проекта: машины, сети, публичные адреса.