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