Skip to content

Commit

Permalink
BH-15192 vps configurator (#62)
Browse files Browse the repository at this point in the history
* BH-15192 vps configurator

---------

Co-authored-by: Anton Tkachenko <[email protected]>
  • Loading branch information
CanaryKnight and Anton Tkachenko authored Feb 9, 2023
1 parent 4ddccc2 commit 4c7e7c8
Show file tree
Hide file tree
Showing 3 changed files with 170 additions and 6 deletions.
137 changes: 137 additions & 0 deletions proto/v1/configurator.proto
Original file line number Diff line number Diff line change
@@ -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;
}

28 changes: 22 additions & 6 deletions proto/v1/manage.proto
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ service ManageService {
// Для получения доступных идентификаторов конфигурации `configuration_id`
// необходимо использовать метод "Получить доступные конфигурации VPS" из API "Облачные серверы".
//
// Для получения доступных параметров конфигурации `configuration_params` и ее стоимости
// необходимо использовать метод "Рассчитать конфигурацию" из API "Конфигуратор VPS".
//
// Для получения доступных идентификаторов ПО `software.id` и обязательных переменных для установки `software.variable`
// необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы"
// необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы".
//
// Для получения доступных идентификаторов снапшотов `snapshot_id` необходимо использовать метод
// "Получить список снапшотов" из API "Облачные серверы".
Expand Down Expand Up @@ -181,7 +184,7 @@ service ManageService {
// необходимо использовать метод "Получить доступные конфигурации VPS" из API "Облачные серверы".
//
// Для получения доступных идентификаторов ПО `software.id` и обязательных переменных для установки `software.variable`
// необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы"
// необходимо использовать метод "Получить список доступного ПО" из API "Облачные серверы".
//
// Для получения доступных идентификаторов снапшотов `snapshot_id` необходимо использовать метод
// "Получить список снапшотов" из API "Облачные серверы".
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -1387,6 +1400,9 @@ message VpsConfiguration {

// Является ли конфигурация персональной
bool custom = 9;

// Является ли конфигурация настраиваемой
bool configurable = 10;
}

message AttachIpAddressRequest {
Expand Down
11 changes: 11 additions & 0 deletions proto/v1/structures.proto
Original file line number Diff line number Diff line change
Expand Up @@ -327,3 +327,14 @@ message InstalledSoftwareInfo {
// Уникальный идентификатор в рамках списка ПО полученного через метод "Получить список доступного ПО" из API "Облачные серверы"
string slug = 13;
}

message ConfigurationParams {
// Количество ядер процессора
uint32 cpu_count = 1;

// Объем дисковой квоты в Мб
uint32 disk_size = 2;

// Объем оперативной памяти в Мб
uint32 memory = 3;
}

0 comments on commit 4c7e7c8

Please sign in to comment.