From 47945a07cbad582cd735bdd9dea5a566fb358b40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 19 May 2026 08:24:30 +0000 Subject: [PATCH] Publish proto files from ff12ea798 --- endpoints.md | 2 + nebius/compute/v1/instance.proto | 13 ++-- nebius/compute/v1/nvlinstancegroup.proto | 51 +++++++++++++ .../compute/v1/nvlinstancegroup_service.proto | 61 ++++++++++++++++ nebius/dns/v1/record.proto | 71 +++++++++++++++++++ nebius/dns/v1/record_service.proto | 10 +++ nebius/dns/v1/zone.proto | 66 +++++++++++++++++ nebius/dns/v1/zone_service.proto | 10 +++ nebius/mk8s/v1/cluster.proto | 7 +- nebius/mk8s/v1/cluster_service.proto | 4 +- nebius/mk8s/v1/node_group.proto | 10 ++- nebius/mk8s/v1/node_group_service.proto | 11 ++- 12 files changed, 306 insertions(+), 10 deletions(-) create mode 100644 nebius/compute/v1/nvlinstancegroup.proto create mode 100644 nebius/compute/v1/nvlinstancegroup_service.proto diff --git a/endpoints.md b/endpoints.md index 1937d31..8097238 100755 --- a/endpoints.md +++ b/endpoints.md @@ -27,6 +27,7 @@ * [nebius.compute.v1.ImageService](nebius/compute/v1/image_service.proto) * [nebius.compute.v1.InstanceService](nebius/compute/v1/instance_service.proto) * [nebius.compute.v1.MaintenanceService](nebius/compute/v1/maintenance_service.proto) + * [nebius.compute.v1.NVLInstanceGroupService](nebius/compute/v1/nvlinstancegroup_service.proto) * [nebius.compute.v1.NodeService](nebius/compute/v1/node_service.proto) * [nebius.compute.v1.PlatformService](nebius/compute/v1/platform_service.proto) * [nebius.compute.v1alpha1.DiskService](nebius/compute/v1alpha1/disk_service.proto) @@ -70,6 +71,7 @@ * [nebius.applications.v1alpha1.K8sReleaseService](nebius/applications/v1alpha1/k8s_release_service.proto) * [nebius.common.v1.OperationService](nebius/common/v1/operation_service.proto) * dns.api.nebius.cloud:443 + * [nebius.common.v1.OperationService](nebius/common/v1/operation_service.proto) * [nebius.dns.v1.RecordService](nebius/dns/v1/record_service.proto) * [nebius.dns.v1.ZoneService](nebius/dns/v1/zone_service.proto) * dpl.mysterybox.api.nebius.cloud:443 diff --git a/nebius/compute/v1/instance.proto b/nebius/compute/v1/instance.proto index db8711f..96a105c 100644 --- a/nebius/compute/v1/instance.proto +++ b/nebius/compute/v1/instance.proto @@ -87,6 +87,9 @@ message InstanceSpec { ] }]; + // NVLink Instance Group ID associated with the VM + string nvl_instance_group_id = 21; + ReservationPolicy reservation_policy = 23; // Local disks are meaningfully different from regular (remote) disks: @@ -112,11 +115,13 @@ message PreemptibleSpec { (field_behavior) = IMMUTABLE ]; - // The value can range from 1 to 5, where 5 indicates the highest priority. - // Affects the order in which Compute tries to preempt VMs, but does not guarantee the exact order. int32 priority = 2 [ - (buf.validate.field).required = true, - (field_behavior) = IMMUTABLE + (field_behavior) = IMMUTABLE, + deprecated = true, + (field_deprecation_details) = { + effective_at: "2026-05-11" + description: "it is deprecated and doesn't affect preemption behavior anymore." + } ]; } diff --git a/nebius/compute/v1/nvlinstancegroup.proto b/nebius/compute/v1/nvlinstancegroup.proto new file mode 100644 index 0000000..26d5411 --- /dev/null +++ b/nebius/compute/v1/nvlinstancegroup.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; + +package nebius.compute.v1; + +import "buf/validate/validate.proto"; +import "nebius/annotations.proto"; +import "nebius/common/v1/metadata.proto"; +import "nebius/compute/v1/instance.proto"; + +option go_package = "github.com/nebius/gosdk/proto/nebius/compute/v1"; +option java_multiple_files = true; +option java_outer_classname = "NvlinstancegroupProto"; +option java_package = "ai.nebius.pub.compute.v1"; + +// Represents an NVLink InstanceGroup. +message NVLInstanceGroup { + common.v1.ResourceMetadata metadata = 1; + + NVLInstanceGroupSpec spec = 2; + + NVLInstanceGroupStatus status = 3; +} + +message NVLInstanceGroupSpec { + // Type of the NVLink InstanceGroup. + enum NVLInstanceGroupType { + UNSPECIFIED = 0; + + GB200 = 1; + + GB300 = 2; + } + + // Type of the NVLink InstanceGroup (corresponds to the Compute platform) + NVLInstanceGroupType type = 1 [(field_behavior) = IMMUTABLE]; +} + +message NVLInstanceGroupStatus { + reserved 2; + + message InstanceInfo { + // Current state of the instance. + InstanceStatus.InstanceState instance_state = 1 [(buf.validate.field).required = true]; + } + + // Instances that are associated with this NVLink InstanceGroup + map instances = 1; + + // Indicates whether there is an ongoing operation with any VM in the InstanceGroup + bool reconciling = 3; +} diff --git a/nebius/compute/v1/nvlinstancegroup_service.proto b/nebius/compute/v1/nvlinstancegroup_service.proto new file mode 100644 index 0000000..4e56c02 --- /dev/null +++ b/nebius/compute/v1/nvlinstancegroup_service.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; + +package nebius.compute.v1; + +import "nebius/annotations.proto"; +import "nebius/common/v1/metadata.proto"; +import "nebius/common/v1/operation.proto"; +import "nebius/compute/v1/nvlinstancegroup.proto"; + +option go_package = "github.com/nebius/gosdk/proto/nebius/compute/v1"; +option java_multiple_files = true; +option java_outer_classname = "NvlinstancegroupServiceProto"; +option java_package = "ai.nebius.pub.compute.v1"; + +// Service for managing NVLink InstanceGroups. +service NVLInstanceGroupService { + option (api_service_name) = "compute"; + + // Create creates a new NVL InstanceGroup. + rpc Create(CreateNVLInstanceGroupRequest) returns (common.v1.Operation); + + // Get retrieves the specified NVL InstanceGroup by its ID. + rpc Get(GetNVLInstanceGroupRequest) returns (NVLInstanceGroup); + + // GetByName retrieves the specified NVL InstanceGroup by its parent and name. + rpc GetByName(common.v1.GetByNameRequest) returns (NVLInstanceGroup); + + // List lists all NVL InstanceGroups in the specified parent. + rpc List(ListNVLInstanceGroupsRequest) returns (ListNVLInstanceGroupsResponse); + + // Delete deletes the specified NVL InstanceGroup by its ID. + rpc Delete(DeleteNVLInstanceGroupRequest) returns (common.v1.Operation); +} + +message CreateNVLInstanceGroupRequest { + common.v1.ResourceMetadata metadata = 1; + + NVLInstanceGroupSpec spec = 2; +} + +message GetNVLInstanceGroupRequest { + string id = 1; +} + +message ListNVLInstanceGroupsRequest { + string parent_id = 1; + + int64 page_size = 2; + + string page_token = 3; +} + +message ListNVLInstanceGroupsResponse { + repeated NVLInstanceGroup items = 1; + + string next_page_token = 2; +} + +message DeleteNVLInstanceGroupRequest { + string id = 1; +} diff --git a/nebius/dns/v1/record.proto b/nebius/dns/v1/record.proto index d48d3bb..2f446af 100644 --- a/nebius/dns/v1/record.proto +++ b/nebius/dns/v1/record.proto @@ -172,3 +172,74 @@ message ListRecordsResponse { // If `next_page_token` is empty, this is the last result page string next_page_token = 2; } + +// Request to create a DNS record +message CreateRecordRequest { + // Metadata for the DNS record to create + // The only required field is `metadata.parent_id`, which must be set to the ID of this record's parent DNS zone + common.v1.ResourceMetadata metadata = 1 [ + (buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "metadata.name must start and end with a letter a-z or a digit 0-9, contain only letters a-z, digits 0-9 and hyphens, and have a length between 1 and 63 characters" + expression: "this.name.matches('^|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$')" + } + ] + required: true + }, + (nid) = { + parent_resource: ["dnszone"] + } + ]; + + // Specification for the DNS record to create + RecordSpec spec = 2 [(buf.validate.field).required = true]; +} + +// Request to update the DNS record by its ID +message UpdateRecordRequest { + // Metadata for the DNS record being updated + // - The only required field is `metadata.id`, which must be set to the ID of the DNS record being updated + // - You may also set the expected DNS record version (`metadata.resource_version`), which ensures that only the requested version is + // updated (and a `FAILED_PRECONDITION` error is returned on version mismatch) + common.v1.ResourceMetadata metadata = 1 [ + (buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "metadata.name must start and end with a letter a-z or a digit 0-9, contain only letters a-z, digits 0-9 and hyphens, and have a length between 1 and 63 characters" + expression: "this.name.matches('^|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$')" + } + ] + }, + (nid) = { + parent_resource: ["dnszone"] + } + ]; + + // New specification for the DNS record + RecordSpec spec = 2; +} + +// Request to delete the DNS record by its ID +message DeleteRecordRequest { + // ID of the DNS record to delete + string id = 1 [ + (buf.validate.field).required = true, + (nid) = { + resource: ["dnsrecord"] + } + ]; + + // Optional: expected DNS record version (`metadata.resource_version`) + // - If specified, ensures that only the requested version is deleted (and a `FAILED_PRECONDITION` error is returned on version mismatch) + // - If not specified or set to `0`, the latest version will be deleted + int64 resource_version = 2 [(buf.validate.field) = { + int64: {gte: 0} + }]; + + // Indicates that deletion-protected records should be also deleted + // Attempt to delete a protected record without this flag set to `true` will cause a `FAILED_PRECONDITION` error + bool force = 3; +} diff --git a/nebius/dns/v1/record_service.proto b/nebius/dns/v1/record_service.proto index a72e622..862d427 100644 --- a/nebius/dns/v1/record_service.proto +++ b/nebius/dns/v1/record_service.proto @@ -4,6 +4,7 @@ package nebius.dns.v1; import "nebius/annotations.proto"; import "nebius/common/v1/metadata.proto"; +import "nebius/common/v1/operation.proto"; import "nebius/dns/v1/record.proto"; option go_package = "github.com/nebius/gosdk/proto/nebius/dns/v1"; @@ -23,4 +24,13 @@ service RecordService { // Lists DNS records in the specified DNS zone rpc List(ListRecordsRequest) returns (ListRecordsResponse); + + // Creates a DNS record + rpc Create(CreateRecordRequest) returns (common.v1.Operation); + + // Updates the DNS record with the specified ID + rpc Update(UpdateRecordRequest) returns (common.v1.Operation); + + // Deletes the DNS record with the specified ID + rpc Delete(DeleteRecordRequest) returns (common.v1.Operation); } diff --git a/nebius/dns/v1/zone.proto b/nebius/dns/v1/zone.proto index 9a65e4f..40be166 100644 --- a/nebius/dns/v1/zone.proto +++ b/nebius/dns/v1/zone.proto @@ -144,3 +144,69 @@ message ListZonesResponse { // If `next_page_token` is empty, this is the last result page string next_page_token = 2; } + +// Request to create a DNS zone +message CreateZoneRequest { + // Metadata for the DNS zone to create + // The only required field is `metadata.parent_id`, which must be set to the ID of this zone's parent IAM container + common.v1.ResourceMetadata metadata = 1 [ + (buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "metadata.name must start and end with a letter a-z or a digit 0-9, contain only letters a-z, digits 0-9 and hyphens, and have a length between 1 and 63 characters" + expression: "this.name.matches('^|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$')" + } + ] + required: true + }, + (nid) = { + parent_resource: ["project"] + } + ]; + + // Specification for the DNS zone to create + ZoneSpec spec = 2 [(buf.validate.field).required = true]; +} + +// Request to update the DNS zone by its ID +message UpdateZoneRequest { + // Metadata for the DNS zone being updated + // - The only required field is `metadata.id`, which must be set to the ID of the DNS zone being updated + // - You may also set the expected DNS zone version (`metadata.resource_version`), which ensures that only the requested version is + // updated (and a `FAILED_PRECONDITION` error is returned on version mismatch) + common.v1.ResourceMetadata metadata = 1 [ + (buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "metadata.name must start and end with a letter a-z or a digit 0-9, contain only letters a-z, digits 0-9 and hyphens, and have a length between 1 and 63 characters" + expression: "this.name.matches('^|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$')" + } + ] + }, + (nid) = { + parent_resource: ["project"] + } + ]; + + // New specification for the DNS zone + ZoneSpec spec = 2; +} + +message DeleteZoneRequest { + // ID of the DNS zone to delete + string id = 1 [ + (buf.validate.field).required = true, + (nid) = { + resource: ["dnszone"] + } + ]; + + // Optional: expected DNS zone version (`metadata.resource_version`) + // - If specified, ensures that only the requested version is deleted (and a `FAILED_PRECONDITION` error is returned on version mismatch) + // - If not specified or set to `0`, the latest version will be deleted + int64 resource_version = 2 [(buf.validate.field) = { + int64: {gte: 0} + }]; +} diff --git a/nebius/dns/v1/zone_service.proto b/nebius/dns/v1/zone_service.proto index 9ab0639..5a11e02 100644 --- a/nebius/dns/v1/zone_service.proto +++ b/nebius/dns/v1/zone_service.proto @@ -4,6 +4,7 @@ package nebius.dns.v1; import "nebius/annotations.proto"; import "nebius/common/v1/metadata.proto"; +import "nebius/common/v1/operation.proto"; import "nebius/dns/v1/zone.proto"; option go_package = "github.com/nebius/gosdk/proto/nebius/dns/v1"; @@ -23,4 +24,13 @@ service ZoneService { // Lists DNS zones in the specified parent IAM container rpc List(ListZonesRequest) returns (ListZonesResponse); + + // Creates a DNS zone + rpc Create(CreateZoneRequest) returns (common.v1.Operation); + + // Updates the DNS zone with the specified ID + rpc Update(UpdateZoneRequest) returns (common.v1.Operation); + + // Deletes the DNS zone with the specified ID + rpc Delete(DeleteZoneRequest) returns (common.v1.Operation); } diff --git a/nebius/mk8s/v1/cluster.proto b/nebius/mk8s/v1/cluster.proto index 2454f75..d336e3e 100644 --- a/nebius/mk8s/v1/cluster.proto +++ b/nebius/mk8s/v1/cluster.proto @@ -5,6 +5,7 @@ package nebius.mk8s.v1; import "buf/validate/validate.proto"; import "nebius/annotations.proto"; import "nebius/common/v1/metadata.proto"; +import "nebius/common/v1/resource_event.proto"; option go_package = "github.com/nebius/gosdk/proto/nebius/mk8s/v1"; option java_multiple_files = true; @@ -16,8 +17,8 @@ message Cluster { cel: [ { id: "metadata_name" - message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '.', starting and ending with a letter or digit" - expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9])?$')" + message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '_', starting and ending with a letter or digit" + expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9_]*)?[A-Za-z0-9])?$')" } ] }]; @@ -128,6 +129,8 @@ message ClusterStatus { ControlPlaneStatus control_plane = 2; + repeated common.v1.RecurrentResourceEvent events = 3; + // Show that changes are in flight bool reconciling = 100; } diff --git a/nebius/mk8s/v1/cluster_service.proto b/nebius/mk8s/v1/cluster_service.proto index c45d4aa..d742197 100644 --- a/nebius/mk8s/v1/cluster_service.proto +++ b/nebius/mk8s/v1/cluster_service.proto @@ -44,8 +44,8 @@ message CreateClusterRequest { cel: [ { id: "metadata_name" - message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '.', starting and ending with a letter or digit" - expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9])?$')" + message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '_', starting and ending with a letter or digit" + expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9_]*)?[A-Za-z0-9])?$')" } ] required: true diff --git a/nebius/mk8s/v1/node_group.proto b/nebius/mk8s/v1/node_group.proto index e8ca2bb..8be5f8f 100644 --- a/nebius/mk8s/v1/node_group.proto +++ b/nebius/mk8s/v1/node_group.proto @@ -18,7 +18,15 @@ option java_package = "ai.nebius.pub.mk8s.v1"; // A Node is a Nebius Compute Instance created in Cluster.metadata.parent_id container, running kubelet // that registers in Kubernetes API and a Node object created. message NodeGroup { - common.v1.ResourceMetadata metadata = 1; // The parent_id is an ID of Cluster + common.v1.ResourceMetadata metadata = 1 [(buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '_', starting and ending with a letter or digit" + expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$')" + } + ] + }]; NodeGroupSpec spec = 2; diff --git a/nebius/mk8s/v1/node_group_service.proto b/nebius/mk8s/v1/node_group_service.proto index 7062bf2..c17118b 100644 --- a/nebius/mk8s/v1/node_group_service.proto +++ b/nebius/mk8s/v1/node_group_service.proto @@ -67,7 +67,16 @@ message NodeGroupCompatibilityVersionItem { } message CreateNodeGroupRequest { - common.v1.ResourceMetadata metadata = 1 [(buf.validate.field).required = true]; + common.v1.ResourceMetadata metadata = 1 [(buf.validate.field) = { + cel: [ + { + id: "metadata_name" + message: "'name' must be 1 to 63 characters long and use only letters, digits, '-', or '_', starting and ending with a letter or digit" + expression: "size(this.name) >= 1 && size(this.name) <= 63 && this.name.matches('^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$')" + } + ] + required: true + }]; NodeGroupSpec spec = 2 [(buf.validate.field).required = true]; }