pipelines.proto 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. // Copyright 2016 Google Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. syntax = "proto3";
  15. package google.genomics.v1alpha2;
  16. import "google/api/annotations.proto";
  17. import "google/longrunning/operations.proto";
  18. import "google/protobuf/duration.proto";
  19. import "google/protobuf/empty.proto";
  20. import "google/protobuf/timestamp.proto";
  21. import "google/rpc/code.proto";
  22. option cc_enable_arenas = true;
  23. option go_package = "google.golang.org/genproto/googleapis/genomics/v1alpha2;genomics";
  24. option java_multiple_files = true;
  25. option java_outer_classname = "PipelinesProto";
  26. option java_package = "com.google.genomics.v1a";
  27. // A service for running genomics pipelines.
  28. service PipelinesV1Alpha2 {
  29. // Creates a pipeline that can be run later. Create takes a Pipeline that
  30. // has all fields other than `pipelineId` populated, and then returns
  31. // the same pipeline with `pipelineId` populated. This id can be used
  32. // to run the pipeline.
  33. //
  34. // Caller must have WRITE permission to the project.
  35. rpc CreatePipeline(CreatePipelineRequest) returns (Pipeline) {
  36. option (google.api.http) = {
  37. post: "/v1alpha2/pipelines"
  38. body: "pipeline"
  39. };
  40. }
  41. // Runs a pipeline. If `pipelineId` is specified in the request, then
  42. // run a saved pipeline. If `ephemeralPipeline` is specified, then run
  43. // that pipeline once without saving a copy.
  44. //
  45. // The caller must have READ permission to the project where the pipeline
  46. // is stored and WRITE permission to the project where the pipeline will be
  47. // run, as VMs will be created and storage will be used.
  48. rpc RunPipeline(RunPipelineRequest) returns (google.longrunning.Operation) {
  49. option (google.api.http) = {
  50. post: "/v1alpha2/pipelines:run"
  51. body: "*"
  52. };
  53. }
  54. // Retrieves a pipeline based on ID.
  55. //
  56. // Caller must have READ permission to the project.
  57. rpc GetPipeline(GetPipelineRequest) returns (Pipeline) {
  58. option (google.api.http) = {
  59. get: "/v1alpha2/pipelines/{pipeline_id}"
  60. };
  61. }
  62. // Lists pipelines.
  63. //
  64. // Caller must have READ permission to the project.
  65. rpc ListPipelines(ListPipelinesRequest) returns (ListPipelinesResponse) {
  66. option (google.api.http) = {
  67. get: "/v1alpha2/pipelines"
  68. };
  69. }
  70. // Deletes a pipeline based on ID.
  71. //
  72. // Caller must have WRITE permission to the project.
  73. rpc DeletePipeline(DeletePipelineRequest) returns (google.protobuf.Empty) {
  74. option (google.api.http) = {
  75. delete: "/v1alpha2/pipelines/{pipeline_id}"
  76. };
  77. }
  78. // Gets controller configuration information. Should only be called
  79. // by VMs created by the Pipelines Service and not by end users.
  80. rpc GetControllerConfig(GetControllerConfigRequest)
  81. returns (ControllerConfig) {
  82. option (google.api.http) = {
  83. get: "/v1alpha2/pipelines:getControllerConfig"
  84. };
  85. }
  86. // Sets status of a given operation. Any new timestamps (as determined by
  87. // description) are appended to TimestampEvents. Should only be called by VMs
  88. // created by the Pipelines Service and not by end users.
  89. rpc SetOperationStatus(SetOperationStatusRequest)
  90. returns (google.protobuf.Empty) {
  91. option (google.api.http) = {
  92. put: "/v1alpha2/pipelines:setOperationStatus"
  93. body: "*"
  94. };
  95. }
  96. }
  97. // Describes a Compute Engine resource that is being managed by a running
  98. // [pipeline][google.genomics.v1alpha2.Pipeline].
  99. message ComputeEngine {
  100. // The instance on which the operation is running.
  101. string instance_name = 1;
  102. // The availability zone in which the instance resides.
  103. string zone = 2;
  104. // The machine type of the instance.
  105. string machine_type = 3;
  106. // The names of the disks that were created for this pipeline.
  107. repeated string disk_names = 4;
  108. }
  109. // Runtime metadata that will be populated in the
  110. // [runtimeMetadata][google.genomics.v1.OperationMetadata.runtime_metadata]
  111. // field of the Operation associated with a RunPipeline execution.
  112. message RuntimeMetadata {
  113. // Execution information specific to Google Compute Engine.
  114. ComputeEngine compute_engine = 1;
  115. }
  116. // The pipeline object. Represents a transformation from a set of input
  117. // parameters to a set of output parameters. The transformation is defined
  118. // as a docker image and command to run within that image. Each pipeline
  119. // is run on a Google Compute Engine VM. A pipeline can be created with the
  120. // `create` method and then later run with the `run` method, or a pipeline can
  121. // be defined and run all at once with the `run` method.
  122. message Pipeline {
  123. // Required. The project in which to create the pipeline. The caller must have
  124. // WRITE access.
  125. string project_id = 1;
  126. // Required. A user specified pipeline name that does not have to be unique.
  127. // This name can be used for filtering Pipelines in ListPipelines.
  128. string name = 2;
  129. // User-specified description.
  130. string description = 3;
  131. // Input parameters of the pipeline.
  132. repeated PipelineParameter input_parameters = 8;
  133. // Output parameters of the pipeline.
  134. repeated PipelineParameter output_parameters = 9;
  135. // Required. The executor indicates in which environment the pipeline runs.
  136. oneof executor {
  137. // Specifies the docker run information.
  138. DockerExecutor docker = 5;
  139. }
  140. // Required. Specifies resource requirements for the pipeline run.
  141. // Required fields:
  142. //
  143. // *
  144. // [minimumCpuCores][google.genomics.v1alpha2.PipelineResources.minimum_cpu_cores]
  145. //
  146. // *
  147. // [minimumRamGb][google.genomics.v1alpha2.PipelineResources.minimum_ram_gb]
  148. PipelineResources resources = 6;
  149. // Unique pipeline id that is generated by the service when CreatePipeline
  150. // is called. Cannot be specified in the Pipeline used in the
  151. // CreatePipelineRequest, and will be populated in the response to
  152. // CreatePipeline and all subsequent Get and List calls. Indicates that the
  153. // service has registered this pipeline.
  154. string pipeline_id = 7;
  155. }
  156. // The request to create a pipeline. The pipeline field here should not have
  157. // `pipelineId` populated, as that will be populated by the server.
  158. message CreatePipelineRequest {
  159. // The pipeline to create. Should not have `pipelineId` populated.
  160. Pipeline pipeline = 1;
  161. }
  162. // The pipeline run arguments.
  163. message RunPipelineArgs {
  164. // Required. The project in which to run the pipeline. The caller must have
  165. // WRITER access to all Google Cloud services and resources (e.g. Google
  166. // Compute Engine) will be used.
  167. string project_id = 1;
  168. // Pipeline input arguments; keys are defined in the pipeline documentation.
  169. // All input parameters that do not have default values must be specified.
  170. // If parameters with defaults are specified here, the defaults will be
  171. // overridden.
  172. map<string, string> inputs = 2;
  173. // Pipeline output arguments; keys are defined in the pipeline
  174. // documentation. All output parameters of without default values
  175. // must be specified. If parameters with defaults are specified
  176. // here, the defaults will be overridden.
  177. map<string, string> outputs = 3;
  178. // The Google Cloud Service Account that will be used to access data and
  179. // services. By default, the compute service account associated with
  180. // `projectId` is used.
  181. ServiceAccount service_account = 4;
  182. // This field is deprecated. Use `labels` instead. Client-specified pipeline
  183. // operation identifier.
  184. string client_id = 5;
  185. // Specifies resource requirements/overrides for the pipeline run.
  186. PipelineResources resources = 6;
  187. // Required. Logging options. Used by the service to communicate results
  188. // to the user.
  189. LoggingOptions logging = 7;
  190. // How long to keep the VM up after a failure (for example docker command
  191. // failed, copying input or output files failed, etc). While the VM is up, one
  192. // can ssh into the VM to debug. Default is 0; maximum allowed value is 1 day.
  193. google.protobuf.Duration keep_vm_alive_on_failure_duration = 8;
  194. // Labels to apply to this pipeline run. Labels will also be applied to
  195. // compute resources (VM, disks) created by this pipeline run. When listing
  196. // operations, operations can [filtered by labels]
  197. // [google.longrunning.ListOperationsRequest.filter].
  198. // Label keys may not be empty; label values may be empty. Non-empty labels
  199. // must be 1-63 characters long, and comply with [RFC1035]
  200. // (https://www.ietf.org/rfc/rfc1035.txt).
  201. // Specifically, the name must be 1-63 characters long and match the regular
  202. // expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
  203. // character must be a lowercase letter, and all following characters must be
  204. // a dash, lowercase letter, or digit, except the last character, which cannot
  205. // be a dash.
  206. map<string, string> labels = 9;
  207. }
  208. // The request to run a pipeline. If `pipelineId` is specified, it
  209. // refers to a saved pipeline created with CreatePipeline and set as
  210. // the `pipelineId` of the returned Pipeline object. If
  211. // `ephemeralPipeline` is specified, that pipeline is run once
  212. // with the given args and not saved. It is an error to specify both
  213. // `pipelineId` and `ephemeralPipeline`. `pipelineArgs`
  214. // must be specified.
  215. message RunPipelineRequest {
  216. oneof pipeline {
  217. // The already created pipeline to run.
  218. string pipeline_id = 1;
  219. // A new pipeline object to run once and then delete.
  220. Pipeline ephemeral_pipeline = 2;
  221. }
  222. // The arguments to use when running this pipeline.
  223. RunPipelineArgs pipeline_args = 3;
  224. }
  225. // A request to get a saved pipeline by id.
  226. message GetPipelineRequest {
  227. // Caller must have READ access to the project in which this pipeline
  228. // is defined.
  229. string pipeline_id = 1;
  230. }
  231. // A request to list pipelines in a given project. Pipelines can be
  232. // filtered by name using `namePrefix`: all pipelines with names that
  233. // begin with `namePrefix` will be returned. Uses standard pagination:
  234. // `pageSize` indicates how many pipelines to return, and
  235. // `pageToken` comes from a previous ListPipelinesResponse to
  236. // indicate offset.
  237. message ListPipelinesRequest {
  238. // Required. The name of the project to search for pipelines. Caller
  239. // must have READ access to this project.
  240. string project_id = 1;
  241. // Pipelines with names that match this prefix should be
  242. // returned. If unspecified, all pipelines in the project, up to
  243. // `pageSize`, will be returned.
  244. string name_prefix = 2;
  245. // Number of pipelines to return at once. Defaults to 256, and max
  246. // is 2048.
  247. int32 page_size = 3;
  248. // Token to use to indicate where to start getting results.
  249. // If unspecified, returns the first page of results.
  250. string page_token = 4;
  251. }
  252. // The response of ListPipelines. Contains at most `pageSize`
  253. // pipelines. If it contains `pageSize` pipelines, and more pipelines
  254. // exist, then `nextPageToken` will be populated and should be
  255. // used as the `pageToken` argument to a subsequent ListPipelines
  256. // request.
  257. message ListPipelinesResponse {
  258. // The matched pipelines.
  259. repeated Pipeline pipelines = 1;
  260. // The token to use to get the next page of results.
  261. string next_page_token = 2;
  262. }
  263. // The request to delete a saved pipeline by ID.
  264. message DeletePipelineRequest {
  265. // Caller must have WRITE access to the project in which this pipeline
  266. // is defined.
  267. string pipeline_id = 1;
  268. }
  269. // Request to get controller configuation. Should only be used
  270. // by VMs created by the Pipelines Service and not by end users.
  271. message GetControllerConfigRequest {
  272. // The operation to retrieve controller configuration for.
  273. string operation_id = 1;
  274. uint64 validation_token = 2;
  275. }
  276. // Stores the information that the controller will fetch from the
  277. // server in order to run. Should only be used by VMs created by the
  278. // Pipelines Service and not by end users.
  279. message ControllerConfig {
  280. message RepeatedString {
  281. repeated string values = 1;
  282. }
  283. string image = 1;
  284. string cmd = 2;
  285. string gcs_log_path = 3;
  286. string machine_type = 4;
  287. map<string, string> vars = 5;
  288. map<string, string> disks = 6;
  289. map<string, RepeatedString> gcs_sources = 7;
  290. map<string, RepeatedString> gcs_sinks = 8;
  291. }
  292. // Stores the list of events and times they occured for major events in job
  293. // execution.
  294. message TimestampEvent {
  295. // String indicating the type of event
  296. string description = 1;
  297. // The time this event occured.
  298. google.protobuf.Timestamp timestamp = 2;
  299. }
  300. // Request to set operation status. Should only be used by VMs
  301. // created by the Pipelines Service and not by end users.
  302. message SetOperationStatusRequest {
  303. string operation_id = 1;
  304. repeated TimestampEvent timestamp_events = 2;
  305. google.rpc.Code error_code = 3;
  306. string error_message = 4;
  307. uint64 validation_token = 5;
  308. }
  309. // A Google Cloud Service Account.
  310. message ServiceAccount {
  311. // Email address of the service account. Defaults to `default`,
  312. // which uses the compute service account associated with the project.
  313. string email = 1;
  314. // List of scopes to be enabled for this service account on the VM.
  315. // The following scopes are automatically included:
  316. //
  317. // * https://www.googleapis.com/auth/compute
  318. // * https://www.googleapis.com/auth/devstorage.full_control
  319. // * https://www.googleapis.com/auth/genomics
  320. // * https://www.googleapis.com/auth/logging.write
  321. // * https://www.googleapis.com/auth/monitoring.write
  322. repeated string scopes = 2;
  323. }
  324. // The logging options for the pipeline run.
  325. message LoggingOptions {
  326. // The location in Google Cloud Storage to which the pipeline logs
  327. // will be copied. Can be specified as a fully qualified directory
  328. // path, in which case logs will be output with a unique identifier
  329. // as the filename in that directory, or as a fully specified path,
  330. // which must end in `.log`, in which case that path will be
  331. // used, and the user must ensure that logs are not
  332. // overwritten. Stdout and stderr logs from the run are also
  333. // generated and output as `-stdout.log` and `-stderr.log`.
  334. string gcs_path = 1;
  335. }
  336. // The system resources for the pipeline run.
  337. message PipelineResources {
  338. // A Google Compute Engine disk resource specification.
  339. message Disk {
  340. // The types of disks that may be attached to VMs.
  341. enum Type {
  342. // Default disk type. Use one of the other options below.
  343. TYPE_UNSPECIFIED = 0;
  344. // Specifies a Google Compute Engine persistent hard disk. See
  345. // https://cloud.google.com/compute/docs/disks/#pdspecs for details.
  346. PERSISTENT_HDD = 1;
  347. // Specifies a Google Compute Engine persistent solid-state disk. See
  348. // https://cloud.google.com/compute/docs/disks/#pdspecs for details.
  349. PERSISTENT_SSD = 2;
  350. // Specifies a Google Compute Engine local SSD.
  351. // See https://cloud.google.com/compute/docs/disks/local-ssd for details.
  352. LOCAL_SSD = 3;
  353. }
  354. // Required. The name of the disk that can be used in the pipeline
  355. // parameters. Must be 1 - 63 characters.
  356. // The name "boot" is reserved for system use.
  357. string name = 1;
  358. // Required. The type of the disk to create.
  359. Type type = 2;
  360. // The size of the disk. Defaults to 500 (GB).
  361. // This field is not applicable for local SSD.
  362. int32 size_gb = 3;
  363. // The full or partial URL of the persistent disk to attach. See
  364. // https://cloud.google.com/compute/docs/reference/latest/instances#resource
  365. // and
  366. // https://cloud.google.com/compute/docs/disks/persistent-disks#snapshots
  367. // for more details.
  368. string source = 4;
  369. // Deprecated. Disks created by the Pipelines API will be deleted at the end
  370. // of the pipeline run, regardless of what this field is set to.
  371. bool auto_delete = 6;
  372. // Required at create time and cannot be overridden at run time.
  373. // Specifies the path in the docker container where files on
  374. // this disk should be located. For example, if `mountPoint`
  375. // is `/mnt/disk`, and the parameter has `localPath`
  376. // `inputs/file.txt`, the docker container can access the data at
  377. // `/mnt/disk/inputs/file.txt`.
  378. string mount_point = 8;
  379. }
  380. // The minimum number of cores to use. Defaults to 1.
  381. int32 minimum_cpu_cores = 1;
  382. // Whether to use preemptible VMs. Defaults to `false`. In order to use this,
  383. // must be true for both create time and run time. Cannot be true at run time
  384. // if false at create time.
  385. bool preemptible = 2;
  386. // The minimum amount of RAM to use. Defaults to 3.75 (GB)
  387. double minimum_ram_gb = 3;
  388. // Disks to attach.
  389. repeated Disk disks = 4;
  390. // List of Google Compute Engine availability zones to which resource
  391. // creation will restricted. If empty, any zone may be chosen.
  392. repeated string zones = 5;
  393. // The size of the boot disk. Defaults to 10 (GB).
  394. int32 boot_disk_size_gb = 6;
  395. // Whether to assign an external IP to the instance. This is an experimental
  396. // feature that may go away. Defaults to false.
  397. // Corresponds to `--no_address` flag for [gcloud compute instances create]
  398. // (https://cloud.google.com/sdk/gcloud/reference/compute/instances/create).
  399. // In order to use this, must be true for both create time and run time.
  400. // Cannot be true at run time if false at create time. If you need to ssh into
  401. // a private IP VM for debugging, you can ssh to a public VM and then ssh into
  402. // the private VM's Internal IP. If noAddress is set, this pipeline run may
  403. // only load docker images from Google Container Registry and not Docker Hub.
  404. // ** Note: To use this option, your project must be in Google Access for
  405. // Private IPs Early Access Program.**
  406. bool no_address = 7;
  407. }
  408. // Parameters facilitate setting and delivering data into the
  409. // pipeline's execution environment. They are defined at create time,
  410. // with optional defaults, and can be overridden at run time.
  411. //
  412. // If `localCopy` is unset, then the parameter specifies a string that
  413. // is passed as-is into the pipeline, as the value of the environment
  414. // variable with the given name. A default value can be optionally
  415. // specified at create time. The default can be overridden at run time
  416. // using the inputs map. If no default is given, a value must be
  417. // supplied at runtime.
  418. //
  419. // If `localCopy` is defined, then the parameter specifies a data
  420. // source or sink, both in Google Cloud Storage and on the Docker container
  421. // where the pipeline computation is run. The [service account associated with
  422. // the Pipeline][google.genomics.v1alpha2.RunPipelineArgs.service_account] (by
  423. // default the project's Compute Engine service account) must have access to the
  424. // Google Cloud Storage paths.
  425. //
  426. // At run time, the Google Cloud Storage paths can be overridden if a default
  427. // was provided at create time, or must be set otherwise. The pipeline runner
  428. // should add a key/value pair to either the inputs or outputs map. The
  429. // indicated data copies will be carried out before/after pipeline execution,
  430. // just as if the corresponding arguments were provided to `gsutil cp`.
  431. //
  432. // For example: Given the following `PipelineParameter`, specified
  433. // in the `inputParameters` list:
  434. //
  435. // ```
  436. // {name: "input_file", localCopy: {path: "file.txt", disk: "pd1"}}
  437. // ```
  438. //
  439. // where `disk` is defined in the `PipelineResources` object as:
  440. //
  441. // ```
  442. // {name: "pd1", mountPoint: "/mnt/disk/"}
  443. // ```
  444. //
  445. // We create a disk named `pd1`, mount it on the host VM, and map
  446. // `/mnt/pd1` to `/mnt/disk` in the docker container. At
  447. // runtime, an entry for `input_file` would be required in the inputs
  448. // map, such as:
  449. //
  450. // ```
  451. // inputs["input_file"] = "gs://my-bucket/bar.txt"
  452. // ```
  453. //
  454. // This would generate the following gsutil call:
  455. //
  456. // ```
  457. // gsutil cp gs://my-bucket/bar.txt /mnt/pd1/file.txt
  458. // ```
  459. //
  460. // The file `/mnt/pd1/file.txt` maps to `/mnt/disk/file.txt` in the
  461. // Docker container. Acceptable paths are:
  462. //
  463. // <table>
  464. // <thead>
  465. // <tr><th>Google Cloud storage path</th><th>Local path</th></tr>
  466. // </thead>
  467. // <tbody>
  468. // <tr><td>file</td><td>file</td></tr>
  469. // <tr><td>glob</td><td>directory</td></tr>
  470. // </tbody>
  471. // </table>
  472. //
  473. // For outputs, the direction of the copy is reversed:
  474. //
  475. // ```
  476. // gsutil cp /mnt/disk/file.txt gs://my-bucket/bar.txt
  477. // ```
  478. //
  479. // Acceptable paths are:
  480. //
  481. // <table>
  482. // <thead>
  483. // <tr><th>Local path</th><th>Google Cloud Storage path</th></tr>
  484. // </thead>
  485. // <tbody>
  486. // <tr><td>file</td><td>file</td></tr>
  487. // <tr>
  488. // <td>file</td>
  489. // <td>directory - directory must already exist</td>
  490. // </tr>
  491. // <tr>
  492. // <td>glob</td>
  493. // <td>directory - directory will be created if it doesn't exist</td></tr>
  494. // </tbody>
  495. // </table>
  496. //
  497. // One restriction due to docker limitations, is that for outputs that are found
  498. // on the boot disk, the local path cannot be a glob and must be a file.
  499. message PipelineParameter {
  500. // LocalCopy defines how a remote file should be copied to and from the VM.
  501. message LocalCopy {
  502. // Required. The path within the user's docker container where
  503. // this input should be localized to and from, relative to the specified
  504. // disk's mount point. For example: file.txt,
  505. string path = 1;
  506. // Required. The name of the disk where this parameter is
  507. // located. Can be the name of one of the disks specified in the
  508. // Resources field, or "boot", which represents the Docker
  509. // instance's boot disk and has a mount point of `/`.
  510. string disk = 2;
  511. }
  512. // Required. Name of the parameter - the pipeline runner uses this string
  513. // as the key to the input and output maps in RunPipeline.
  514. string name = 1;
  515. // Human-readable description.
  516. string description = 2;
  517. // The default value for this parameter. Can be overridden at runtime.
  518. // If `localCopy` is present, then this must be a Google Cloud Storage path
  519. // beginning with `gs://`.
  520. string default_value = 5;
  521. // If present, this parameter is marked for copying to and from the VM.
  522. // `LocalCopy` indicates where on the VM the file should be. The value
  523. // given to this parameter (either at runtime or using `defaultValue`)
  524. // must be the remote path where the file should be.
  525. LocalCopy local_copy = 6;
  526. }
  527. // The Docker execuctor specification.
  528. message DockerExecutor {
  529. // Required. Image name from either Docker Hub or Google Container Registry.
  530. // Users that run pipelines must have READ access to the image.
  531. string image_name = 1;
  532. // Required. The command or newline delimited script to run. The command
  533. // string will be executed within a bash shell.
  534. //
  535. // If the command exits with a non-zero exit code, output parameter
  536. // de-localization will be skipped and the pipeline operation's
  537. // [`error`][google.longrunning.Operation.error] field will be populated.
  538. //
  539. // Maximum command string length is 16384.
  540. string cmd = 2;
  541. }