<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="genomics_v2alpha1.html">Genomics API</a> . <a href="genomics_v2alpha1.pipelines.html">pipelines</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#run">run(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Runs a pipeline.  The returned Operation's metadata field will contain a</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="run">run(body=None, x__xgafv=None)</code>
  <pre>Runs a pipeline.  The returned Operation&#x27;s metadata field will contain a
google.genomics.v2alpha1.Metadata object describing the status of the
pipeline execution.  The [response] field will contain a
google.genomics.v2alpha1.RunPipelineResponse object if the pipeline
completes successfully.

**Note:** Before you can use this method, the Genomics Service Agent
must have access to your project. This is done automatically when the
Cloud Genomics API is first enabled, but if you delete this permission,
or if you enabled the Cloud Genomics API before the v2alpha1 API
launch, you must disable and re-enable the API to grant the Genomics
Service Agent the required permissions.
Authorization requires the following [Google
IAM](https://cloud.google.com/iam/) permission:

* `genomics.operations.create`

[1]: /genomics/gsa

Args:
  body: object, The request body.
    The object takes the form of:

{ # The arguments to the `RunPipeline` method. The requesting user must have
      # the `iam.serviceAccounts.actAs` permission for the Cloud Genomics service
      # account or the request will fail.
    &quot;labels&quot;: { # User-defined labels to associate with the returned operation. These
        # labels are not propagated to any Google Cloud Platform resources used by
        # the operation, and can be modified at any time.
        # 
        # To associate labels with resources created while executing the operation,
        # see the appropriate resource message (for example, `VirtualMachine`).
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;pipeline&quot;: { # Specifies a series of actions to execute, expressed as Docker containers. # Required. The description of the pipeline to run.
      &quot;environment&quot;: { # The environment to pass into every action. Each action can also specify
          # additional environment variables but cannot delete an entry from this map
          # (though they can overwrite it with a different value).
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;actions&quot;: [ # The list of actions to execute, in the order they are specified.
        { # Specifies a single action that runs a Docker container.
          &quot;mounts&quot;: [ # A list of mounts to make available to the action.
              #
              # In addition to the values specified here, every action has a special
              # virtual disk mounted under `/google` that contains log files and other
              # operational components.
              #
              # &lt;ul&gt;
              #   &lt;li&gt;&lt;code&gt;/google/logs&lt;/code&gt; All logs written during the pipeline
              #   execution.&lt;/li&gt;
              #   &lt;li&gt;&lt;code&gt;/google/logs/output&lt;/code&gt; The combined standard output and
              #   standard error of all actions run as part of the pipeline
              #   execution.&lt;/li&gt;
              #   &lt;li&gt;&lt;code&gt;/google/logs/action/*/stdout&lt;/code&gt; The complete contents of
              #   each individual action&#x27;s standard output.&lt;/li&gt;
              #   &lt;li&gt;&lt;code&gt;/google/logs/action/*/stderr&lt;/code&gt; The complete contents of
              #   each individual action&#x27;s standard error output.&lt;/li&gt;
              # &lt;/ul&gt;
            { # Carries information about a particular disk mount inside a container.
              &quot;path&quot;: &quot;A String&quot;, # The path to mount the disk inside the container.
              &quot;disk&quot;: &quot;A String&quot;, # The name of the disk to mount, as specified in the resources section.
              &quot;readOnly&quot;: True or False, # If true, the disk is mounted read-only inside the container.
            },
          ],
          &quot;commands&quot;: [ # If specified, overrides the `CMD` specified in the container. If the
              # container also has an `ENTRYPOINT` the values are used as entrypoint
              # arguments. Otherwise, they are used as a command and arguments to run
              # inside the container.
            &quot;A String&quot;,
          ],
          &quot;entrypoint&quot;: &quot;A String&quot;, # If specified, overrides the `ENTRYPOINT` specified in the container.
          &quot;flags&quot;: [ # The set of flags to apply to this action.
            &quot;A String&quot;,
          ],
          &quot;credentials&quot;: { # Holds encrypted information that is only decrypted and stored in RAM # If the specified image is hosted on a private registry other than Google
              # Container Registry, the credentials required to pull the image must be
              # specified here as an encrypted secret.
              #
              # The secret must decrypt to a JSON-encoded dictionary containing both
              # `username` and `password` keys.
              # by the worker VM when running the pipeline.
            &quot;cipherText&quot;: &quot;A String&quot;, # The value of the cipherText response from the `encrypt` method. This field
                # is intentionally unaudited.
            &quot;keyName&quot;: &quot;A String&quot;, # The name of the Cloud KMS key that will be used to decrypt the secret
                # value. The VM service account must have the required permissions and
                # authentication scopes to invoke the `decrypt` method on the specified key.
          },
          &quot;labels&quot;: { # Labels to associate with the action. This field is provided to assist
              # workflow engine authors in identifying actions (for example, to indicate
              # what sort of action they perform, such as localization or debugging).
              # They are returned in the operation metadata, but are otherwise ignored.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to give the action to complete. If the action
              # fails to complete before the timeout, it will be terminated and the exit
              # status will be non-zero. The pipeline will continue or terminate based
              # on the rules defined by the `ALWAYS_RUN` and `IGNORE_EXIT_STATUS` flags.
          &quot;portMappings&quot;: { # A map of containers to host port mappings for this container. If the
              # container already specifies exposed ports, use the
              # `PUBLISH_EXPOSED_PORTS` flag instead.
              #
              # The host port number must be less than 65536. If it is zero, an unused
              # random port is assigned. To determine the resulting port number, consult
              # the `ContainerStartedEvent` in the operation metadata.
            &quot;a_key&quot;: 42,
          },
          &quot;environment&quot;: { # The environment to pass into the container. This environment is merged
              # with values specified in the google.genomics.v2alpha1.Pipeline
              # message, overwriting any duplicate values.
              #
              # In addition to the values passed here, a few other values are
              # automatically injected into the environment. These cannot be hidden or
              # overwritten.
              #
              # `GOOGLE_PIPELINE_FAILED` will be set to &quot;1&quot; if the pipeline failed
              # because an action has exited with a non-zero status (and did not have the
              # `IGNORE_EXIT_STATUS` flag set). This can be used to determine if additional
              # debug or logging actions should execute.
              #
              # `GOOGLE_LAST_EXIT_STATUS` will be set to the exit status of the last
              # non-background action that executed. This can be used by workflow engine
              # authors to determine whether an individual action has succeeded or failed.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;name&quot;: &quot;A String&quot;, # An optional name for the container. The container hostname will be set to
              # this name, making it useful for inter-container communication. The name
              # must contain only upper and lowercase alphanumeric characters and hypens
              # and cannot start with a hyphen.
          &quot;imageUri&quot;: &quot;A String&quot;, # Required. The URI to pull the container image from. Note that all images referenced
              # by actions in the pipeline are pulled before the first action runs. If
              # multiple actions reference the same image, it is only pulled once,
              # ensuring that the same image is used for all actions in a single pipeline.
              #
              # The image URI can be either a complete host and image specification (e.g.,
              # quay.io/biocontainers/samtools), a library and image name (e.g.,
              # google/cloud-sdk) or a bare image name (&#x27;bash&#x27;) to pull from the default
              # library.  No schema is required in any of these cases.
              #
              # If the specified image is not public, the service account specified for
              # the Virtual Machine must have access to pull the images from GCR, or
              # appropriate credentials must be specified in the
              # google.genomics.v2alpha1.Action.credentials field.
          &quot;pidNamespace&quot;: &quot;A String&quot;, # An optional identifier for a PID namespace to run the action inside.
              # Multiple actions should use the same string to share a namespace.  If
              # unspecified, a separate isolated namespace is used.
        },
      ],
      &quot;resources&quot;: { # The system resources for the pipeline run. # The resources required for execution.
          #
          # At least one zone or region must be specified or the pipeline run will fail.
        &quot;regions&quot;: [ # The list of regions allowed for VM allocation. If set, the `zones` field
            # must not be set.
          &quot;A String&quot;,
        ],
        &quot;zones&quot;: [ # The list of zones allowed for VM allocation. If set, the `regions` field
            # must not be set.
          &quot;A String&quot;,
        ],
        &quot;virtualMachine&quot;: { # Carries information about a Compute Engine VM resource. # The virtual machine specification.
          &quot;preemptible&quot;: True or False, # If true, allocate a preemptible VM.
          &quot;bootDiskSizeGb&quot;: 42, # The size of the boot disk, in GB. The boot disk must be large
              # enough to accommodate all of the Docker images from each action in the
              # pipeline at the same time. If not specified, a small but reasonable
              # default value is used.
          &quot;nvidiaDriverVersion&quot;: &quot;A String&quot;, # The NVIDIA driver version to use when attaching an NVIDIA GPU accelerator.
              # The version specified here must be compatible with the GPU libraries
              # contained in the container being executed, and must be one of the drivers
              # hosted in the `nvidia-drivers-us-public` bucket on Google Cloud Storage.
          &quot;labels&quot;: { # Optional set of labels to apply to the VM and any attached disk resources.
              # These labels must adhere to the [name and value
              # restrictions](https://cloud.google.com/compute/docs/labeling-resources) on
              # VM labels imposed by Compute Engine.
              #
              # Labels keys with the prefix &#x27;google-&#x27; are reserved for use by Google.
              #
              # Labels applied at creation time to the VM. Applied on a best-effort basis
              # to attached disk resources shortly after VM creation.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;bootImage&quot;: &quot;A String&quot;, # The host operating system image to use.
              #
              # Currently, only Container-Optimized OS images can be used.
              #
              # The default value is `projects/cos-cloud/global/images/family/cos-stable`,
              # which selects the latest stable release of Container-Optimized OS.
              #
              # This option is provided to allow testing against the beta release of the
              # operating system to ensure that the new version does not interact
              # negatively with production pipelines.
              #
              # To test a pipeline against the beta release of Container-Optimized OS,
              # use the value `projects/cos-cloud/global/images/family/cos-beta`.
          &quot;network&quot;: { # VM networking options. # The VM network configuration.
            &quot;usePrivateAddress&quot;: True or False, # If set to true, do not attach a public IP address to the VM. Note that
                # without a public IP address, additional configuration is required to
                # allow the VM to access Google services.
                #
                # See https://cloud.google.com/vpc/docs/configure-private-google-access
                # for more information.
            &quot;subnetwork&quot;: &quot;A String&quot;, # If the specified network is configured for custom subnet creation, the
                # name of the subnetwork to attach the instance to must be specified here.
                #
                # The value is prefixed with `regions/*/subnetworks/` unless it contains a
                # `/`, in which case it is assumed to be a fully specified subnetwork
                # resource URL.
                #
                # If the `*` character appears in the value, it is replaced with the region
                # that the virtual machine has been allocated in.
            &quot;name&quot;: &quot;A String&quot;, # The network name to attach the VM&#x27;s network interface to. The value will
                # be prefixed with `global/networks/` unless it contains a `/`, in which
                # case it is assumed to be a fully specified network resource URL.
                #
                # If unspecified, the global default network is used.
          },
          &quot;enableStackdriverMonitoring&quot;: True or False, # Whether Stackdriver monitoring should be enabled on the VM.
          &quot;dockerCacheImages&quot;: [ # The Compute Engine Disk Images to use as a Docker cache. The disks will be
              # mounted into the Docker folder in a way that the images present in the
              # cache will not need to be pulled. The digests of the cached images must
              # match those of the tags used or the latest version will still be pulled.
              # Only a single image is supported.
            &quot;A String&quot;,
          ],
          &quot;machineType&quot;: &quot;A String&quot;, # Required. The machine type of the virtual machine to create. Must be the short name
              # of a standard machine type (such as &quot;n1-standard-1&quot;) or a custom machine
              # type (such as &quot;custom-1-4096&quot;, where &quot;1&quot; indicates the number of vCPUs and
              # &quot;4096&quot; indicates the memory in MB). See
              # [Creating an instance with a custom machine
              # type](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#create)
              # for more specifications on creating a custom machine type.
          &quot;serviceAccount&quot;: { # Carries information about a Google Cloud service account. # The service account to install on the VM. This account does not need
              # any permissions other than those required by the pipeline.
            &quot;scopes&quot;: [ # List of scopes to be enabled for this service account on the VM, in
                # addition to the cloud-platform API scope that will be added by default.
              &quot;A String&quot;,
            ],
            &quot;email&quot;: &quot;A String&quot;, # Email address of the service account. If not specified, the default
                # Compute Engine service account for the project will be used.
          },
          &quot;disks&quot;: [ # The list of disks to create and attach to the VM.
            { # Carries information about a disk that can be attached to a VM.
                #
                # See https://cloud.google.com/compute/docs/disks/performance for more
                # information about disk type, size, and performance considerations.
              &quot;type&quot;: &quot;A String&quot;, # The Compute Engine disk type. If unspecified, `pd-standard` is used.
              &quot;sourceImage&quot;: &quot;A String&quot;, # An optional image to put on the disk before attaching it to the VM.
              &quot;sizeGb&quot;: 42, # The size, in GB, of the disk to attach. If the size is not
                  # specified, a default is chosen to ensure reasonable I/O performance.
                  #
                  # If the disk type is specified as `local-ssd`, multiple local drives are
                  # automatically combined to provide the requested size. Note, however, that
                  # each physical SSD is 375GB in size, and no more than 8 drives can be
                  # attached to a single instance.
              &quot;name&quot;: &quot;A String&quot;, # A user-supplied name for the disk. Used when mounting the disk into
                  # actions. The name must contain only upper and lowercase alphanumeric
                  # characters and hypens and cannot start with a hyphen.
            },
          ],
          &quot;accelerators&quot;: [ # The list of accelerators to attach to the VM.
            { # Carries information about an accelerator that can be attached to a VM.
              &quot;type&quot;: &quot;A String&quot;, # The accelerator type string (for example, &quot;nvidia-tesla-k80&quot;).
                  #
                  # Only NVIDIA GPU accelerators are currently supported. If an NVIDIA GPU is
                  # attached, the required runtime libraries will be made available to all
                  # containers under `/usr/local/nvidia`. The driver version to install must
                  # be specified using the NVIDIA driver version parameter on the virtual
                  # machine specification. Note that attaching a GPU increases the worker VM
                  # startup time by a few minutes.
              &quot;count&quot;: &quot;A String&quot;, # How many accelerators of this type to attach.
            },
          ],
          &quot;cpuPlatform&quot;: &quot;A String&quot;, # The CPU platform to request. An instance based on a newer platform can be
              # allocated, but never one with fewer capabilities. The value of this
              # parameter must be a valid Compute Engine CPU platform name (such as &quot;Intel
              # Skylake&quot;). This parameter is only useful for carefully optimized work
              # loads where the CPU platform has a significant impact.
              #
              # For more information about the effect of this parameter, see
              # https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
        },
        &quot;projectId&quot;: &quot;A String&quot;, # The project ID to allocate resources in.
      },
      &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to give the pipeline to complete.  This includes
          # the time spent waiting for a worker to be allocated.  If the pipeline fails
          # to complete before the timeout, it will be cancelled and the error code
          # will be set to DEADLINE_EXCEEDED.
          #
          # If unspecified, it will default to 7 days.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;metadata&quot;: { # An OperationMetadata or Metadata object. This will always be returned with the Operation.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;response&quot;: { # An Empty object.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. For example&amp;#58; `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
  }</pre>
</div>

</body></html>