From 9df6d0d3f2314623ef744b76c2d5e35a9fdac8be Mon Sep 17 00:00:00 2001 From: Ilya Otinov Date: Fri, 27 Feb 2026 14:12:53 +0300 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B5=D1=82=D0=B5=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/v1/manage.proto | 70 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/proto/v1/manage.proto b/proto/v1/manage.proto index 220932b..b65daa2 100644 --- a/proto/v1/manage.proto +++ b/proto/v1/manage.proto @@ -529,8 +529,8 @@ message CreateVpsRequest { // Открыть доступ к VPS файловому менеджеру bool beget_ssh_access_allowed = 8; - // Приватные сети, к которым необходимо подключить VPS (необязательное поле) - repeated PrivateNetworkInfo private_networks = 12; + // Legacy: приватные сети, оставлено для обратной совместимости + repeated PrivateNetworkInfo private_networks = 12 [deprecated = true]; // Слаг, который вернется в ответе в VpsInfo (необязательное поле). string link_slug = 14; @@ -556,6 +556,9 @@ message CreateVpsRequest { // Ранг сервера, до которого будет размещен сервер в интерфейсе как закреплённый string ui_pinned_before_rank = 22; + + // Унифицированный формат сетевых интерфейсов + repeated NetworkInterface network_interfaces = 23; } @@ -659,6 +662,18 @@ message CreateVpsResponse { // Регион VPS не совпадает с регионом образа IMAGE_REGION_MISMATCH = 24; + + // existing_ip не принадлежит пользователю + ADDRESS_NOT_OWNED = 25; + + // Передано >1 public/private ip на этапе create + MULTIPLE_IPS_NOT_SUPPORTED_YET = 26; + + // Переданы и private_networks, и network_interfaces + CONFLICTING_NETWORK_FIELDS = 27; + + // Неподдерживаемая версия IP + UNSUPPORTED_IP_VERSION = 28; } message SoftwareVariableError { @@ -1873,6 +1888,55 @@ message PrivateNetworkInfo { string address = 2; } +message NetworkInterface { + oneof interface { + PublicInterface public = 1; + PrivateInterface private = 2; + } +} + +message PublicInterface { + oneof ip { + // Зарезервировать новый public IPv4. + AllocateNewPublicIp allocate_new = 1; + // Использовать уже принадлежащий пользователю public IPv4. + ExistingPublicIp existing = 2; + } + + message AllocateNewPublicIp { + } + + message ExistingPublicIp { + // Обязательный IP-адрес пользователя. + string address = 1; + } +} + +message PrivateInterface { + oneof network_target { + // Сеть выбирается сервером автоматически. + DefaultPrivateNetwork default_network = 1; + } + + oneof ip { + // Выбрать свободный IP в private network. + AllocateNewPrivateIp allocate_new = 10; + // Использовать конкретный IP в private network. + SpecificPrivateIp specific = 11; + } + + message DefaultPrivateNetwork { + } + + message AllocateNewPrivateIp { + } + + message SpecificPrivateIp { + // Обязательный IP-адрес в private network. + string address = 1; + } +} + message ReserveVpsSubdomainRequest { } @@ -1966,7 +2030,7 @@ message ChangePinnedRequest { // Ранг сервера, после которого будет перемещён перемещаемый сервер в интерфейсе как закреплённый string after_rank = 3; - + // Ранг сервера, до которого будет перемещён перемещаемый сервер в интерфейсе как закреплённый string before_rank = 4; } From b0a4f8d56cdc92db4e577f5f66b7d27bf2db8be8 Mon Sep 17 00:00:00 2001 From: Ilya Otinov Date: Fri, 27 Feb 2026 14:32:57 +0300 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/v1/manage.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/v1/manage.proto b/proto/v1/manage.proto index b65daa2..8ee9bae 100644 --- a/proto/v1/manage.proto +++ b/proto/v1/manage.proto @@ -666,7 +666,7 @@ message CreateVpsResponse { // existing_ip не принадлежит пользователю ADDRESS_NOT_OWNED = 25; - // Передано >1 public/private ip на этапе create + // Передано >1 public/private интерфейса на этапе create MULTIPLE_IPS_NOT_SUPPORTED_YET = 26; // Переданы и private_networks, и network_interfaces From 2b3f7e07aae957375976a5013a67a25eff84639a Mon Sep 17 00:00:00 2001 From: Ilya Otinov Date: Fri, 27 Feb 2026 17:43:01 +0300 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=D0=B2=D0=BD=D0=B5=D1=81=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/v1/manage.proto | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/proto/v1/manage.proto b/proto/v1/manage.proto index 8ee9bae..888de45 100644 --- a/proto/v1/manage.proto +++ b/proto/v1/manage.proto @@ -1900,29 +1900,26 @@ message PublicInterface { // Зарезервировать новый public IPv4. AllocateNewPublicIp allocate_new = 1; // Использовать уже принадлежащий пользователю public IPv4. - ExistingPublicIp existing = 2; + UseExistingPublicIp existing = 2; } message AllocateNewPublicIp { } - message ExistingPublicIp { + message UseExistingPublicIp { // Обязательный IP-адрес пользователя. string address = 1; } } message PrivateInterface { - oneof network_target { - // Сеть выбирается сервером автоматически. - DefaultPrivateNetwork default_network = 1; - } + string network_id = 1; oneof ip { // Выбрать свободный IP в private network. - AllocateNewPrivateIp allocate_new = 10; + AllocateNewPrivateIp allocate_new = 2; // Использовать конкретный IP в private network. - SpecificPrivateIp specific = 11; + AllocateSpecificPrivateIp specific = 3; } message DefaultPrivateNetwork { @@ -1931,7 +1928,7 @@ message PrivateInterface { message AllocateNewPrivateIp { } - message SpecificPrivateIp { + message AllocateSpecificPrivateIp { // Обязательный IP-адрес в private network. string address = 1; } From f3741595e0f1784f023c927fd3edef7d0c57aad9 Mon Sep 17 00:00:00 2001 From: Ilya Otinov Date: Wed, 11 Mar 2026 15:56:24 +0300 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BA=D0=BE=D0=B4=D1=8B=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BE=D0=BA=20=D0=B4=D0=BB=D1=8F=20detach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/v1/manage.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/proto/v1/manage.proto b/proto/v1/manage.proto index 888de45..27c9e47 100644 --- a/proto/v1/manage.proto +++ b/proto/v1/manage.proto @@ -1684,6 +1684,12 @@ message DetachIpAddressResponse { // Произошла ошибка при удалении дополнительного IP адреса внутри гостевой ОС GUEST_OS_REMOVE_IP_ADDRESS_FAILED = 1; + + // Нельзя отвязать последний ip адрес vps. + CANNOT_DETACH_LAST_IP_ADDRESS = 2; + + // IP адрес не принадлежит vps. + IP_NOT_BELONGS_TO_VPS = 3; } } }