xref: /aosp_15_r20/external/googleapis/google/cloud/batch/v1alpha/job.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker
15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
16*d5c09012SAndroid Build Coastguard Worker
17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.batch.v1alpha;
18*d5c09012SAndroid Build Coastguard Worker
19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto";
20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto";
21*d5c09012SAndroid Build Coastguard Workerimport "google/cloud/batch/v1alpha/task.proto";
22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto";
23*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
24*d5c09012SAndroid Build Coastguard Worker
25*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Batch.V1Alpha";
26*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/batch/apiv1alpha/batchpb;batchpb";
27*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true;
28*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "JobProto";
29*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.batch.v1alpha";
30*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "GCB";
31*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Batch\\V1alpha";
32*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Batch::V1alpha";
33*d5c09012SAndroid Build Coastguard Worker
34*d5c09012SAndroid Build Coastguard Worker// The Cloud Batch Job description.
35*d5c09012SAndroid Build Coastguard Workermessage Job {
36*d5c09012SAndroid Build Coastguard Worker  option (google.api.resource) = {
37*d5c09012SAndroid Build Coastguard Worker    type: "batch.googleapis.com/Job"
38*d5c09012SAndroid Build Coastguard Worker    pattern: "projects/{project}/locations/{location}/jobs/{job}"
39*d5c09012SAndroid Build Coastguard Worker  };
40*d5c09012SAndroid Build Coastguard Worker
41*d5c09012SAndroid Build Coastguard Worker  // The order that TaskGroups are scheduled relative to each other.
42*d5c09012SAndroid Build Coastguard Worker  //
43*d5c09012SAndroid Build Coastguard Worker  // Not yet implemented.
44*d5c09012SAndroid Build Coastguard Worker  enum SchedulingPolicy {
45*d5c09012SAndroid Build Coastguard Worker    // Unspecified.
46*d5c09012SAndroid Build Coastguard Worker    SCHEDULING_POLICY_UNSPECIFIED = 0;
47*d5c09012SAndroid Build Coastguard Worker
48*d5c09012SAndroid Build Coastguard Worker    // Run all TaskGroups as soon as possible.
49*d5c09012SAndroid Build Coastguard Worker    AS_SOON_AS_POSSIBLE = 1;
50*d5c09012SAndroid Build Coastguard Worker  }
51*d5c09012SAndroid Build Coastguard Worker
52*d5c09012SAndroid Build Coastguard Worker  // Output only. Job name.
53*d5c09012SAndroid Build Coastguard Worker  // For example: "projects/123456/locations/us-central1/jobs/job01".
54*d5c09012SAndroid Build Coastguard Worker  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
55*d5c09012SAndroid Build Coastguard Worker
56*d5c09012SAndroid Build Coastguard Worker  // Output only. A system generated unique ID for the Job.
57*d5c09012SAndroid Build Coastguard Worker  string uid = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
58*d5c09012SAndroid Build Coastguard Worker
59*d5c09012SAndroid Build Coastguard Worker  // Priority of the Job.
60*d5c09012SAndroid Build Coastguard Worker  // The valid value range is [0, 100). Default value is 0.
61*d5c09012SAndroid Build Coastguard Worker  // Higher value indicates higher priority.
62*d5c09012SAndroid Build Coastguard Worker  // A job with higher priority value is more likely to run earlier if all other
63*d5c09012SAndroid Build Coastguard Worker  // requirements are satisfied.
64*d5c09012SAndroid Build Coastguard Worker  int64 priority = 3;
65*d5c09012SAndroid Build Coastguard Worker
66*d5c09012SAndroid Build Coastguard Worker  // Required. TaskGroups in the Job. Only one TaskGroup is supported now.
67*d5c09012SAndroid Build Coastguard Worker  repeated TaskGroup task_groups = 4 [(google.api.field_behavior) = REQUIRED];
68*d5c09012SAndroid Build Coastguard Worker
69*d5c09012SAndroid Build Coastguard Worker  // Scheduling policy for TaskGroups in the job.
70*d5c09012SAndroid Build Coastguard Worker  SchedulingPolicy scheduling_policy = 5;
71*d5c09012SAndroid Build Coastguard Worker
72*d5c09012SAndroid Build Coastguard Worker  // At least one of the dependencies must be satisfied before the Job is
73*d5c09012SAndroid Build Coastguard Worker  // scheduled to run.
74*d5c09012SAndroid Build Coastguard Worker  // Only one JobDependency is supported now.
75*d5c09012SAndroid Build Coastguard Worker  // Not yet implemented.
76*d5c09012SAndroid Build Coastguard Worker  repeated JobDependency dependencies = 6;
77*d5c09012SAndroid Build Coastguard Worker
78*d5c09012SAndroid Build Coastguard Worker  // Compute resource allocation for all TaskGroups in the Job.
79*d5c09012SAndroid Build Coastguard Worker  AllocationPolicy allocation_policy = 7;
80*d5c09012SAndroid Build Coastguard Worker
81*d5c09012SAndroid Build Coastguard Worker  // Labels for the Job. Labels could be user provided or system generated.
82*d5c09012SAndroid Build Coastguard Worker  // For example,
83*d5c09012SAndroid Build Coastguard Worker  // "labels": {
84*d5c09012SAndroid Build Coastguard Worker  //    "department": "finance",
85*d5c09012SAndroid Build Coastguard Worker  //    "environment": "test"
86*d5c09012SAndroid Build Coastguard Worker  //  }
87*d5c09012SAndroid Build Coastguard Worker  // You can assign up to 64 labels.  [Google Compute Engine label
88*d5c09012SAndroid Build Coastguard Worker  // restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)
89*d5c09012SAndroid Build Coastguard Worker  // apply.
90*d5c09012SAndroid Build Coastguard Worker  // Label names that start with "goog-" or "google-" are reserved.
91*d5c09012SAndroid Build Coastguard Worker  map<string, string> labels = 8;
92*d5c09012SAndroid Build Coastguard Worker
93*d5c09012SAndroid Build Coastguard Worker  // Output only. Job status. It is read only for users.
94*d5c09012SAndroid Build Coastguard Worker  JobStatus status = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
95*d5c09012SAndroid Build Coastguard Worker
96*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use notifications instead.
97*d5c09012SAndroid Build Coastguard Worker  JobNotification notification = 10 [deprecated = true];
98*d5c09012SAndroid Build Coastguard Worker
99*d5c09012SAndroid Build Coastguard Worker  // Output only. When the Job was created.
100*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp create_time = 11
101*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
102*d5c09012SAndroid Build Coastguard Worker
103*d5c09012SAndroid Build Coastguard Worker  // Output only. The last time the Job was updated.
104*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp update_time = 12
105*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
106*d5c09012SAndroid Build Coastguard Worker
107*d5c09012SAndroid Build Coastguard Worker  // Log preservation policy for the Job.
108*d5c09012SAndroid Build Coastguard Worker  LogsPolicy logs_policy = 13;
109*d5c09012SAndroid Build Coastguard Worker
110*d5c09012SAndroid Build Coastguard Worker  // Notification configurations.
111*d5c09012SAndroid Build Coastguard Worker  repeated JobNotification notifications = 14;
112*d5c09012SAndroid Build Coastguard Worker}
113*d5c09012SAndroid Build Coastguard Worker
114*d5c09012SAndroid Build Coastguard Worker// LogsPolicy describes how outputs from a Job's Tasks (stdout/stderr) will be
115*d5c09012SAndroid Build Coastguard Worker// preserved.
116*d5c09012SAndroid Build Coastguard Workermessage LogsPolicy {
117*d5c09012SAndroid Build Coastguard Worker  // `CloudLoggingOption` contains additional settings for Cloud Logging logs
118*d5c09012SAndroid Build Coastguard Worker  // generated by Batch job.
119*d5c09012SAndroid Build Coastguard Worker  message CloudLoggingOption {
120*d5c09012SAndroid Build Coastguard Worker    // Optional. Set this flag to true to change the [monitored resource
121*d5c09012SAndroid Build Coastguard Worker    // type](https://cloud.google.com/monitoring/api/resources) for
122*d5c09012SAndroid Build Coastguard Worker    // Cloud Logging logs generated by this Batch job from
123*d5c09012SAndroid Build Coastguard Worker    // the
124*d5c09012SAndroid Build Coastguard Worker    // [`batch.googleapis.com/Job`](https://cloud.google.com/monitoring/api/resources#tag_batch.googleapis.com/Job)
125*d5c09012SAndroid Build Coastguard Worker    // type to the formerly used
126*d5c09012SAndroid Build Coastguard Worker    // [`generic_task`](https://cloud.google.com/monitoring/api/resources#tag_generic_task)
127*d5c09012SAndroid Build Coastguard Worker    // type.
128*d5c09012SAndroid Build Coastguard Worker    bool use_generic_task_monitored_resource = 1
129*d5c09012SAndroid Build Coastguard Worker        [(google.api.field_behavior) = OPTIONAL];
130*d5c09012SAndroid Build Coastguard Worker  }
131*d5c09012SAndroid Build Coastguard Worker
132*d5c09012SAndroid Build Coastguard Worker  // The destination (if any) for logs.
133*d5c09012SAndroid Build Coastguard Worker  enum Destination {
134*d5c09012SAndroid Build Coastguard Worker    // Logs are not preserved.
135*d5c09012SAndroid Build Coastguard Worker    DESTINATION_UNSPECIFIED = 0;
136*d5c09012SAndroid Build Coastguard Worker
137*d5c09012SAndroid Build Coastguard Worker    // Logs are streamed to Cloud Logging.
138*d5c09012SAndroid Build Coastguard Worker    CLOUD_LOGGING = 1;
139*d5c09012SAndroid Build Coastguard Worker
140*d5c09012SAndroid Build Coastguard Worker    // Logs are saved to a file path.
141*d5c09012SAndroid Build Coastguard Worker    PATH = 2;
142*d5c09012SAndroid Build Coastguard Worker  }
143*d5c09012SAndroid Build Coastguard Worker
144*d5c09012SAndroid Build Coastguard Worker  // Where logs should be saved.
145*d5c09012SAndroid Build Coastguard Worker  Destination destination = 1;
146*d5c09012SAndroid Build Coastguard Worker
147*d5c09012SAndroid Build Coastguard Worker  // The path to which logs are saved when the destination = PATH. This can be a
148*d5c09012SAndroid Build Coastguard Worker  // local file path on the VM, or under the mount point of a Persistent Disk or
149*d5c09012SAndroid Build Coastguard Worker  // Filestore, or a Cloud Storage path.
150*d5c09012SAndroid Build Coastguard Worker  string logs_path = 2;
151*d5c09012SAndroid Build Coastguard Worker
152*d5c09012SAndroid Build Coastguard Worker  // Optional. Additional settings for Cloud Logging. It will only take effect
153*d5c09012SAndroid Build Coastguard Worker  // when the destination of `LogsPolicy` is set to `CLOUD_LOGGING`.
154*d5c09012SAndroid Build Coastguard Worker  CloudLoggingOption cloud_logging_option = 3
155*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OPTIONAL];
156*d5c09012SAndroid Build Coastguard Worker}
157*d5c09012SAndroid Build Coastguard Worker
158*d5c09012SAndroid Build Coastguard Worker// JobDependency describes the state of other Jobs that the start of this Job
159*d5c09012SAndroid Build Coastguard Worker// depends on.
160*d5c09012SAndroid Build Coastguard Worker// All dependent Jobs must have been submitted in the same region.
161*d5c09012SAndroid Build Coastguard Workermessage JobDependency {
162*d5c09012SAndroid Build Coastguard Worker  // Dependency type.
163*d5c09012SAndroid Build Coastguard Worker  enum Type {
164*d5c09012SAndroid Build Coastguard Worker    // Unspecified.
165*d5c09012SAndroid Build Coastguard Worker    TYPE_UNSPECIFIED = 0;
166*d5c09012SAndroid Build Coastguard Worker
167*d5c09012SAndroid Build Coastguard Worker    // The dependent Job has succeeded.
168*d5c09012SAndroid Build Coastguard Worker    SUCCEEDED = 1;
169*d5c09012SAndroid Build Coastguard Worker
170*d5c09012SAndroid Build Coastguard Worker    // The dependent Job has failed.
171*d5c09012SAndroid Build Coastguard Worker    FAILED = 2;
172*d5c09012SAndroid Build Coastguard Worker
173*d5c09012SAndroid Build Coastguard Worker    // SUCCEEDED or FAILED.
174*d5c09012SAndroid Build Coastguard Worker    FINISHED = 3;
175*d5c09012SAndroid Build Coastguard Worker  }
176*d5c09012SAndroid Build Coastguard Worker
177*d5c09012SAndroid Build Coastguard Worker  // Each item maps a Job name to a Type.
178*d5c09012SAndroid Build Coastguard Worker  // All items must be satisfied for the JobDependency to be satisfied (the AND
179*d5c09012SAndroid Build Coastguard Worker  // operation).
180*d5c09012SAndroid Build Coastguard Worker  // Once a condition for one item becomes true, it won't go back to false
181*d5c09012SAndroid Build Coastguard Worker  // even the dependent Job state changes again.
182*d5c09012SAndroid Build Coastguard Worker  map<string, Type> items = 1;
183*d5c09012SAndroid Build Coastguard Worker}
184*d5c09012SAndroid Build Coastguard Worker
185*d5c09012SAndroid Build Coastguard Worker// Job status.
186*d5c09012SAndroid Build Coastguard Workermessage JobStatus {
187*d5c09012SAndroid Build Coastguard Worker  // VM instance status.
188*d5c09012SAndroid Build Coastguard Worker  message InstanceStatus {
189*d5c09012SAndroid Build Coastguard Worker    // The Compute Engine machine type.
190*d5c09012SAndroid Build Coastguard Worker    string machine_type = 1;
191*d5c09012SAndroid Build Coastguard Worker
192*d5c09012SAndroid Build Coastguard Worker    // The VM instance provisioning model.
193*d5c09012SAndroid Build Coastguard Worker    AllocationPolicy.ProvisioningModel provisioning_model = 2;
194*d5c09012SAndroid Build Coastguard Worker
195*d5c09012SAndroid Build Coastguard Worker    // The max number of tasks can be assigned to this instance type.
196*d5c09012SAndroid Build Coastguard Worker    int64 task_pack = 3;
197*d5c09012SAndroid Build Coastguard Worker
198*d5c09012SAndroid Build Coastguard Worker    // The VM boot disk.
199*d5c09012SAndroid Build Coastguard Worker    AllocationPolicy.Disk boot_disk = 4;
200*d5c09012SAndroid Build Coastguard Worker  }
201*d5c09012SAndroid Build Coastguard Worker
202*d5c09012SAndroid Build Coastguard Worker  // Aggregated task status for a TaskGroup.
203*d5c09012SAndroid Build Coastguard Worker  message TaskGroupStatus {
204*d5c09012SAndroid Build Coastguard Worker    // Count of task in each state in the TaskGroup.
205*d5c09012SAndroid Build Coastguard Worker    // The map key is task state name.
206*d5c09012SAndroid Build Coastguard Worker    map<string, int64> counts = 1;
207*d5c09012SAndroid Build Coastguard Worker
208*d5c09012SAndroid Build Coastguard Worker    // Status of instances allocated for the TaskGroup.
209*d5c09012SAndroid Build Coastguard Worker    repeated InstanceStatus instances = 2;
210*d5c09012SAndroid Build Coastguard Worker  }
211*d5c09012SAndroid Build Coastguard Worker
212*d5c09012SAndroid Build Coastguard Worker  // Valid Job states.
213*d5c09012SAndroid Build Coastguard Worker  enum State {
214*d5c09012SAndroid Build Coastguard Worker    // Job state unspecified.
215*d5c09012SAndroid Build Coastguard Worker    STATE_UNSPECIFIED = 0;
216*d5c09012SAndroid Build Coastguard Worker
217*d5c09012SAndroid Build Coastguard Worker    // Job is admitted (validated and persisted) and waiting for resources.
218*d5c09012SAndroid Build Coastguard Worker    QUEUED = 1;
219*d5c09012SAndroid Build Coastguard Worker
220*d5c09012SAndroid Build Coastguard Worker    // Job is scheduled to run as soon as resource allocation is ready.
221*d5c09012SAndroid Build Coastguard Worker    // The resource allocation may happen at a later time but with a high
222*d5c09012SAndroid Build Coastguard Worker    // chance to succeed.
223*d5c09012SAndroid Build Coastguard Worker    SCHEDULED = 2;
224*d5c09012SAndroid Build Coastguard Worker
225*d5c09012SAndroid Build Coastguard Worker    // Resource allocation has been successful. At least one Task in the Job is
226*d5c09012SAndroid Build Coastguard Worker    // RUNNING.
227*d5c09012SAndroid Build Coastguard Worker    RUNNING = 3;
228*d5c09012SAndroid Build Coastguard Worker
229*d5c09012SAndroid Build Coastguard Worker    // All Tasks in the Job have finished successfully.
230*d5c09012SAndroid Build Coastguard Worker    SUCCEEDED = 4;
231*d5c09012SAndroid Build Coastguard Worker
232*d5c09012SAndroid Build Coastguard Worker    // At least one Task in the Job has failed.
233*d5c09012SAndroid Build Coastguard Worker    FAILED = 5;
234*d5c09012SAndroid Build Coastguard Worker
235*d5c09012SAndroid Build Coastguard Worker    // The Job will be deleted, but has not been deleted yet. Typically this is
236*d5c09012SAndroid Build Coastguard Worker    // because resources used by the Job are still being cleaned up.
237*d5c09012SAndroid Build Coastguard Worker    DELETION_IN_PROGRESS = 6;
238*d5c09012SAndroid Build Coastguard Worker  }
239*d5c09012SAndroid Build Coastguard Worker
240*d5c09012SAndroid Build Coastguard Worker  // Job state
241*d5c09012SAndroid Build Coastguard Worker  State state = 1;
242*d5c09012SAndroid Build Coastguard Worker
243*d5c09012SAndroid Build Coastguard Worker  // Job status events
244*d5c09012SAndroid Build Coastguard Worker  repeated StatusEvent status_events = 2;
245*d5c09012SAndroid Build Coastguard Worker
246*d5c09012SAndroid Build Coastguard Worker  // Aggregated task status for each TaskGroup in the Job.
247*d5c09012SAndroid Build Coastguard Worker  // The map key is TaskGroup ID.
248*d5c09012SAndroid Build Coastguard Worker  map<string, TaskGroupStatus> task_groups = 4;
249*d5c09012SAndroid Build Coastguard Worker
250*d5c09012SAndroid Build Coastguard Worker  // The duration of time that the Job spent in status RUNNING.
251*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Duration run_duration = 5;
252*d5c09012SAndroid Build Coastguard Worker
253*d5c09012SAndroid Build Coastguard Worker  // The resource usage of the job.
254*d5c09012SAndroid Build Coastguard Worker  ResourceUsage resource_usage = 6;
255*d5c09012SAndroid Build Coastguard Worker}
256*d5c09012SAndroid Build Coastguard Worker
257*d5c09012SAndroid Build Coastguard Worker// ResourceUsage describes the resource usage of the job.
258*d5c09012SAndroid Build Coastguard Workermessage ResourceUsage {
259*d5c09012SAndroid Build Coastguard Worker  // The CPU core hours that the job consumes.
260*d5c09012SAndroid Build Coastguard Worker  double core_hours = 1;
261*d5c09012SAndroid Build Coastguard Worker}
262*d5c09012SAndroid Build Coastguard Worker
263*d5c09012SAndroid Build Coastguard Worker// Notification configurations.
264*d5c09012SAndroid Build Coastguard Workermessage JobNotification {
265*d5c09012SAndroid Build Coastguard Worker  // Message details.
266*d5c09012SAndroid Build Coastguard Worker  // Describe the conditions under which messages will be sent.
267*d5c09012SAndroid Build Coastguard Worker  // If no attribute is defined, no message will be sent by default.
268*d5c09012SAndroid Build Coastguard Worker  // One message should specify either the job or the task level attributes,
269*d5c09012SAndroid Build Coastguard Worker  // but not both. For example,
270*d5c09012SAndroid Build Coastguard Worker  // job level: JOB_STATE_CHANGED and/or a specified new_job_state;
271*d5c09012SAndroid Build Coastguard Worker  // task level: TASK_STATE_CHANGED and/or a specified new_task_state.
272*d5c09012SAndroid Build Coastguard Worker  message Message {
273*d5c09012SAndroid Build Coastguard Worker    // The message type.
274*d5c09012SAndroid Build Coastguard Worker    Type type = 1;
275*d5c09012SAndroid Build Coastguard Worker
276*d5c09012SAndroid Build Coastguard Worker    // The new job state.
277*d5c09012SAndroid Build Coastguard Worker    JobStatus.State new_job_state = 2;
278*d5c09012SAndroid Build Coastguard Worker
279*d5c09012SAndroid Build Coastguard Worker    // The new task state.
280*d5c09012SAndroid Build Coastguard Worker    TaskStatus.State new_task_state = 3;
281*d5c09012SAndroid Build Coastguard Worker  }
282*d5c09012SAndroid Build Coastguard Worker
283*d5c09012SAndroid Build Coastguard Worker  // The message type.
284*d5c09012SAndroid Build Coastguard Worker  enum Type {
285*d5c09012SAndroid Build Coastguard Worker    // Unspecified.
286*d5c09012SAndroid Build Coastguard Worker    TYPE_UNSPECIFIED = 0;
287*d5c09012SAndroid Build Coastguard Worker
288*d5c09012SAndroid Build Coastguard Worker    // Notify users that the job state has changed.
289*d5c09012SAndroid Build Coastguard Worker    JOB_STATE_CHANGED = 1;
290*d5c09012SAndroid Build Coastguard Worker
291*d5c09012SAndroid Build Coastguard Worker    // Notify users that the task state has changed.
292*d5c09012SAndroid Build Coastguard Worker    TASK_STATE_CHANGED = 2;
293*d5c09012SAndroid Build Coastguard Worker  }
294*d5c09012SAndroid Build Coastguard Worker
295*d5c09012SAndroid Build Coastguard Worker  // The Pub/Sub topic where notifications like the job state changes
296*d5c09012SAndroid Build Coastguard Worker  // will be published. The topic must exist in the same project as
297*d5c09012SAndroid Build Coastguard Worker  // the job and billings will be charged to this project.
298*d5c09012SAndroid Build Coastguard Worker  // If not specified, no Pub/Sub messages will be sent.
299*d5c09012SAndroid Build Coastguard Worker  // Topic format: `projects/{project}/topics/{topic}`.
300*d5c09012SAndroid Build Coastguard Worker  string pubsub_topic = 1;
301*d5c09012SAndroid Build Coastguard Worker
302*d5c09012SAndroid Build Coastguard Worker  // The attribute requirements of messages to be sent to this Pub/Sub topic.
303*d5c09012SAndroid Build Coastguard Worker  // Without this field, no message will be sent.
304*d5c09012SAndroid Build Coastguard Worker  Message message = 2;
305*d5c09012SAndroid Build Coastguard Worker}
306*d5c09012SAndroid Build Coastguard Worker
307*d5c09012SAndroid Build Coastguard Worker// A Job's resource allocation policy describes when, where, and how compute
308*d5c09012SAndroid Build Coastguard Worker// resources should be allocated for the Job.
309*d5c09012SAndroid Build Coastguard Workermessage AllocationPolicy {
310*d5c09012SAndroid Build Coastguard Worker  message LocationPolicy {
311*d5c09012SAndroid Build Coastguard Worker    // A list of allowed location names represented by internal URLs.
312*d5c09012SAndroid Build Coastguard Worker    //
313*d5c09012SAndroid Build Coastguard Worker    // Each location can be a region or a zone.
314*d5c09012SAndroid Build Coastguard Worker    // Only one region or multiple zones in one region is supported now.
315*d5c09012SAndroid Build Coastguard Worker    // For example,
316*d5c09012SAndroid Build Coastguard Worker    // ["regions/us-central1"] allow VMs in any zones in region us-central1.
317*d5c09012SAndroid Build Coastguard Worker    // ["zones/us-central1-a", "zones/us-central1-c"] only allow VMs
318*d5c09012SAndroid Build Coastguard Worker    // in zones us-central1-a and us-central1-c.
319*d5c09012SAndroid Build Coastguard Worker    //
320*d5c09012SAndroid Build Coastguard Worker    // All locations end up in different regions would cause errors.
321*d5c09012SAndroid Build Coastguard Worker    // For example,
322*d5c09012SAndroid Build Coastguard Worker    // ["regions/us-central1", "zones/us-central1-a", "zones/us-central1-b",
323*d5c09012SAndroid Build Coastguard Worker    // "zones/us-west1-a"] contains 2 regions "us-central1" and
324*d5c09012SAndroid Build Coastguard Worker    // "us-west1". An error is expected in this case.
325*d5c09012SAndroid Build Coastguard Worker    repeated string allowed_locations = 1;
326*d5c09012SAndroid Build Coastguard Worker
327*d5c09012SAndroid Build Coastguard Worker    // A list of denied location names.
328*d5c09012SAndroid Build Coastguard Worker    //
329*d5c09012SAndroid Build Coastguard Worker    // Not yet implemented.
330*d5c09012SAndroid Build Coastguard Worker    repeated string denied_locations = 2;
331*d5c09012SAndroid Build Coastguard Worker  }
332*d5c09012SAndroid Build Coastguard Worker
333*d5c09012SAndroid Build Coastguard Worker  // A new persistent disk or a local ssd.
334*d5c09012SAndroid Build Coastguard Worker  // A VM can only have one local SSD setting but multiple local SSD partitions.
335*d5c09012SAndroid Build Coastguard Worker  // See https://cloud.google.com/compute/docs/disks#pdspecs and
336*d5c09012SAndroid Build Coastguard Worker  // https://cloud.google.com/compute/docs/disks#localssds.
337*d5c09012SAndroid Build Coastguard Worker  message Disk {
338*d5c09012SAndroid Build Coastguard Worker    // A data source from which a PD will be created.
339*d5c09012SAndroid Build Coastguard Worker    oneof data_source {
340*d5c09012SAndroid Build Coastguard Worker      // URL for a VM image to use as the data source for this disk.
341*d5c09012SAndroid Build Coastguard Worker      // For example, the following are all valid URLs:
342*d5c09012SAndroid Build Coastguard Worker      //
343*d5c09012SAndroid Build Coastguard Worker      // * Specify the image by its family name:
344*d5c09012SAndroid Build Coastguard Worker      // projects/{project}/global/images/family/{image_family}
345*d5c09012SAndroid Build Coastguard Worker      // * Specify the image version:
346*d5c09012SAndroid Build Coastguard Worker      // projects/{project}/global/images/{image_version}
347*d5c09012SAndroid Build Coastguard Worker      //
348*d5c09012SAndroid Build Coastguard Worker      // You can also use Batch customized image in short names.
349*d5c09012SAndroid Build Coastguard Worker      // The following image values are supported for a boot disk:
350*d5c09012SAndroid Build Coastguard Worker      //
351*d5c09012SAndroid Build Coastguard Worker      // * `batch-debian`: use Batch Debian images.
352*d5c09012SAndroid Build Coastguard Worker      // * `batch-centos`: use Batch CentOS images.
353*d5c09012SAndroid Build Coastguard Worker      // * `batch-cos`: use Batch Container-Optimized images.
354*d5c09012SAndroid Build Coastguard Worker      // * `batch-hpc-centos`: use Batch HPC CentOS images.
355*d5c09012SAndroid Build Coastguard Worker      // * `batch-hpc-rocky`: use Batch HPC Rocky Linux images.
356*d5c09012SAndroid Build Coastguard Worker      string image = 4;
357*d5c09012SAndroid Build Coastguard Worker
358*d5c09012SAndroid Build Coastguard Worker      // Name of a snapshot used as the data source.
359*d5c09012SAndroid Build Coastguard Worker      // Snapshot is not supported as boot disk now.
360*d5c09012SAndroid Build Coastguard Worker      string snapshot = 5;
361*d5c09012SAndroid Build Coastguard Worker    }
362*d5c09012SAndroid Build Coastguard Worker
363*d5c09012SAndroid Build Coastguard Worker    // Disk type as shown in `gcloud compute disk-types list`.
364*d5c09012SAndroid Build Coastguard Worker    // For example, local SSD uses type "local-ssd".
365*d5c09012SAndroid Build Coastguard Worker    // Persistent disks and boot disks use "pd-balanced", "pd-extreme", "pd-ssd"
366*d5c09012SAndroid Build Coastguard Worker    // or "pd-standard".
367*d5c09012SAndroid Build Coastguard Worker    string type = 1;
368*d5c09012SAndroid Build Coastguard Worker
369*d5c09012SAndroid Build Coastguard Worker    // Disk size in GB.
370*d5c09012SAndroid Build Coastguard Worker    //
371*d5c09012SAndroid Build Coastguard Worker    // **Non-Boot Disk**:
372*d5c09012SAndroid Build Coastguard Worker    // If the `type` specifies a persistent disk, this field
373*d5c09012SAndroid Build Coastguard Worker    // is ignored if `data_source` is set as `image` or `snapshot`.
374*d5c09012SAndroid Build Coastguard Worker    // If the `type` specifies a local SSD, this field should be a multiple of
375*d5c09012SAndroid Build Coastguard Worker    // 375 GB, otherwise, the final size will be the next greater multiple of
376*d5c09012SAndroid Build Coastguard Worker    // 375 GB.
377*d5c09012SAndroid Build Coastguard Worker    //
378*d5c09012SAndroid Build Coastguard Worker    // **Boot Disk**:
379*d5c09012SAndroid Build Coastguard Worker    // Batch will calculate the boot disk size based on source
380*d5c09012SAndroid Build Coastguard Worker    // image and task requirements if you do not speicify the size.
381*d5c09012SAndroid Build Coastguard Worker    // If both this field and the `boot_disk_mib` field in task spec's
382*d5c09012SAndroid Build Coastguard Worker    // `compute_resource` are defined, Batch will only honor this field.
383*d5c09012SAndroid Build Coastguard Worker    // Also, this field should be no smaller than the source disk's
384*d5c09012SAndroid Build Coastguard Worker    // size when the `data_source` is set as `snapshot` or `image`.
385*d5c09012SAndroid Build Coastguard Worker    // For example, if you set an image as the `data_source` field and the
386*d5c09012SAndroid Build Coastguard Worker    // image's default disk size 30 GB, you can only use this field to make the
387*d5c09012SAndroid Build Coastguard Worker    // disk larger or equal to 30 GB.
388*d5c09012SAndroid Build Coastguard Worker    int64 size_gb = 2;
389*d5c09012SAndroid Build Coastguard Worker
390*d5c09012SAndroid Build Coastguard Worker    // Local SSDs are available through both "SCSI" and "NVMe" interfaces.
391*d5c09012SAndroid Build Coastguard Worker    // If not indicated, "NVMe" will be the default one for local ssds.
392*d5c09012SAndroid Build Coastguard Worker    // This field is ignored for persistent disks as the interface is chosen
393*d5c09012SAndroid Build Coastguard Worker    // automatically. See
394*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/compute/docs/disks/persistent-disks#choose_an_interface.
395*d5c09012SAndroid Build Coastguard Worker    string disk_interface = 6;
396*d5c09012SAndroid Build Coastguard Worker  }
397*d5c09012SAndroid Build Coastguard Worker
398*d5c09012SAndroid Build Coastguard Worker  // A new or an existing persistent disk (PD) or a local ssd attached to a VM
399*d5c09012SAndroid Build Coastguard Worker  // instance.
400*d5c09012SAndroid Build Coastguard Worker  message AttachedDisk {
401*d5c09012SAndroid Build Coastguard Worker    oneof attached {
402*d5c09012SAndroid Build Coastguard Worker      Disk new_disk = 1;
403*d5c09012SAndroid Build Coastguard Worker
404*d5c09012SAndroid Build Coastguard Worker      // Name of an existing PD.
405*d5c09012SAndroid Build Coastguard Worker      string existing_disk = 2;
406*d5c09012SAndroid Build Coastguard Worker    }
407*d5c09012SAndroid Build Coastguard Worker
408*d5c09012SAndroid Build Coastguard Worker    // Device name that the guest operating system will see.
409*d5c09012SAndroid Build Coastguard Worker    // It is used by Runnable.volumes field to mount disks. So please specify
410*d5c09012SAndroid Build Coastguard Worker    // the device_name if you want Batch to help mount the disk, and it should
411*d5c09012SAndroid Build Coastguard Worker    // match the device_name field in volumes.
412*d5c09012SAndroid Build Coastguard Worker    string device_name = 3;
413*d5c09012SAndroid Build Coastguard Worker  }
414*d5c09012SAndroid Build Coastguard Worker
415*d5c09012SAndroid Build Coastguard Worker  // Accelerator describes Compute Engine accelerators to be attached to the VM.
416*d5c09012SAndroid Build Coastguard Worker  message Accelerator {
417*d5c09012SAndroid Build Coastguard Worker    // The accelerator type. For example, "nvidia-tesla-t4".
418*d5c09012SAndroid Build Coastguard Worker    // See `gcloud compute accelerator-types list`.
419*d5c09012SAndroid Build Coastguard Worker    string type = 1;
420*d5c09012SAndroid Build Coastguard Worker
421*d5c09012SAndroid Build Coastguard Worker    // The number of accelerators of this type.
422*d5c09012SAndroid Build Coastguard Worker    int64 count = 2;
423*d5c09012SAndroid Build Coastguard Worker
424*d5c09012SAndroid Build Coastguard Worker    // Deprecated: please use instances[0].install_gpu_drivers instead.
425*d5c09012SAndroid Build Coastguard Worker    bool install_gpu_drivers = 3 [deprecated = true];
426*d5c09012SAndroid Build Coastguard Worker
427*d5c09012SAndroid Build Coastguard Worker    // Optional. The NVIDIA GPU driver version that should be installed for this
428*d5c09012SAndroid Build Coastguard Worker    // type.
429*d5c09012SAndroid Build Coastguard Worker    //
430*d5c09012SAndroid Build Coastguard Worker    // You can define the specific driver version such as "470.103.01",
431*d5c09012SAndroid Build Coastguard Worker    // following the driver version requirements in
432*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/compute/docs/gpus/install-drivers-gpu#minimum-driver.
433*d5c09012SAndroid Build Coastguard Worker    // Batch will install the specific accelerator driver if qualified.
434*d5c09012SAndroid Build Coastguard Worker    string driver_version = 4 [(google.api.field_behavior) = OPTIONAL];
435*d5c09012SAndroid Build Coastguard Worker  }
436*d5c09012SAndroid Build Coastguard Worker
437*d5c09012SAndroid Build Coastguard Worker  // InstancePolicy describes an instance type and resources attached to each VM
438*d5c09012SAndroid Build Coastguard Worker  // created by this InstancePolicy.
439*d5c09012SAndroid Build Coastguard Worker  message InstancePolicy {
440*d5c09012SAndroid Build Coastguard Worker    // Deprecated: please use machine_type instead.
441*d5c09012SAndroid Build Coastguard Worker    repeated string allowed_machine_types = 1 [deprecated = true];
442*d5c09012SAndroid Build Coastguard Worker
443*d5c09012SAndroid Build Coastguard Worker    // The Compute Engine machine type.
444*d5c09012SAndroid Build Coastguard Worker    string machine_type = 2;
445*d5c09012SAndroid Build Coastguard Worker
446*d5c09012SAndroid Build Coastguard Worker    // The minimum CPU platform.
447*d5c09012SAndroid Build Coastguard Worker    // See
448*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
449*d5c09012SAndroid Build Coastguard Worker    string min_cpu_platform = 3;
450*d5c09012SAndroid Build Coastguard Worker
451*d5c09012SAndroid Build Coastguard Worker    // The provisioning model.
452*d5c09012SAndroid Build Coastguard Worker    ProvisioningModel provisioning_model = 4;
453*d5c09012SAndroid Build Coastguard Worker
454*d5c09012SAndroid Build Coastguard Worker    // The accelerators attached to each VM instance.
455*d5c09012SAndroid Build Coastguard Worker    repeated Accelerator accelerators = 5;
456*d5c09012SAndroid Build Coastguard Worker
457*d5c09012SAndroid Build Coastguard Worker    // Boot disk to be created and attached to each VM by this InstancePolicy.
458*d5c09012SAndroid Build Coastguard Worker    // Boot disk will be deleted when the VM is deleted.
459*d5c09012SAndroid Build Coastguard Worker    // Batch API now only supports booting from image.
460*d5c09012SAndroid Build Coastguard Worker    Disk boot_disk = 8;
461*d5c09012SAndroid Build Coastguard Worker
462*d5c09012SAndroid Build Coastguard Worker    // Non-boot disks to be attached for each VM created by this InstancePolicy.
463*d5c09012SAndroid Build Coastguard Worker    // New disks will be deleted when the VM is deleted.
464*d5c09012SAndroid Build Coastguard Worker    // A non-boot disk is a disk that can be of a device with a
465*d5c09012SAndroid Build Coastguard Worker    // file system or a raw storage drive that is not ready for data
466*d5c09012SAndroid Build Coastguard Worker    // storage and accessing.
467*d5c09012SAndroid Build Coastguard Worker    repeated AttachedDisk disks = 6;
468*d5c09012SAndroid Build Coastguard Worker
469*d5c09012SAndroid Build Coastguard Worker    // Optional. If specified, VMs will consume only the specified reservation.
470*d5c09012SAndroid Build Coastguard Worker    // If not specified (default), VMs will consume any applicable reservation.
471*d5c09012SAndroid Build Coastguard Worker    string reservation = 7 [(google.api.field_behavior) = OPTIONAL];
472*d5c09012SAndroid Build Coastguard Worker  }
473*d5c09012SAndroid Build Coastguard Worker
474*d5c09012SAndroid Build Coastguard Worker  // InstancePolicyOrTemplate lets you define the type of resources to use for
475*d5c09012SAndroid Build Coastguard Worker  // this job either with an InstancePolicy or an instance template.
476*d5c09012SAndroid Build Coastguard Worker  // If undefined, Batch picks the type of VM to use and doesn't include
477*d5c09012SAndroid Build Coastguard Worker  // optional VM resources such as GPUs and extra disks.
478*d5c09012SAndroid Build Coastguard Worker  message InstancePolicyOrTemplate {
479*d5c09012SAndroid Build Coastguard Worker    oneof policy_template {
480*d5c09012SAndroid Build Coastguard Worker      // InstancePolicy.
481*d5c09012SAndroid Build Coastguard Worker      InstancePolicy policy = 1;
482*d5c09012SAndroid Build Coastguard Worker
483*d5c09012SAndroid Build Coastguard Worker      // Name of an instance template used to create VMs.
484*d5c09012SAndroid Build Coastguard Worker      // Named the field as 'instance_template' instead of 'template' to avoid
485*d5c09012SAndroid Build Coastguard Worker      // c++ keyword conflict.
486*d5c09012SAndroid Build Coastguard Worker      string instance_template = 2;
487*d5c09012SAndroid Build Coastguard Worker    }
488*d5c09012SAndroid Build Coastguard Worker
489*d5c09012SAndroid Build Coastguard Worker    // Set this field true if users want Batch to help fetch drivers from a
490*d5c09012SAndroid Build Coastguard Worker    // third party location and install them for GPUs specified in
491*d5c09012SAndroid Build Coastguard Worker    // policy.accelerators or instance_template on their behalf. Default is
492*d5c09012SAndroid Build Coastguard Worker    // false.
493*d5c09012SAndroid Build Coastguard Worker    //
494*d5c09012SAndroid Build Coastguard Worker    // For Container-Optimized Image cases, Batch will install the
495*d5c09012SAndroid Build Coastguard Worker    // accelerator driver following milestones of
496*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/container-optimized-os/docs/release-notes. For
497*d5c09012SAndroid Build Coastguard Worker    // non Container-Optimized Image cases, following
498*d5c09012SAndroid Build Coastguard Worker    // https://github.com/GoogleCloudPlatform/compute-gpu-installation/blob/main/linux/install_gpu_driver.py.
499*d5c09012SAndroid Build Coastguard Worker    bool install_gpu_drivers = 3;
500*d5c09012SAndroid Build Coastguard Worker  }
501*d5c09012SAndroid Build Coastguard Worker
502*d5c09012SAndroid Build Coastguard Worker  // A network interface.
503*d5c09012SAndroid Build Coastguard Worker  message NetworkInterface {
504*d5c09012SAndroid Build Coastguard Worker    // The URL of an existing network resource.
505*d5c09012SAndroid Build Coastguard Worker    // You can specify the network as a full or partial URL.
506*d5c09012SAndroid Build Coastguard Worker    //
507*d5c09012SAndroid Build Coastguard Worker    // For example, the following are all valid URLs:
508*d5c09012SAndroid Build Coastguard Worker    //
509*d5c09012SAndroid Build Coastguard Worker    // * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
510*d5c09012SAndroid Build Coastguard Worker    // * projects/{project}/global/networks/{network}
511*d5c09012SAndroid Build Coastguard Worker    // * global/networks/{network}
512*d5c09012SAndroid Build Coastguard Worker    string network = 1;
513*d5c09012SAndroid Build Coastguard Worker
514*d5c09012SAndroid Build Coastguard Worker    // The URL of an existing subnetwork resource in the network.
515*d5c09012SAndroid Build Coastguard Worker    // You can specify the subnetwork as a full or partial URL.
516*d5c09012SAndroid Build Coastguard Worker    //
517*d5c09012SAndroid Build Coastguard Worker    // For example, the following are all valid URLs:
518*d5c09012SAndroid Build Coastguard Worker    //
519*d5c09012SAndroid Build Coastguard Worker    // * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
520*d5c09012SAndroid Build Coastguard Worker    // * projects/{project}/regions/{region}/subnetworks/{subnetwork}
521*d5c09012SAndroid Build Coastguard Worker    // * regions/{region}/subnetworks/{subnetwork}
522*d5c09012SAndroid Build Coastguard Worker    string subnetwork = 2;
523*d5c09012SAndroid Build Coastguard Worker
524*d5c09012SAndroid Build Coastguard Worker    // Default is false (with an external IP address). Required if
525*d5c09012SAndroid Build Coastguard Worker    // no external public IP address is attached to the VM. If no external
526*d5c09012SAndroid Build Coastguard Worker    // public IP address, additional configuration is required to allow the VM
527*d5c09012SAndroid Build Coastguard Worker    // to access Google Services. See
528*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/vpc/docs/configure-private-google-access and
529*d5c09012SAndroid Build Coastguard Worker    // https://cloud.google.com/nat/docs/gce-example#create-nat for more
530*d5c09012SAndroid Build Coastguard Worker    // information.
531*d5c09012SAndroid Build Coastguard Worker    bool no_external_ip_address = 3;
532*d5c09012SAndroid Build Coastguard Worker  }
533*d5c09012SAndroid Build Coastguard Worker
534*d5c09012SAndroid Build Coastguard Worker  // NetworkPolicy describes VM instance network configurations.
535*d5c09012SAndroid Build Coastguard Worker  message NetworkPolicy {
536*d5c09012SAndroid Build Coastguard Worker    // Network configurations.
537*d5c09012SAndroid Build Coastguard Worker    repeated NetworkInterface network_interfaces = 1;
538*d5c09012SAndroid Build Coastguard Worker  }
539*d5c09012SAndroid Build Coastguard Worker
540*d5c09012SAndroid Build Coastguard Worker  // PlacementPolicy describes a group placement policy for the VMs controlled
541*d5c09012SAndroid Build Coastguard Worker  // by this AllocationPolicy.
542*d5c09012SAndroid Build Coastguard Worker  message PlacementPolicy {
543*d5c09012SAndroid Build Coastguard Worker    // UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED). Use COLLOCATED when you
544*d5c09012SAndroid Build Coastguard Worker    // want VMs to be located close to each other for low network latency
545*d5c09012SAndroid Build Coastguard Worker    // between the VMs. No placement policy will be generated when collocation
546*d5c09012SAndroid Build Coastguard Worker    // is UNSPECIFIED.
547*d5c09012SAndroid Build Coastguard Worker    string collocation = 1;
548*d5c09012SAndroid Build Coastguard Worker
549*d5c09012SAndroid Build Coastguard Worker    // When specified, causes the job to fail if more than max_distance logical
550*d5c09012SAndroid Build Coastguard Worker    // switches are required between VMs. Batch uses the most compact possible
551*d5c09012SAndroid Build Coastguard Worker    // placement of VMs even when max_distance is not specified. An explicit
552*d5c09012SAndroid Build Coastguard Worker    // max_distance makes that level of compactness a strict requirement.
553*d5c09012SAndroid Build Coastguard Worker    // Not yet implemented
554*d5c09012SAndroid Build Coastguard Worker    int64 max_distance = 2;
555*d5c09012SAndroid Build Coastguard Worker  }
556*d5c09012SAndroid Build Coastguard Worker
557*d5c09012SAndroid Build Coastguard Worker  // Compute Engine VM instance provisioning model.
558*d5c09012SAndroid Build Coastguard Worker  enum ProvisioningModel {
559*d5c09012SAndroid Build Coastguard Worker    // Unspecified.
560*d5c09012SAndroid Build Coastguard Worker    PROVISIONING_MODEL_UNSPECIFIED = 0;
561*d5c09012SAndroid Build Coastguard Worker
562*d5c09012SAndroid Build Coastguard Worker    // Standard VM.
563*d5c09012SAndroid Build Coastguard Worker    STANDARD = 1;
564*d5c09012SAndroid Build Coastguard Worker
565*d5c09012SAndroid Build Coastguard Worker    // SPOT VM.
566*d5c09012SAndroid Build Coastguard Worker    SPOT = 2;
567*d5c09012SAndroid Build Coastguard Worker
568*d5c09012SAndroid Build Coastguard Worker    // Preemptible VM (PVM).
569*d5c09012SAndroid Build Coastguard Worker    //
570*d5c09012SAndroid Build Coastguard Worker    // Above SPOT VM is the preferable model for preemptible VM instances: the
571*d5c09012SAndroid Build Coastguard Worker    // old preemptible VM model (indicated by this field) is the older model,
572*d5c09012SAndroid Build Coastguard Worker    // and has been migrated to use the SPOT model as the underlying technology.
573*d5c09012SAndroid Build Coastguard Worker    // This old model will still be supported.
574*d5c09012SAndroid Build Coastguard Worker    PREEMPTIBLE = 3;
575*d5c09012SAndroid Build Coastguard Worker  }
576*d5c09012SAndroid Build Coastguard Worker
577*d5c09012SAndroid Build Coastguard Worker  // Location where compute resources should be allocated for the Job.
578*d5c09012SAndroid Build Coastguard Worker  LocationPolicy location = 1;
579*d5c09012SAndroid Build Coastguard Worker
580*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use instances[0].policy instead.
581*d5c09012SAndroid Build Coastguard Worker  InstancePolicy instance = 2 [deprecated = true];
582*d5c09012SAndroid Build Coastguard Worker
583*d5c09012SAndroid Build Coastguard Worker  // Describe instances that can be created by this AllocationPolicy.
584*d5c09012SAndroid Build Coastguard Worker  // Only instances[0] is supported now.
585*d5c09012SAndroid Build Coastguard Worker  repeated InstancePolicyOrTemplate instances = 8;
586*d5c09012SAndroid Build Coastguard Worker
587*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use instances[0].template instead.
588*d5c09012SAndroid Build Coastguard Worker  repeated string instance_templates = 3 [deprecated = true];
589*d5c09012SAndroid Build Coastguard Worker
590*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use instances[0].policy.provisioning_model instead.
591*d5c09012SAndroid Build Coastguard Worker  repeated ProvisioningModel provisioning_models = 4 [deprecated = true];
592*d5c09012SAndroid Build Coastguard Worker
593*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use service_account instead.
594*d5c09012SAndroid Build Coastguard Worker  string service_account_email = 5 [deprecated = true];
595*d5c09012SAndroid Build Coastguard Worker
596*d5c09012SAndroid Build Coastguard Worker  // Defines the service account for Batch-created VMs. If omitted, the [default
597*d5c09012SAndroid Build Coastguard Worker  // Compute Engine service
598*d5c09012SAndroid Build Coastguard Worker  // account](https://cloud.google.com/compute/docs/access/service-accounts#default_service_account)
599*d5c09012SAndroid Build Coastguard Worker  // is used. Must match the service account specified in any used instance
600*d5c09012SAndroid Build Coastguard Worker  // template configured in the Batch job.
601*d5c09012SAndroid Build Coastguard Worker  //
602*d5c09012SAndroid Build Coastguard Worker  // Includes the following fields:
603*d5c09012SAndroid Build Coastguard Worker  //  * email: The service account's email address. If not set, the default
604*d5c09012SAndroid Build Coastguard Worker  //  Compute Engine service account is used.
605*d5c09012SAndroid Build Coastguard Worker  //  * scopes: Additional OAuth scopes to grant the service account, beyond the
606*d5c09012SAndroid Build Coastguard Worker  //  default cloud-platform scope. (list of strings)
607*d5c09012SAndroid Build Coastguard Worker  ServiceAccount service_account = 9;
608*d5c09012SAndroid Build Coastguard Worker
609*d5c09012SAndroid Build Coastguard Worker  // Labels applied to all VM instances and other resources
610*d5c09012SAndroid Build Coastguard Worker  // created by AllocationPolicy.
611*d5c09012SAndroid Build Coastguard Worker  // Labels could be user provided or system generated.
612*d5c09012SAndroid Build Coastguard Worker  // You can assign up to 64 labels. [Google Compute Engine label
613*d5c09012SAndroid Build Coastguard Worker  // restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)
614*d5c09012SAndroid Build Coastguard Worker  // apply.
615*d5c09012SAndroid Build Coastguard Worker  // Label names that start with "goog-" or "google-" are reserved.
616*d5c09012SAndroid Build Coastguard Worker  map<string, string> labels = 6;
617*d5c09012SAndroid Build Coastguard Worker
618*d5c09012SAndroid Build Coastguard Worker  // The network policy.
619*d5c09012SAndroid Build Coastguard Worker  //
620*d5c09012SAndroid Build Coastguard Worker  // If you define an instance template in the `InstancePolicyOrTemplate` field,
621*d5c09012SAndroid Build Coastguard Worker  // Batch will use the network settings in the instance template instead of
622*d5c09012SAndroid Build Coastguard Worker  // this field.
623*d5c09012SAndroid Build Coastguard Worker  NetworkPolicy network = 7;
624*d5c09012SAndroid Build Coastguard Worker
625*d5c09012SAndroid Build Coastguard Worker  // The placement policy.
626*d5c09012SAndroid Build Coastguard Worker  PlacementPolicy placement = 10;
627*d5c09012SAndroid Build Coastguard Worker
628*d5c09012SAndroid Build Coastguard Worker  // Optional. Tags applied to the VM instances.
629*d5c09012SAndroid Build Coastguard Worker  //
630*d5c09012SAndroid Build Coastguard Worker  // The tags identify valid sources or targets for network firewalls.
631*d5c09012SAndroid Build Coastguard Worker  // Each tag must be 1-63 characters long, and comply with
632*d5c09012SAndroid Build Coastguard Worker  // [RFC1035](https://www.ietf.org/rfc/rfc1035.txt).
633*d5c09012SAndroid Build Coastguard Worker  repeated string tags = 11 [(google.api.field_behavior) = OPTIONAL];
634*d5c09012SAndroid Build Coastguard Worker}
635*d5c09012SAndroid Build Coastguard Worker
636*d5c09012SAndroid Build Coastguard Worker// A TaskGroup defines one or more Tasks that all share the same TaskSpec.
637*d5c09012SAndroid Build Coastguard Workermessage TaskGroup {
638*d5c09012SAndroid Build Coastguard Worker  option (google.api.resource) = {
639*d5c09012SAndroid Build Coastguard Worker    type: "batch.googleapis.com/TaskGroup"
640*d5c09012SAndroid Build Coastguard Worker    pattern: "projects/{project}/locations/{location}/jobs/{job}/taskGroups/{task_group}"
641*d5c09012SAndroid Build Coastguard Worker  };
642*d5c09012SAndroid Build Coastguard Worker
643*d5c09012SAndroid Build Coastguard Worker  // How Tasks in the TaskGroup should be scheduled relative to each other.
644*d5c09012SAndroid Build Coastguard Worker  enum SchedulingPolicy {
645*d5c09012SAndroid Build Coastguard Worker    // Unspecified.
646*d5c09012SAndroid Build Coastguard Worker    SCHEDULING_POLICY_UNSPECIFIED = 0;
647*d5c09012SAndroid Build Coastguard Worker
648*d5c09012SAndroid Build Coastguard Worker    // Run Tasks as soon as resources are available.
649*d5c09012SAndroid Build Coastguard Worker    //
650*d5c09012SAndroid Build Coastguard Worker    // Tasks might be executed in parallel depending on parallelism and
651*d5c09012SAndroid Build Coastguard Worker    // task_count values.
652*d5c09012SAndroid Build Coastguard Worker    AS_SOON_AS_POSSIBLE = 1;
653*d5c09012SAndroid Build Coastguard Worker
654*d5c09012SAndroid Build Coastguard Worker    // Run Tasks sequentially with increased task index.
655*d5c09012SAndroid Build Coastguard Worker    IN_ORDER = 2;
656*d5c09012SAndroid Build Coastguard Worker  }
657*d5c09012SAndroid Build Coastguard Worker
658*d5c09012SAndroid Build Coastguard Worker  // Output only. TaskGroup name.
659*d5c09012SAndroid Build Coastguard Worker  // The system generates this field based on parent Job name.
660*d5c09012SAndroid Build Coastguard Worker  // For example:
661*d5c09012SAndroid Build Coastguard Worker  // "projects/123456/locations/us-west1/jobs/job01/taskGroups/group01".
662*d5c09012SAndroid Build Coastguard Worker  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
663*d5c09012SAndroid Build Coastguard Worker
664*d5c09012SAndroid Build Coastguard Worker  // Required. Tasks in the group share the same task spec.
665*d5c09012SAndroid Build Coastguard Worker  TaskSpec task_spec = 3 [(google.api.field_behavior) = REQUIRED];
666*d5c09012SAndroid Build Coastguard Worker
667*d5c09012SAndroid Build Coastguard Worker  // Number of Tasks in the TaskGroup.
668*d5c09012SAndroid Build Coastguard Worker  // Default is 1.
669*d5c09012SAndroid Build Coastguard Worker  int64 task_count = 4;
670*d5c09012SAndroid Build Coastguard Worker
671*d5c09012SAndroid Build Coastguard Worker  // Max number of tasks that can run in parallel.
672*d5c09012SAndroid Build Coastguard Worker  // Default to min(task_count, parallel tasks per job limit).
673*d5c09012SAndroid Build Coastguard Worker  // See: [Job Limits](https://cloud.google.com/batch/quotas#job_limits).
674*d5c09012SAndroid Build Coastguard Worker  // Field parallelism must be 1 if the scheduling_policy is IN_ORDER.
675*d5c09012SAndroid Build Coastguard Worker  int64 parallelism = 5;
676*d5c09012SAndroid Build Coastguard Worker
677*d5c09012SAndroid Build Coastguard Worker  // Scheduling policy for Tasks in the TaskGroup.
678*d5c09012SAndroid Build Coastguard Worker  // The default value is AS_SOON_AS_POSSIBLE.
679*d5c09012SAndroid Build Coastguard Worker  SchedulingPolicy scheduling_policy = 6;
680*d5c09012SAndroid Build Coastguard Worker
681*d5c09012SAndroid Build Coastguard Worker  // Compute resource allocation for the TaskGroup.
682*d5c09012SAndroid Build Coastguard Worker  // If specified, it overrides resources in Job.
683*d5c09012SAndroid Build Coastguard Worker  AllocationPolicy allocation_policy = 7;
684*d5c09012SAndroid Build Coastguard Worker
685*d5c09012SAndroid Build Coastguard Worker  // Labels for the TaskGroup.
686*d5c09012SAndroid Build Coastguard Worker  // Labels could be user provided or system generated.
687*d5c09012SAndroid Build Coastguard Worker  // You can assign up to 64 labels.  [Google Compute Engine label
688*d5c09012SAndroid Build Coastguard Worker  // restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)
689*d5c09012SAndroid Build Coastguard Worker  // apply.
690*d5c09012SAndroid Build Coastguard Worker  // Label names that start with "goog-" or "google-" are reserved.
691*d5c09012SAndroid Build Coastguard Worker  map<string, string> labels = 8;
692*d5c09012SAndroid Build Coastguard Worker
693*d5c09012SAndroid Build Coastguard Worker  // An array of environment variable mappings, which are passed to Tasks with
694*d5c09012SAndroid Build Coastguard Worker  // matching indices. If task_environments is used then task_count should
695*d5c09012SAndroid Build Coastguard Worker  // not be specified in the request (and will be ignored). Task count will be
696*d5c09012SAndroid Build Coastguard Worker  // the length of task_environments.
697*d5c09012SAndroid Build Coastguard Worker  //
698*d5c09012SAndroid Build Coastguard Worker  // Tasks get a BATCH_TASK_INDEX and BATCH_TASK_COUNT environment variable, in
699*d5c09012SAndroid Build Coastguard Worker  // addition to any environment variables set in task_environments, specifying
700*d5c09012SAndroid Build Coastguard Worker  // the number of Tasks in the Task's parent TaskGroup, and the specific Task's
701*d5c09012SAndroid Build Coastguard Worker  // index in the TaskGroup (0 through BATCH_TASK_COUNT - 1).
702*d5c09012SAndroid Build Coastguard Worker  repeated Environment task_environments = 9;
703*d5c09012SAndroid Build Coastguard Worker
704*d5c09012SAndroid Build Coastguard Worker  // Max number of tasks that can be run on a VM at the same time.
705*d5c09012SAndroid Build Coastguard Worker  // If not specified, the system will decide a value based on available
706*d5c09012SAndroid Build Coastguard Worker  // compute resources on a VM and task requirements.
707*d5c09012SAndroid Build Coastguard Worker  int64 task_count_per_node = 10;
708*d5c09012SAndroid Build Coastguard Worker
709*d5c09012SAndroid Build Coastguard Worker  // When true, Batch will populate a file with a list of all VMs assigned to
710*d5c09012SAndroid Build Coastguard Worker  // the TaskGroup and set the BATCH_HOSTS_FILE environment variable to the path
711*d5c09012SAndroid Build Coastguard Worker  // of that file. Defaults to false. The host file supports up to 1000 VMs.
712*d5c09012SAndroid Build Coastguard Worker  bool require_hosts_file = 11;
713*d5c09012SAndroid Build Coastguard Worker
714*d5c09012SAndroid Build Coastguard Worker  // When true, Batch will configure SSH to allow passwordless login between
715*d5c09012SAndroid Build Coastguard Worker  // VMs running the Batch tasks in the same TaskGroup.
716*d5c09012SAndroid Build Coastguard Worker  bool permissive_ssh = 12;
717*d5c09012SAndroid Build Coastguard Worker
718*d5c09012SAndroid Build Coastguard Worker  // Optional. If not set or set to false, Batch uses the root user to execute
719*d5c09012SAndroid Build Coastguard Worker  // runnables. If set to true, Batch runs the runnables using a non-root user.
720*d5c09012SAndroid Build Coastguard Worker  // Currently, the non-root user Batch used is generated by OS Login. For more
721*d5c09012SAndroid Build Coastguard Worker  // information, see [About OS
722*d5c09012SAndroid Build Coastguard Worker  // Login](https://cloud.google.com/compute/docs/oslogin).
723*d5c09012SAndroid Build Coastguard Worker  bool run_as_non_root = 14 [(google.api.field_behavior) = OPTIONAL];
724*d5c09012SAndroid Build Coastguard Worker
725*d5c09012SAndroid Build Coastguard Worker  // Optional. ServiceAccount used by tasks within the task group for the access
726*d5c09012SAndroid Build Coastguard Worker  // to other Cloud resources. This allows tasks to operate with permissions
727*d5c09012SAndroid Build Coastguard Worker  // distinct from the service account for the VM set at `AllocationPolicy`. Use
728*d5c09012SAndroid Build Coastguard Worker  // this field when tasks require different access rights than those of the VM.
729*d5c09012SAndroid Build Coastguard Worker  //
730*d5c09012SAndroid Build Coastguard Worker  // Specify the service account's `email` field. Ensure `scopes`
731*d5c09012SAndroid Build Coastguard Worker  // include any necessary permissions for tasks, in addition to the default
732*d5c09012SAndroid Build Coastguard Worker  // 'cloud-platform' scope.
733*d5c09012SAndroid Build Coastguard Worker  ServiceAccount service_account = 15 [(google.api.field_behavior) = OPTIONAL];
734*d5c09012SAndroid Build Coastguard Worker}
735*d5c09012SAndroid Build Coastguard Worker
736*d5c09012SAndroid Build Coastguard Worker// Carries information about a Google Cloud service account.
737*d5c09012SAndroid Build Coastguard Workermessage ServiceAccount {
738*d5c09012SAndroid Build Coastguard Worker  // Email address of the service account.
739*d5c09012SAndroid Build Coastguard Worker  string email = 1;
740*d5c09012SAndroid Build Coastguard Worker
741*d5c09012SAndroid Build Coastguard Worker  // List of scopes to be enabled for this service account.
742*d5c09012SAndroid Build Coastguard Worker  repeated string scopes = 2;
743*d5c09012SAndroid Build Coastguard Worker}
744