Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion nebius/ai/v1/endpoint.proto
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ option java_package = "ai.nebius.pub.ai.v1";

// Represents an endpoint with a specified workload.
message Endpoint {
common.v1.ResourceMetadata metadata = 1 [(buf.validate.field).required = true];
common.v1.ResourceMetadata metadata = 1 [
(buf.validate.field).required = true,
(nid) = {
parent_resource: ["project"]
}
];

EndpointSpec spec = 2 [(buf.validate.field).required = true];

Expand Down
21 changes: 18 additions & 3 deletions nebius/ai/v1/endpoint_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,36 @@ message GetEndpointRequest {
}

message GetEndpointByNameRequest {
string parent_id = 1 [(buf.validate.field).required = true];
string parent_id = 1 [
(buf.validate.field).required = true,
(nid) = {
resource: ["project"]
}
];

string name = 2 [(buf.validate.field).required = true];
}

message ListEndpointsRequest {
string parent_id = 1 [(buf.validate.field).required = true];
string parent_id = 1 [
(buf.validate.field).required = true,
(nid) = {
resource: ["project"]
}
];

int64 page_size = 2;

string page_token = 3;
}

message CreateEndpointRequest {
common.v1.ResourceMetadata metadata = 1 [(buf.validate.field).required = true];
common.v1.ResourceMetadata metadata = 1 [
(buf.validate.field).required = true,
(nid) = {
parent_resource: ["project"]
}
];

EndpointSpec spec = 2 [(buf.validate.field).required = true];

Expand Down
7 changes: 6 additions & 1 deletion nebius/ai/v1/job.proto
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ option java_package = "ai.nebius.pub.ai.v1";

// Represents a job with a specified workload.
message Job {
common.v1.ResourceMetadata metadata = 1 [(buf.validate.field).required = true];
common.v1.ResourceMetadata metadata = 1 [
(buf.validate.field).required = true,
(nid) = {
parent_resource: ["project"]
}
];

JobSpec spec = 2 [(buf.validate.field).required = true];

Expand Down
21 changes: 18 additions & 3 deletions nebius/ai/v1/job_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,36 @@ message GetJobRequest {
}

message GetJobByNameRequest {
string parent_id = 1 [(buf.validate.field).required = true];
string parent_id = 1 [
(buf.validate.field).required = true,
(nid) = {
resource: ["project"]
}
];

string name = 2 [(buf.validate.field).required = true];
}

message ListJobsRequest {
string parent_id = 1 [(buf.validate.field).required = true];
string parent_id = 1 [
(buf.validate.field).required = true,
(nid) = {
resource: ["project"]
}
];

int64 page_size = 2;

string page_token = 3;
}

message CreateJobRequest {
common.v1.ResourceMetadata metadata = 1 [(buf.validate.field).required = true];
common.v1.ResourceMetadata metadata = 1 [
(buf.validate.field).required = true,
(nid) = {
parent_resource: ["project"]
}
];

JobSpec spec = 2 [(buf.validate.field).required = true];

Expand Down
20 changes: 17 additions & 3 deletions nebius/mk8s/v1/node_group.proto
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,11 @@ message NodeGroupDeploymentStrategy {
// When specified as a percentage, the actual number is calculated by rounding down to the nearest whole number.
// This value cannot be 0 if `max_surge` is also set to 0.
//
// Defaults to 0.
// On 2026-08-01, defaults to 0.
// IMPORTANT: starting from Q3 2026 new default is 1;
// for new clusters it will default to 1,
// node groups in existing clusters will be gradually migrated during Q3 to the default of 1 as well.
// To get the actual value for your node group, please see 'strategy' in its status.
//
// Example: If set to 20%, up to 20% of the nodes can be taken offline at once during the update,
// ensuring that at least 80% of the desired nodes remain operational.
Expand All @@ -328,7 +332,11 @@ message NodeGroupDeploymentStrategy {
// When specified as a percentage, the actual number is calculated by rounding up to the nearest whole number.
// This value cannot be 0 if `max_unavailable` is also set to 0.
//
// Defaults to 1.
// On 2026-08-01, defaults to 1.
// IMPORTANT: starting from Q3 2026 new default is 0;
// for new clusters it will default to 0,
// node groups in existing clusters will be gradually migrated during Q3 to the default of 0 as well.
// To get the actual value for your node group, please see 'strategy' in its status.
//
// Example: If set to 25%, the node group can scale up by an additional 25% during the update,
// allowing new nodes to be added before old nodes are removed, which helps minimize workload disruption.
Expand All @@ -343,10 +351,16 @@ message NodeGroupDeploymentStrategy {

// Maximum amount of time that the service will spend attempting to gracefully drain a node
// (evicting its pods) before falling back to pod deletion.
// A value of 0 (or when field is omitted) means no timeout: the node can be drained for an unlimited time.
// A value of 0 means no timeout: the node can be drained for an unlimited time.
// Important consequence of that is if PodDisruptionBudget doesn't allow evicting a pod,
// then NodeGroup update with node re-creation will hang on that pod eviction.
// Note that this is different from `kubectl drain --timeout`, which gives up and returns an error.
//
// On 2026-08-01, defaults to 0.
// IMPORTANT: starting from Q3 2026 new default is 10m;
// for new clusters it will default to 10m,
// node groups in existing clusters will be gradually migrated during Q3 to the default of 10m as well.
// To get the actual value for your node group, please see 'strategy' in its status.
google.protobuf.Duration drain_timeout = 3 [(buf.validate.field) = {
duration: {
gte: {}
Expand Down