xref: /aosp_15_r20/external/googleapis/google/cloud/batch/v1alpha/task.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/volume.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 = "TaskProto";
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// Compute resource requirements.
35*d5c09012SAndroid Build Coastguard Worker//
36*d5c09012SAndroid Build Coastguard Worker// ComputeResource defines the amount of resources required for each task.
37*d5c09012SAndroid Build Coastguard Worker// Make sure your tasks have enough resources to successfully run.
38*d5c09012SAndroid Build Coastguard Worker// If you also define the types of resources for a job to use with the
39*d5c09012SAndroid Build Coastguard Worker// [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate)
40*d5c09012SAndroid Build Coastguard Worker// field, make sure both fields are compatible with each other.
41*d5c09012SAndroid Build Coastguard Workermessage ComputeResource {
42*d5c09012SAndroid Build Coastguard Worker  // The milliCPU count.
43*d5c09012SAndroid Build Coastguard Worker  //
44*d5c09012SAndroid Build Coastguard Worker  // `cpuMilli` defines the amount of CPU resources per task in milliCPU units.
45*d5c09012SAndroid Build Coastguard Worker  // For example, `1000` corresponds to 1 vCPU per task. If undefined, the
46*d5c09012SAndroid Build Coastguard Worker  // default value is `2000`.
47*d5c09012SAndroid Build Coastguard Worker  //
48*d5c09012SAndroid Build Coastguard Worker  // If you also define the VM's machine type using the `machineType` in
49*d5c09012SAndroid Build Coastguard Worker  // [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy)
50*d5c09012SAndroid Build Coastguard Worker  // field or inside the `instanceTemplate` in the
51*d5c09012SAndroid Build Coastguard Worker  // [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate)
52*d5c09012SAndroid Build Coastguard Worker  // field, make sure the CPU resources for both fields are compatible with each
53*d5c09012SAndroid Build Coastguard Worker  // other and with how many tasks you want to allow to run on the same VM at
54*d5c09012SAndroid Build Coastguard Worker  // the same time.
55*d5c09012SAndroid Build Coastguard Worker  //
56*d5c09012SAndroid Build Coastguard Worker  // For example, if you specify the `n2-standard-2` machine type, which has 2
57*d5c09012SAndroid Build Coastguard Worker  // vCPUs each, you are recommended to set `cpuMilli` no more than `2000`, or
58*d5c09012SAndroid Build Coastguard Worker  // you are recommended to run two tasks on the same VM if you set `cpuMilli`
59*d5c09012SAndroid Build Coastguard Worker  // to `1000` or less.
60*d5c09012SAndroid Build Coastguard Worker  int64 cpu_milli = 1;
61*d5c09012SAndroid Build Coastguard Worker
62*d5c09012SAndroid Build Coastguard Worker  // Memory in MiB.
63*d5c09012SAndroid Build Coastguard Worker  //
64*d5c09012SAndroid Build Coastguard Worker  // `memoryMib` defines the amount of memory per task in MiB units.
65*d5c09012SAndroid Build Coastguard Worker  // If undefined, the default value is `2000`.
66*d5c09012SAndroid Build Coastguard Worker  // If you also define the VM's machine type using the `machineType` in
67*d5c09012SAndroid Build Coastguard Worker  // [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy)
68*d5c09012SAndroid Build Coastguard Worker  // field or inside the `instanceTemplate` in the
69*d5c09012SAndroid Build Coastguard Worker  // [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate)
70*d5c09012SAndroid Build Coastguard Worker  // field, make sure the memory resources for both fields are compatible with
71*d5c09012SAndroid Build Coastguard Worker  // each other and with how many tasks you want to allow to run on the same VM
72*d5c09012SAndroid Build Coastguard Worker  // at the same time.
73*d5c09012SAndroid Build Coastguard Worker  //
74*d5c09012SAndroid Build Coastguard Worker  // For example, if you specify the `n2-standard-2` machine type, which has 8
75*d5c09012SAndroid Build Coastguard Worker  // GiB each, you are recommended to set `memoryMib` to no more than `8192`,
76*d5c09012SAndroid Build Coastguard Worker  // or you are recommended to run two tasks on the same VM if you set
77*d5c09012SAndroid Build Coastguard Worker  // `memoryMib` to `4096` or less.
78*d5c09012SAndroid Build Coastguard Worker  int64 memory_mib = 2;
79*d5c09012SAndroid Build Coastguard Worker
80*d5c09012SAndroid Build Coastguard Worker  // The GPU count.
81*d5c09012SAndroid Build Coastguard Worker  //
82*d5c09012SAndroid Build Coastguard Worker  // Not yet implemented.
83*d5c09012SAndroid Build Coastguard Worker  int64 gpu_count = 3;
84*d5c09012SAndroid Build Coastguard Worker
85*d5c09012SAndroid Build Coastguard Worker  // Extra boot disk size in MiB for each task.
86*d5c09012SAndroid Build Coastguard Worker  int64 boot_disk_mib = 4;
87*d5c09012SAndroid Build Coastguard Worker}
88*d5c09012SAndroid Build Coastguard Worker
89*d5c09012SAndroid Build Coastguard Worker// Status event
90*d5c09012SAndroid Build Coastguard Workermessage StatusEvent {
91*d5c09012SAndroid Build Coastguard Worker  // Type of the event.
92*d5c09012SAndroid Build Coastguard Worker  string type = 3;
93*d5c09012SAndroid Build Coastguard Worker
94*d5c09012SAndroid Build Coastguard Worker  // Description of the event.
95*d5c09012SAndroid Build Coastguard Worker  string description = 1;
96*d5c09012SAndroid Build Coastguard Worker
97*d5c09012SAndroid Build Coastguard Worker  // The time this event occurred.
98*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp event_time = 2;
99*d5c09012SAndroid Build Coastguard Worker
100*d5c09012SAndroid Build Coastguard Worker  // Task Execution
101*d5c09012SAndroid Build Coastguard Worker  TaskExecution task_execution = 4;
102*d5c09012SAndroid Build Coastguard Worker
103*d5c09012SAndroid Build Coastguard Worker  // Task State
104*d5c09012SAndroid Build Coastguard Worker  TaskStatus.State task_state = 5;
105*d5c09012SAndroid Build Coastguard Worker}
106*d5c09012SAndroid Build Coastguard Worker
107*d5c09012SAndroid Build Coastguard Worker// This Task Execution field includes detail information for
108*d5c09012SAndroid Build Coastguard Worker// task execution procedures, based on StatusEvent types.
109*d5c09012SAndroid Build Coastguard Workermessage TaskExecution {
110*d5c09012SAndroid Build Coastguard Worker  // When task is completed as the status of FAILED or SUCCEEDED,
111*d5c09012SAndroid Build Coastguard Worker  // exit code is for one task execution result, default is 0 as success.
112*d5c09012SAndroid Build Coastguard Worker  int32 exit_code = 1;
113*d5c09012SAndroid Build Coastguard Worker
114*d5c09012SAndroid Build Coastguard Worker  // Optional. The tail end of any content written to standard error by the task
115*d5c09012SAndroid Build Coastguard Worker  // execution. This field will be populated only when the execution failed.
116*d5c09012SAndroid Build Coastguard Worker  string stderr_snippet = 2 [(google.api.field_behavior) = OPTIONAL];
117*d5c09012SAndroid Build Coastguard Worker}
118*d5c09012SAndroid Build Coastguard Worker
119*d5c09012SAndroid Build Coastguard Worker// Status of a task
120*d5c09012SAndroid Build Coastguard Workermessage TaskStatus {
121*d5c09012SAndroid Build Coastguard Worker  // Task states.
122*d5c09012SAndroid Build Coastguard Worker  enum State {
123*d5c09012SAndroid Build Coastguard Worker    // Unknown state.
124*d5c09012SAndroid Build Coastguard Worker    STATE_UNSPECIFIED = 0;
125*d5c09012SAndroid Build Coastguard Worker
126*d5c09012SAndroid Build Coastguard Worker    // The Task is created and waiting for resources.
127*d5c09012SAndroid Build Coastguard Worker    PENDING = 1;
128*d5c09012SAndroid Build Coastguard Worker
129*d5c09012SAndroid Build Coastguard Worker    // The Task is assigned to at least one VM.
130*d5c09012SAndroid Build Coastguard Worker    ASSIGNED = 2;
131*d5c09012SAndroid Build Coastguard Worker
132*d5c09012SAndroid Build Coastguard Worker    // The Task is running.
133*d5c09012SAndroid Build Coastguard Worker    RUNNING = 3;
134*d5c09012SAndroid Build Coastguard Worker
135*d5c09012SAndroid Build Coastguard Worker    // The Task has failed.
136*d5c09012SAndroid Build Coastguard Worker    FAILED = 4;
137*d5c09012SAndroid Build Coastguard Worker
138*d5c09012SAndroid Build Coastguard Worker    // The Task has succeeded.
139*d5c09012SAndroid Build Coastguard Worker    SUCCEEDED = 5;
140*d5c09012SAndroid Build Coastguard Worker
141*d5c09012SAndroid Build Coastguard Worker    // The Task has not been executed when the Job finishes.
142*d5c09012SAndroid Build Coastguard Worker    UNEXECUTED = 6;
143*d5c09012SAndroid Build Coastguard Worker  }
144*d5c09012SAndroid Build Coastguard Worker
145*d5c09012SAndroid Build Coastguard Worker  // Task state
146*d5c09012SAndroid Build Coastguard Worker  State state = 1;
147*d5c09012SAndroid Build Coastguard Worker
148*d5c09012SAndroid Build Coastguard Worker  // Detailed info about why the state is reached.
149*d5c09012SAndroid Build Coastguard Worker  repeated StatusEvent status_events = 2;
150*d5c09012SAndroid Build Coastguard Worker
151*d5c09012SAndroid Build Coastguard Worker  // The resource usage of the task.
152*d5c09012SAndroid Build Coastguard Worker  TaskResourceUsage resource_usage = 3;
153*d5c09012SAndroid Build Coastguard Worker}
154*d5c09012SAndroid Build Coastguard Worker
155*d5c09012SAndroid Build Coastguard Worker// TaskResourceUsage describes the resource usage of the task.
156*d5c09012SAndroid Build Coastguard Workermessage TaskResourceUsage {
157*d5c09012SAndroid Build Coastguard Worker  // The CPU core hours the task consumes based on task requirement and run
158*d5c09012SAndroid Build Coastguard Worker  // time.
159*d5c09012SAndroid Build Coastguard Worker  double core_hours = 1;
160*d5c09012SAndroid Build Coastguard Worker}
161*d5c09012SAndroid Build Coastguard Worker
162*d5c09012SAndroid Build Coastguard Worker// Runnable describes instructions for executing a specific script or container
163*d5c09012SAndroid Build Coastguard Worker// as part of a Task.
164*d5c09012SAndroid Build Coastguard Workermessage Runnable {
165*d5c09012SAndroid Build Coastguard Worker  // Container runnable.
166*d5c09012SAndroid Build Coastguard Worker  message Container {
167*d5c09012SAndroid Build Coastguard Worker    // The URI to pull the container image from.
168*d5c09012SAndroid Build Coastguard Worker    string image_uri = 1;
169*d5c09012SAndroid Build Coastguard Worker
170*d5c09012SAndroid Build Coastguard Worker    // Overrides the `CMD` specified in the container. If there is an ENTRYPOINT
171*d5c09012SAndroid Build Coastguard Worker    // (either in the container image or with the entrypoint field below) then
172*d5c09012SAndroid Build Coastguard Worker    // commands are appended as arguments to the ENTRYPOINT.
173*d5c09012SAndroid Build Coastguard Worker    repeated string commands = 2;
174*d5c09012SAndroid Build Coastguard Worker
175*d5c09012SAndroid Build Coastguard Worker    // Overrides the `ENTRYPOINT` specified in the container.
176*d5c09012SAndroid Build Coastguard Worker    string entrypoint = 3;
177*d5c09012SAndroid Build Coastguard Worker
178*d5c09012SAndroid Build Coastguard Worker    // Volumes to mount (bind mount) from the host machine files or directories
179*d5c09012SAndroid Build Coastguard Worker    // into the container, formatted to match docker run's --volume option,
180*d5c09012SAndroid Build Coastguard Worker    // e.g. /foo:/bar, or /foo:/bar:ro
181*d5c09012SAndroid Build Coastguard Worker    //
182*d5c09012SAndroid Build Coastguard Worker    // If the `TaskSpec.Volumes` field is specified but this field is not, Batch
183*d5c09012SAndroid Build Coastguard Worker    // will mount each volume from the host machine to the container with the
184*d5c09012SAndroid Build Coastguard Worker    // same mount path by default. In this case, the default mount option for
185*d5c09012SAndroid Build Coastguard Worker    // containers will be read-only (ro) for existing persistent disks and
186*d5c09012SAndroid Build Coastguard Worker    // read-write (rw) for other volume types, regardless of the original mount
187*d5c09012SAndroid Build Coastguard Worker    // options specified in `TaskSpec.Volumes`. If you need different mount
188*d5c09012SAndroid Build Coastguard Worker    // settings, you can explicitly configure them in this field.
189*d5c09012SAndroid Build Coastguard Worker    repeated string volumes = 7;
190*d5c09012SAndroid Build Coastguard Worker
191*d5c09012SAndroid Build Coastguard Worker    // Arbitrary additional options to include in the "docker run" command when
192*d5c09012SAndroid Build Coastguard Worker    // running this container, e.g. "--network host".
193*d5c09012SAndroid Build Coastguard Worker    string options = 8;
194*d5c09012SAndroid Build Coastguard Worker
195*d5c09012SAndroid Build Coastguard Worker    // If set to true, external network access to and from container will be
196*d5c09012SAndroid Build Coastguard Worker    // blocked, containers that are with block_external_network as true can
197*d5c09012SAndroid Build Coastguard Worker    // still communicate with each other, network cannot be specified in the
198*d5c09012SAndroid Build Coastguard Worker    // `container.options` field.
199*d5c09012SAndroid Build Coastguard Worker    bool block_external_network = 9;
200*d5c09012SAndroid Build Coastguard Worker
201*d5c09012SAndroid Build Coastguard Worker    // Required if the container image is from a private Docker registry. The
202*d5c09012SAndroid Build Coastguard Worker    // username to login to the Docker registry that contains the image.
203*d5c09012SAndroid Build Coastguard Worker    //
204*d5c09012SAndroid Build Coastguard Worker    // You can either specify the username directly by using plain text or
205*d5c09012SAndroid Build Coastguard Worker    // specify an encrypted username by using a Secret Manager secret:
206*d5c09012SAndroid Build Coastguard Worker    // `projects/*/secrets/*/versions/*`. However, using a secret is
207*d5c09012SAndroid Build Coastguard Worker    // recommended for enhanced security.
208*d5c09012SAndroid Build Coastguard Worker    //
209*d5c09012SAndroid Build Coastguard Worker    // Caution: If you specify the username using plain text, you risk the
210*d5c09012SAndroid Build Coastguard Worker    // username being exposed to any users who can view the job or its logs.
211*d5c09012SAndroid Build Coastguard Worker    // To avoid this risk, specify a secret that contains the username instead.
212*d5c09012SAndroid Build Coastguard Worker    //
213*d5c09012SAndroid Build Coastguard Worker    // Learn more about [Secret
214*d5c09012SAndroid Build Coastguard Worker    // Manager](https://cloud.google.com/secret-manager/docs/) and [using
215*d5c09012SAndroid Build Coastguard Worker    // Secret Manager with
216*d5c09012SAndroid Build Coastguard Worker    // Batch](https://cloud.google.com/batch/docs/create-run-job-secret-manager).
217*d5c09012SAndroid Build Coastguard Worker    string username = 10;
218*d5c09012SAndroid Build Coastguard Worker
219*d5c09012SAndroid Build Coastguard Worker    // Required if the container image is from a private Docker registry. The
220*d5c09012SAndroid Build Coastguard Worker    // password to login to the Docker registry that contains the image.
221*d5c09012SAndroid Build Coastguard Worker    //
222*d5c09012SAndroid Build Coastguard Worker    // For security, it is strongly recommended to specify an
223*d5c09012SAndroid Build Coastguard Worker    // encrypted password by using a Secret Manager secret:
224*d5c09012SAndroid Build Coastguard Worker    // `projects/*/secrets/*/versions/*`.
225*d5c09012SAndroid Build Coastguard Worker    //
226*d5c09012SAndroid Build Coastguard Worker    // Warning: If you specify the password using plain text, you risk the
227*d5c09012SAndroid Build Coastguard Worker    // password being exposed to any users who can view the job or its logs.
228*d5c09012SAndroid Build Coastguard Worker    // To avoid this risk, specify a secret that contains the password instead.
229*d5c09012SAndroid Build Coastguard Worker    //
230*d5c09012SAndroid Build Coastguard Worker    // Learn more about [Secret
231*d5c09012SAndroid Build Coastguard Worker    // Manager](https://cloud.google.com/secret-manager/docs/) and [using
232*d5c09012SAndroid Build Coastguard Worker    // Secret Manager with
233*d5c09012SAndroid Build Coastguard Worker    // Batch](https://cloud.google.com/batch/docs/create-run-job-secret-manager).
234*d5c09012SAndroid Build Coastguard Worker    string password = 11;
235*d5c09012SAndroid Build Coastguard Worker
236*d5c09012SAndroid Build Coastguard Worker    // Optional. If set to true, this container runnable uses Image streaming.
237*d5c09012SAndroid Build Coastguard Worker    //
238*d5c09012SAndroid Build Coastguard Worker    // Use Image streaming to allow the runnable to initialize without
239*d5c09012SAndroid Build Coastguard Worker    // waiting for the entire container image to download, which can
240*d5c09012SAndroid Build Coastguard Worker    // significantly reduce startup time for large container images.
241*d5c09012SAndroid Build Coastguard Worker    //
242*d5c09012SAndroid Build Coastguard Worker    // When `enableImageStreaming` is set to true, the container
243*d5c09012SAndroid Build Coastguard Worker    // runtime is [containerd](https://containerd.io/) instead of Docker.
244*d5c09012SAndroid Build Coastguard Worker    // Additionally, this container runnable only supports the following
245*d5c09012SAndroid Build Coastguard Worker    // `container` subfields: `imageUri`,
246*d5c09012SAndroid Build Coastguard Worker    // `commands[]`, `entrypoint`, and
247*d5c09012SAndroid Build Coastguard Worker    // `volumes[]`; any other `container` subfields are ignored.
248*d5c09012SAndroid Build Coastguard Worker    //
249*d5c09012SAndroid Build Coastguard Worker    // For more information about the requirements and limitations for using
250*d5c09012SAndroid Build Coastguard Worker    // Image streaming with Batch, see the [`image-streaming`
251*d5c09012SAndroid Build Coastguard Worker    // sample on
252*d5c09012SAndroid Build Coastguard Worker    // GitHub](https://github.com/GoogleCloudPlatform/batch-samples/tree/main/api-samples/image-streaming).
253*d5c09012SAndroid Build Coastguard Worker    bool enable_image_streaming = 12 [(google.api.field_behavior) = OPTIONAL];
254*d5c09012SAndroid Build Coastguard Worker  }
255*d5c09012SAndroid Build Coastguard Worker
256*d5c09012SAndroid Build Coastguard Worker  // Script runnable.
257*d5c09012SAndroid Build Coastguard Worker  message Script {
258*d5c09012SAndroid Build Coastguard Worker    oneof command {
259*d5c09012SAndroid Build Coastguard Worker      // Script file path on the host VM.
260*d5c09012SAndroid Build Coastguard Worker      //
261*d5c09012SAndroid Build Coastguard Worker      // To specify an interpreter, please add a `#!<interpreter>`(also known as
262*d5c09012SAndroid Build Coastguard Worker      // [shebang line](https://en.wikipedia.org/wiki/Shebang_(Unix))) as the
263*d5c09012SAndroid Build Coastguard Worker      // first line of the file.(For example, to execute the script using bash,
264*d5c09012SAndroid Build Coastguard Worker      // `#!/bin/bash` should be the first line of the file. To execute the
265*d5c09012SAndroid Build Coastguard Worker      // script using`Python3`, `#!/usr/bin/env python3` should be the first
266*d5c09012SAndroid Build Coastguard Worker      // line of the file.) Otherwise, the file will by default be executed by
267*d5c09012SAndroid Build Coastguard Worker      // `/bin/sh`.
268*d5c09012SAndroid Build Coastguard Worker      string path = 1;
269*d5c09012SAndroid Build Coastguard Worker
270*d5c09012SAndroid Build Coastguard Worker      // Shell script text.
271*d5c09012SAndroid Build Coastguard Worker      //
272*d5c09012SAndroid Build Coastguard Worker      // To specify an interpreter, please add a `#!<interpreter>\n` at the
273*d5c09012SAndroid Build Coastguard Worker      // beginning of the text.(For example, to execute the script using bash,
274*d5c09012SAndroid Build Coastguard Worker      // `#!/bin/bash\n` should be added. To execute the script using`Python3`,
275*d5c09012SAndroid Build Coastguard Worker      // `#!/usr/bin/env python3\n` should be added.) Otherwise, the script will
276*d5c09012SAndroid Build Coastguard Worker      // by default be executed by `/bin/sh`.
277*d5c09012SAndroid Build Coastguard Worker      string text = 2;
278*d5c09012SAndroid Build Coastguard Worker    }
279*d5c09012SAndroid Build Coastguard Worker  }
280*d5c09012SAndroid Build Coastguard Worker
281*d5c09012SAndroid Build Coastguard Worker  // Barrier runnable blocks until all tasks in a taskgroup reach it.
282*d5c09012SAndroid Build Coastguard Worker  message Barrier {
283*d5c09012SAndroid Build Coastguard Worker    // Barriers are identified by their index in runnable list.
284*d5c09012SAndroid Build Coastguard Worker    // Names are not required, but if present should be an identifier.
285*d5c09012SAndroid Build Coastguard Worker    string name = 1;
286*d5c09012SAndroid Build Coastguard Worker  }
287*d5c09012SAndroid Build Coastguard Worker
288*d5c09012SAndroid Build Coastguard Worker  // The script or container to run.
289*d5c09012SAndroid Build Coastguard Worker  oneof executable {
290*d5c09012SAndroid Build Coastguard Worker    // Container runnable.
291*d5c09012SAndroid Build Coastguard Worker    Container container = 1;
292*d5c09012SAndroid Build Coastguard Worker
293*d5c09012SAndroid Build Coastguard Worker    // Script runnable.
294*d5c09012SAndroid Build Coastguard Worker    Script script = 2;
295*d5c09012SAndroid Build Coastguard Worker
296*d5c09012SAndroid Build Coastguard Worker    // Barrier runnable.
297*d5c09012SAndroid Build Coastguard Worker    Barrier barrier = 6;
298*d5c09012SAndroid Build Coastguard Worker  }
299*d5c09012SAndroid Build Coastguard Worker
300*d5c09012SAndroid Build Coastguard Worker  // Optional. DisplayName is an optional field that can be provided by the
301*d5c09012SAndroid Build Coastguard Worker  // caller. If provided, it will be used in logs and other outputs to identify
302*d5c09012SAndroid Build Coastguard Worker  // the script, making it easier for users to understand the logs. If not
303*d5c09012SAndroid Build Coastguard Worker  // provided the index of the runnable will be used for outputs.
304*d5c09012SAndroid Build Coastguard Worker  string display_name = 10 [(google.api.field_behavior) = OPTIONAL];
305*d5c09012SAndroid Build Coastguard Worker
306*d5c09012SAndroid Build Coastguard Worker  // Normally, a non-zero exit status causes the Task to fail. This flag allows
307*d5c09012SAndroid Build Coastguard Worker  // execution of other Runnables to continue instead.
308*d5c09012SAndroid Build Coastguard Worker  bool ignore_exit_status = 3;
309*d5c09012SAndroid Build Coastguard Worker
310*d5c09012SAndroid Build Coastguard Worker  // This flag allows a Runnable to continue running in the background while the
311*d5c09012SAndroid Build Coastguard Worker  // Task executes subsequent Runnables. This is useful to provide services to
312*d5c09012SAndroid Build Coastguard Worker  // other Runnables (or to provide debugging support tools like SSH servers).
313*d5c09012SAndroid Build Coastguard Worker  bool background = 4;
314*d5c09012SAndroid Build Coastguard Worker
315*d5c09012SAndroid Build Coastguard Worker  // By default, after a Runnable fails, no further Runnable are executed. This
316*d5c09012SAndroid Build Coastguard Worker  // flag indicates that this Runnable must be run even if the Task has already
317*d5c09012SAndroid Build Coastguard Worker  // failed. This is useful for Runnables that copy output files off of the VM
318*d5c09012SAndroid Build Coastguard Worker  // or for debugging.
319*d5c09012SAndroid Build Coastguard Worker  //
320*d5c09012SAndroid Build Coastguard Worker  // The always_run flag does not override the Task's overall max_run_duration.
321*d5c09012SAndroid Build Coastguard Worker  // If the max_run_duration has expired then no further Runnables will execute,
322*d5c09012SAndroid Build Coastguard Worker  // not even always_run Runnables.
323*d5c09012SAndroid Build Coastguard Worker  bool always_run = 5;
324*d5c09012SAndroid Build Coastguard Worker
325*d5c09012SAndroid Build Coastguard Worker  // Environment variables for this Runnable (overrides variables set for the
326*d5c09012SAndroid Build Coastguard Worker  // whole Task or TaskGroup).
327*d5c09012SAndroid Build Coastguard Worker  Environment environment = 7;
328*d5c09012SAndroid Build Coastguard Worker
329*d5c09012SAndroid Build Coastguard Worker  // Timeout for this Runnable.
330*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Duration timeout = 8;
331*d5c09012SAndroid Build Coastguard Worker
332*d5c09012SAndroid Build Coastguard Worker  // Labels for this Runnable.
333*d5c09012SAndroid Build Coastguard Worker  map<string, string> labels = 9;
334*d5c09012SAndroid Build Coastguard Worker}
335*d5c09012SAndroid Build Coastguard Worker
336*d5c09012SAndroid Build Coastguard Worker// Spec of a task
337*d5c09012SAndroid Build Coastguard Workermessage TaskSpec {
338*d5c09012SAndroid Build Coastguard Worker  // The sequence of scripts or containers to run for this Task. Each Task using
339*d5c09012SAndroid Build Coastguard Worker  // this TaskSpec executes its list of runnables in order. The Task succeeds if
340*d5c09012SAndroid Build Coastguard Worker  // all of its runnables either exit with a zero status or any that exit with a
341*d5c09012SAndroid Build Coastguard Worker  // non-zero status have the ignore_exit_status flag.
342*d5c09012SAndroid Build Coastguard Worker  //
343*d5c09012SAndroid Build Coastguard Worker  // Background runnables are killed automatically (if they have not already
344*d5c09012SAndroid Build Coastguard Worker  // exited) a short time after all foreground runnables have completed. Even
345*d5c09012SAndroid Build Coastguard Worker  // though this is likely to result in a non-zero exit status for the
346*d5c09012SAndroid Build Coastguard Worker  // background runnable, these automatic kills are not treated as Task
347*d5c09012SAndroid Build Coastguard Worker  // failures.
348*d5c09012SAndroid Build Coastguard Worker  repeated Runnable runnables = 8;
349*d5c09012SAndroid Build Coastguard Worker
350*d5c09012SAndroid Build Coastguard Worker  // ComputeResource requirements.
351*d5c09012SAndroid Build Coastguard Worker  ComputeResource compute_resource = 3;
352*d5c09012SAndroid Build Coastguard Worker
353*d5c09012SAndroid Build Coastguard Worker  // Maximum duration the task should run.
354*d5c09012SAndroid Build Coastguard Worker  // The task will be killed and marked as FAILED if over this limit.
355*d5c09012SAndroid Build Coastguard Worker  // The valid value range for max_run_duration in seconds is [0,
356*d5c09012SAndroid Build Coastguard Worker  // 315576000000.999999999],
357*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Duration max_run_duration = 4;
358*d5c09012SAndroid Build Coastguard Worker
359*d5c09012SAndroid Build Coastguard Worker  // Maximum number of retries on failures.
360*d5c09012SAndroid Build Coastguard Worker  // The default, 0, which means never retry.
361*d5c09012SAndroid Build Coastguard Worker  // The valid value range is [0, 10].
362*d5c09012SAndroid Build Coastguard Worker  int32 max_retry_count = 5;
363*d5c09012SAndroid Build Coastguard Worker
364*d5c09012SAndroid Build Coastguard Worker  // Lifecycle management schema when any task in a task group is failed.
365*d5c09012SAndroid Build Coastguard Worker  // Currently we only support one lifecycle policy.
366*d5c09012SAndroid Build Coastguard Worker  // When the lifecycle policy condition is met,
367*d5c09012SAndroid Build Coastguard Worker  // the action in the policy will execute.
368*d5c09012SAndroid Build Coastguard Worker  // If task execution result does not meet with the defined lifecycle
369*d5c09012SAndroid Build Coastguard Worker  // policy, we consider it as the default policy.
370*d5c09012SAndroid Build Coastguard Worker  // Default policy means if the exit code is 0, exit task.
371*d5c09012SAndroid Build Coastguard Worker  // If task ends with non-zero exit code, retry the task with max_retry_count.
372*d5c09012SAndroid Build Coastguard Worker  repeated LifecyclePolicy lifecycle_policies = 9;
373*d5c09012SAndroid Build Coastguard Worker
374*d5c09012SAndroid Build Coastguard Worker  // Deprecated: please use environment(non-plural) instead.
375*d5c09012SAndroid Build Coastguard Worker  map<string, string> environments = 6 [deprecated = true];
376*d5c09012SAndroid Build Coastguard Worker
377*d5c09012SAndroid Build Coastguard Worker  // Volumes to mount before running Tasks using this TaskSpec.
378*d5c09012SAndroid Build Coastguard Worker  repeated Volume volumes = 7;
379*d5c09012SAndroid Build Coastguard Worker
380*d5c09012SAndroid Build Coastguard Worker  // Environment variables to set before running the Task.
381*d5c09012SAndroid Build Coastguard Worker  Environment environment = 10;
382*d5c09012SAndroid Build Coastguard Worker}
383*d5c09012SAndroid Build Coastguard Worker
384*d5c09012SAndroid Build Coastguard Worker// LifecyclePolicy describes how to deal with task failures
385*d5c09012SAndroid Build Coastguard Worker// based on different conditions.
386*d5c09012SAndroid Build Coastguard Workermessage LifecyclePolicy {
387*d5c09012SAndroid Build Coastguard Worker  // Conditions for actions to deal with task failures.
388*d5c09012SAndroid Build Coastguard Worker  message ActionCondition {
389*d5c09012SAndroid Build Coastguard Worker    // Exit codes of a task execution.
390*d5c09012SAndroid Build Coastguard Worker    // If there are more than 1 exit codes,
391*d5c09012SAndroid Build Coastguard Worker    // when task executes with any of the exit code in the list,
392*d5c09012SAndroid Build Coastguard Worker    // the condition is met and the action will be executed.
393*d5c09012SAndroid Build Coastguard Worker    repeated int32 exit_codes = 1;
394*d5c09012SAndroid Build Coastguard Worker  }
395*d5c09012SAndroid Build Coastguard Worker
396*d5c09012SAndroid Build Coastguard Worker  // Action on task failures based on different conditions.
397*d5c09012SAndroid Build Coastguard Worker  enum Action {
398*d5c09012SAndroid Build Coastguard Worker    // Action unspecified.
399*d5c09012SAndroid Build Coastguard Worker    ACTION_UNSPECIFIED = 0;
400*d5c09012SAndroid Build Coastguard Worker
401*d5c09012SAndroid Build Coastguard Worker    // Action that tasks in the group will be scheduled to re-execute.
402*d5c09012SAndroid Build Coastguard Worker    RETRY_TASK = 1;
403*d5c09012SAndroid Build Coastguard Worker
404*d5c09012SAndroid Build Coastguard Worker    // Action that tasks in the group will be stopped immediately.
405*d5c09012SAndroid Build Coastguard Worker    FAIL_TASK = 2;
406*d5c09012SAndroid Build Coastguard Worker  }
407*d5c09012SAndroid Build Coastguard Worker
408*d5c09012SAndroid Build Coastguard Worker  // Action to execute when ActionCondition is true.
409*d5c09012SAndroid Build Coastguard Worker  // When RETRY_TASK is specified, we will retry failed tasks
410*d5c09012SAndroid Build Coastguard Worker  // if we notice any exit code match and fail tasks if no match is found.
411*d5c09012SAndroid Build Coastguard Worker  // Likewise, when FAIL_TASK is specified, we will fail tasks
412*d5c09012SAndroid Build Coastguard Worker  // if we notice any exit code match and retry tasks if no match is found.
413*d5c09012SAndroid Build Coastguard Worker  Action action = 1;
414*d5c09012SAndroid Build Coastguard Worker
415*d5c09012SAndroid Build Coastguard Worker  // Conditions that decide why a task failure is dealt with a specific action.
416*d5c09012SAndroid Build Coastguard Worker  ActionCondition action_condition = 2;
417*d5c09012SAndroid Build Coastguard Worker}
418*d5c09012SAndroid Build Coastguard Worker
419*d5c09012SAndroid Build Coastguard Worker// A Cloud Batch task.
420*d5c09012SAndroid Build Coastguard Workermessage Task {
421*d5c09012SAndroid Build Coastguard Worker  option (google.api.resource) = {
422*d5c09012SAndroid Build Coastguard Worker    type: "batch.googleapis.com/Task"
423*d5c09012SAndroid Build Coastguard Worker    pattern: "projects/{project}/locations/{location}/jobs/{job}/taskGroups/{task_group}/tasks/{task}"
424*d5c09012SAndroid Build Coastguard Worker  };
425*d5c09012SAndroid Build Coastguard Worker
426*d5c09012SAndroid Build Coastguard Worker  // Task name.
427*d5c09012SAndroid Build Coastguard Worker  // The name is generated from the parent TaskGroup name and 'id' field.
428*d5c09012SAndroid Build Coastguard Worker  // For example:
429*d5c09012SAndroid Build Coastguard Worker  // "projects/123456/locations/us-west1/jobs/job01/taskGroups/group01/tasks/task01".
430*d5c09012SAndroid Build Coastguard Worker  string name = 1;
431*d5c09012SAndroid Build Coastguard Worker
432*d5c09012SAndroid Build Coastguard Worker  // Task Status.
433*d5c09012SAndroid Build Coastguard Worker  TaskStatus status = 2;
434*d5c09012SAndroid Build Coastguard Worker}
435*d5c09012SAndroid Build Coastguard Worker
436*d5c09012SAndroid Build Coastguard Worker// An Environment describes a collection of environment variables to set when
437*d5c09012SAndroid Build Coastguard Worker// executing Tasks.
438*d5c09012SAndroid Build Coastguard Workermessage Environment {
439*d5c09012SAndroid Build Coastguard Worker  message KMSEnvMap {
440*d5c09012SAndroid Build Coastguard Worker    // The name of the KMS key that will be used to decrypt the cipher text.
441*d5c09012SAndroid Build Coastguard Worker    string key_name = 1;
442*d5c09012SAndroid Build Coastguard Worker
443*d5c09012SAndroid Build Coastguard Worker    // The value of the cipherText response from the `encrypt` method.
444*d5c09012SAndroid Build Coastguard Worker    string cipher_text = 2;
445*d5c09012SAndroid Build Coastguard Worker  }
446*d5c09012SAndroid Build Coastguard Worker
447*d5c09012SAndroid Build Coastguard Worker  // A map of environment variable names to values.
448*d5c09012SAndroid Build Coastguard Worker  map<string, string> variables = 1;
449*d5c09012SAndroid Build Coastguard Worker
450*d5c09012SAndroid Build Coastguard Worker  // A map of environment variable names to Secret Manager secret names.
451*d5c09012SAndroid Build Coastguard Worker  // The VM will access the named secrets to set the value of each environment
452*d5c09012SAndroid Build Coastguard Worker  // variable.
453*d5c09012SAndroid Build Coastguard Worker  map<string, string> secret_variables = 2;
454*d5c09012SAndroid Build Coastguard Worker
455*d5c09012SAndroid Build Coastguard Worker  // An encrypted JSON dictionary where the key/value pairs correspond to
456*d5c09012SAndroid Build Coastguard Worker  // environment variable names and their values.
457*d5c09012SAndroid Build Coastguard Worker  KMSEnvMap encrypted_variables = 3;
458*d5c09012SAndroid Build Coastguard Worker}
459