<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="container_v1beta1.html">Kubernetes Engine API</a> . <a href="container_v1beta1.projects.html">projects</a> . <a href="container_v1beta1.projects.zones.html">zones</a> . <a href="container_v1beta1.projects.zones.operations.html">operations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#cancel">cancel(projectId, zone, operationId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels the specified operation.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, zone, operationId, name=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified operation.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, zone, parent=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all operations in a project in the specified zone or all zones.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="cancel">cancel(projectId, zone, operationId, body=None, x__xgafv=None)</code>
  <pre>Cancels the specified operation.

Args:
  projectId: string, Required. Deprecated. The Google Developers Console [project ID or project
number](https://support.google.com/cloud/answer/6158840).
This field has been deprecated and replaced by the name field. (required)
  zone: string, Required. Deprecated. The name of the Google Compute Engine
[zone](https://cloud.google.com/compute/docs/zones#available) in which the
operation resides. This field has been deprecated and replaced by the name
field. (required)
  operationId: string, Required. Deprecated. The server-assigned `name` of the operation.
This field has been deprecated and replaced by the name field. (required)
  body: object, The request body.
    The object takes the form of:

{ # CancelOperationRequest cancels a single operation.
    &quot;zone&quot;: &quot;A String&quot;, # Required. Deprecated. The name of the Google Compute Engine
        # [zone](https://cloud.google.com/compute/docs/zones#available) in which the
        # operation resides. This field has been deprecated and replaced by the name
        # field.
    &quot;projectId&quot;: &quot;A String&quot;, # Required. Deprecated. The Google Developers Console [project ID or project
        # number](https://support.google.com/cloud/answer/6158840).
        # This field has been deprecated and replaced by the name field.
    &quot;operationId&quot;: &quot;A String&quot;, # Required. Deprecated. The server-assigned `name` of the operation.
        # This field has been deprecated and replaced by the name field.
    &quot;name&quot;: &quot;A String&quot;, # The name (project, location, operation id) of the operation to cancel.
        # Specified in the format `projects/*/locations/*/operations/*`.
  }

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

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, zone, operationId, name=None, x__xgafv=None)</code>
  <pre>Gets the specified operation.

Args:
  projectId: string, Required. Deprecated. The Google Developers Console [project ID or project
number](https://support.google.com/cloud/answer/6158840).
This field has been deprecated and replaced by the name field. (required)
  zone: string, Required. Deprecated. The name of the Google Compute Engine
[zone](https://cloud.google.com/compute/docs/zones#available) in which the
cluster resides. This field has been deprecated and replaced by the name
field. (required)
  operationId: string, Required. Deprecated. The server-assigned `name` of the operation.
This field has been deprecated and replaced by the name field. (required)
  name: string, The name (project, location, operation id) of the operation to get.
Specified in the format `projects/*/locations/*/operations/*`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This operation resource represents operations that may have happened or are
      # happening on the cluster. All fields are output only.
    &quot;targetLink&quot;: &quot;A String&quot;, # Server-defined URL for the target of the operation.
    &quot;operationType&quot;: &quot;A String&quot;, # The operation type.
    &quot;progress&quot;: { # Information about operation (or operation stage) progress. # Output only. [Output only] Progress information for an operation.
      &quot;stages&quot;: [ # Substages of an operation or a stage.
        # Object with schema name: OperationProgress
      ],
      &quot;name&quot;: &quot;A String&quot;, # A non-parameterized string describing an operation stage.
          # Unset for single-stage operations.
      &quot;status&quot;: &quot;A String&quot;, # Status of an operation stage.
          # Unset for single-stage operations.
      &quot;metrics&quot;: [ # Progress metric bundle, for example:
          #   metrics: [{name: &quot;nodes done&quot;,     int_value: 15},
          #             {name: &quot;nodes total&quot;,    int_value: 32}]
          # or
          #   metrics: [{name: &quot;progress&quot;,       double_value: 0.56},
          #             {name: &quot;progress scale&quot;, double_value: 1.0}]
        { # Progress metric is (string, int|float|string) pair.
          &quot;doubleValue&quot;: 3.14, # For metrics with floating point value.
          &quot;stringValue&quot;: &quot;A String&quot;, # For metrics with custom values (ratios, visual progress, etc.).
          &quot;name&quot;: &quot;A String&quot;, # Required. Metric name, e.g., &quot;nodes total&quot;, &quot;percent done&quot;.
          &quot;intValue&quot;: &quot;A String&quot;, # For metrics with integer value.
        },
      ],
    },
    &quot;selfLink&quot;: &quot;A String&quot;, # Server-defined URL for the resource.
    &quot;location&quot;: &quot;A String&quot;, # [Output only] The name of the Google Compute Engine
        # [zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available)
        # or
        # [region](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available)
        # in which the cluster resides.
    &quot;zone&quot;: &quot;A String&quot;, # The name of the Google Compute Engine
        # [zone](https://cloud.google.com/compute/docs/zones#available) in which the
        # operation is taking place. This field is deprecated, use location instead.
    &quot;endTime&quot;: &quot;A String&quot;, # [Output only] The time the operation completed, in
        # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
    &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. If an error has occurred, a textual description of the error.
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned ID for the operation.
    &quot;clusterConditions&quot;: [ # Which conditions caused the current cluster state.
      { # StatusCondition describes why a cluster or a node pool has a certain status
          # (e.g., ERROR or DEGRADED).
        &quot;code&quot;: &quot;A String&quot;, # Machine-friendly representation of the condition
        &quot;message&quot;: &quot;A String&quot;, # Human-friendly representation of the condition
      },
    ],
    &quot;startTime&quot;: &quot;A String&quot;, # [Output only] The time the operation started, in
        # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
    &quot;detail&quot;: &quot;A String&quot;, # Detailed operation progress, if available.
    &quot;nodepoolConditions&quot;: [ # Which conditions caused the current node pool state.
      { # StatusCondition describes why a cluster or a node pool has a certain status
          # (e.g., ERROR or DEGRADED).
        &quot;code&quot;: &quot;A String&quot;, # Machine-friendly representation of the condition
        &quot;message&quot;: &quot;A String&quot;, # Human-friendly representation of the condition
      },
    ],
    &quot;status&quot;: &quot;A String&quot;, # The current status of the operation.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, zone, parent=None, x__xgafv=None)</code>
  <pre>Lists all operations in a project in the specified zone or all zones.

Args:
  projectId: string, Required. Deprecated. The Google Developers Console [project ID or project
number](https://support.google.com/cloud/answer/6158840).
This field has been deprecated and replaced by the parent field. (required)
  zone: string, Required. Deprecated. The name of the Google Compute Engine
[zone](https://cloud.google.com/compute/docs/zones#available) to return
operations for, or `-` for all zones. This field has been deprecated and
replaced by the parent field. (required)
  parent: string, The parent (project and location) where the operations will be listed.
Specified in the format `projects/*/locations/*`.
Location &quot;-&quot; matches all zones and all regions.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # ListOperationsResponse is the result of ListOperationsRequest.
    &quot;missingZones&quot;: [ # If any zones are listed here, the list of operations returned
        # may be missing the operations from those zones.
      &quot;A String&quot;,
    ],
    &quot;operations&quot;: [ # A list of operations in the project in the specified zone.
      { # This operation resource represents operations that may have happened or are
          # happening on the cluster. All fields are output only.
        &quot;targetLink&quot;: &quot;A String&quot;, # Server-defined URL for the target of the operation.
        &quot;operationType&quot;: &quot;A String&quot;, # The operation type.
        &quot;progress&quot;: { # Information about operation (or operation stage) progress. # Output only. [Output only] Progress information for an operation.
          &quot;stages&quot;: [ # Substages of an operation or a stage.
            # Object with schema name: OperationProgress
          ],
          &quot;name&quot;: &quot;A String&quot;, # A non-parameterized string describing an operation stage.
              # Unset for single-stage operations.
          &quot;status&quot;: &quot;A String&quot;, # Status of an operation stage.
              # Unset for single-stage operations.
          &quot;metrics&quot;: [ # Progress metric bundle, for example:
              #   metrics: [{name: &quot;nodes done&quot;,     int_value: 15},
              #             {name: &quot;nodes total&quot;,    int_value: 32}]
              # or
              #   metrics: [{name: &quot;progress&quot;,       double_value: 0.56},
              #             {name: &quot;progress scale&quot;, double_value: 1.0}]
            { # Progress metric is (string, int|float|string) pair.
              &quot;doubleValue&quot;: 3.14, # For metrics with floating point value.
              &quot;stringValue&quot;: &quot;A String&quot;, # For metrics with custom values (ratios, visual progress, etc.).
              &quot;name&quot;: &quot;A String&quot;, # Required. Metric name, e.g., &quot;nodes total&quot;, &quot;percent done&quot;.
              &quot;intValue&quot;: &quot;A String&quot;, # For metrics with integer value.
            },
          ],
        },
        &quot;selfLink&quot;: &quot;A String&quot;, # Server-defined URL for the resource.
        &quot;location&quot;: &quot;A String&quot;, # [Output only] The name of the Google Compute Engine
            # [zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available)
            # or
            # [region](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available)
            # in which the cluster resides.
        &quot;zone&quot;: &quot;A String&quot;, # The name of the Google Compute Engine
            # [zone](https://cloud.google.com/compute/docs/zones#available) in which the
            # operation is taking place. This field is deprecated, use location instead.
        &quot;endTime&quot;: &quot;A String&quot;, # [Output only] The time the operation completed, in
            # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. If an error has occurred, a textual description of the error.
        &quot;name&quot;: &quot;A String&quot;, # The server-assigned ID for the operation.
        &quot;clusterConditions&quot;: [ # Which conditions caused the current cluster state.
          { # StatusCondition describes why a cluster or a node pool has a certain status
              # (e.g., ERROR or DEGRADED).
            &quot;code&quot;: &quot;A String&quot;, # Machine-friendly representation of the condition
            &quot;message&quot;: &quot;A String&quot;, # Human-friendly representation of the condition
          },
        ],
        &quot;startTime&quot;: &quot;A String&quot;, # [Output only] The time the operation started, in
            # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        &quot;detail&quot;: &quot;A String&quot;, # Detailed operation progress, if available.
        &quot;nodepoolConditions&quot;: [ # Which conditions caused the current node pool state.
          { # StatusCondition describes why a cluster or a node pool has a certain status
              # (e.g., ERROR or DEGRADED).
            &quot;code&quot;: &quot;A String&quot;, # Machine-friendly representation of the condition
            &quot;message&quot;: &quot;A String&quot;, # Human-friendly representation of the condition
          },
        ],
        &quot;status&quot;: &quot;A String&quot;, # The current status of the operation.
      },
    ],
  }</pre>
</div>

</body></html>