diff --git a/proto/v1/configurator.proto b/proto/v1/configurator.proto new file mode 100644 index 0000000..7302e39 --- /dev/null +++ b/proto/v1/configurator.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; + +package beget.vps.v1.configurator; + +import "google/api/annotations.proto"; +import "vps/proto/v1/structures.proto"; + +// Конфигуратор VPS +// +// Предоставляет набор методов для получения настраиваемой конфигурации VPS. +service ConfiguratorService { + // Получить настройки конфигуратора + // + // Возвращает настройки конфигуратора и его доступность. + rpc getConfiguratorInfo(GetConfiguratorInfoRequest) returns (GetConfiguratorInfoResponse) { + option (google.api.http) = { + get: "/v1/vps/configurator/info" + }; + } + + // Получить расчет конфигурации + // + // Проверяет возможность создания переданной конфигурации, возвращает ближайшую доступную конфигурацию и ее стоимость. + rpc getCalculation(GetCalculationRequest) returns (GetCalculationResponse) { + option (google.api.http) = { + get: "/v1/vps/configurator/calculation" + }; + } +} + +message GetConfiguratorInfoRequest { +} + +message GetConfiguratorInfoResponse { + // Настройки конфигуратора + ConfiguratorSettings settings = 1; + + // Флаг доступности конфигуратора + bool is_available = 2; +} + +message GetCalculationRequest { + // Параметры конфигурации + structures.ConfigurationParams params = 1; + + // Идентификатор VPS, для которой требуется рассчитать конфигурацию (необязательное поле) + string vps_id = 2; +} + +message GetCalculationResponse { + // Результат запроса + oneof result { + // Результат запроса: информация о конфигурации + Success success = 1; + + // Результат запроса: ошибка конфигуратора + Error error = 2; + } + + message Success { + // Настройки конфигуратора + ConfiguratorSettings settings = 1; + + // Доступная конфигурация + structures.ConfigurationParams params = 2; + + // Стоимость полученной конфигурации в день + double price_day = 3; + + // Стоимость полученной конфигурации в месяц + double price_month = 4; + } + + message Error { + // Код ошибки + Code code = 1; + + // Описание ошибки + string message = 2; + } + enum Code { + // Действие в данный момент недоступно + TEMPORARILY_UNAVAILABLE = 0; + } +} + +message ConfiguratorSettings { + // Настройки CPU + CpuSettings cpu_settings = 1; + + // Настройки диска + DiskSettings disk_settings = 2; + + // Настройки памяти + MemorySettings memory_settings = 3; +} + +message CpuSettings { + // Диапазон значений кол-ва CPU min/max в шт + Range range = 1; + + // Диапазон доступных значений кол-ва CPU min/max в шт + Range available_range = 2; + + // Шаг в шт + uint32 step = 3; +} + +message DiskSettings { + // Диапазон значений объема дисковой квоты min/max в МБ + Range range = 1; + + // Диапазон доступных значений объема дисковой квоты min/max в МБ + Range available_range = 2; + + // Шаг в МБ + uint32 step = 3; +} + +message MemorySettings { + // Диапазон значений объема памяти min/max в МБ + Range range = 1; + + // Диапазон доступных значений объема памяти min/max в МБ + Range available_range = 2; + + // Шаг в МБ + uint32 step = 3; +} + +message Range { + // Минимальное значение + uint32 min = 1; + // Максимальное значение + uint32 max = 2; +} + diff --git a/proto/v1/manage.proto b/proto/v1/manage.proto index 143d799..0c796a7 100644 --- a/proto/v1/manage.proto +++ b/proto/v1/manage.proto @@ -16,8 +16,11 @@ service ManageService { // Для получения доступных идентификаторов конфигурации `configuration_id` // необходимо использовать метод "Получить доступные конфигурации VPS" из API "Облачные серверы". // + // Для получения доступных параметров конфигурации `configuration_params` и ее стоимости + // необходимо использовать метод "Рассчитать конфигурацию" из API "Конфигуратор VPS". + // // Для получения доступных идентификаторов ПО `software.id` и обязательных переменных для установки `software.variable` - // необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы" + // необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы". // // Для получения доступных идентификаторов снапшотов `snapshot_id` необходимо использовать метод // "Получить список снапшотов" из API "Облачные серверы". @@ -181,7 +184,7 @@ service ManageService { // необходимо использовать метод "Получить доступные конфигурации VPS" из API "Облачные серверы". // // Для получения доступных идентификаторов ПО `software.id` и обязательных переменных для установки `software.variable` - // необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы" + // необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы". // // Для получения доступных идентификаторов снапшотов `snapshot_id` необходимо использовать метод // "Получить список снапшотов" из API "Облачные серверы". @@ -443,8 +446,13 @@ message CreateVpsRequest { // Дополнительное описание VPS (необязательное поле) string description = 3; - // Идентификатор необходимой конфигурации (тариф) - string configuration_id = 4; + // Конфигурация + oneof configuration { + // Конфигурация: Идентификатор необходимой конфигурации (тариф) + string configuration_id = 4; + // Конфигурация: Параметры конфигурации VPS + structures.ConfigurationParams configuration_params = 13; + } // Источник для диска сервера oneof source { @@ -897,8 +905,13 @@ message ChangeConfigurationRequest { // Идентификатор VPS, в формате uuid v4 string id = 1; - // Название конфигурации(тарифа) - string configuration_id = 2; + // Конфигурация + oneof configuration { + // Конфигурация: Идентификатор необходимой конфигурации (тариф) + string configuration_id = 2; + // Конфигурация: Параметры конфигурации VPS + structures.ConfigurationParams configuration_params = 3; + } } message ChangeConfigurationResponse { @@ -1387,6 +1400,9 @@ message VpsConfiguration { // Является ли конфигурация персональной bool custom = 9; + + // Является ли конфигурация настраиваемой + bool configurable = 10; } message AttachIpAddressRequest { diff --git a/proto/v1/structures.proto b/proto/v1/structures.proto index b5f2baa..0fa6082 100644 --- a/proto/v1/structures.proto +++ b/proto/v1/structures.proto @@ -327,3 +327,14 @@ message InstalledSoftwareInfo { // Уникальный идентификатор в рамках списка ПО полученного через метод "Получить список доступного ПО" из API "Облачные серверы" string slug = 13; } + +message ConfigurationParams { + // Количество ядер процессора + uint32 cpu_count = 1; + + // Объем дисковой квоты в Мб + uint32 disk_size = 2; + + // Объем оперативной памяти в Мб + uint32 memory = 3; +}