<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="remotebuildexecution_v1alpha.html">Remote Build Execution API</a> . <a href="remotebuildexecution_v1alpha.projects.html">projects</a> . <a href="remotebuildexecution_v1alpha.projects.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="remotebuildexecution_v1alpha.projects.instances.workerpools.html">workerpools()</a></code>
</p>
<p class="firstline">Returns the workerpools Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new instance in the specified region. Returns a long running operation which contains an instance on completion. While the long running operation is in progress, any call to `GetInstance` returns an instance in state `CREATING`.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified instance. Returns a long running operation which contains a `google.protobuf.Empty` response on completion. Deleting an instance with worker pools in it will delete these worker pools.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the specified instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Lists instances in a project.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, name1=None, loggingEnabled=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified instance. Returns a long running operation which contains the updated instance in the response on completion.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new instance in the specified region. Returns a long running operation which contains an instance on completion. While the long running operation is in progress, any call to `GetInstance` returns an instance in state `CREATING`.

Args:
  parent: string, Resource name of the project containing the instance. Format: `projects/[PROJECT_ID]`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request used for `CreateInstance`.
    &quot;instanceId&quot;: &quot;A String&quot;, # ID of the created instance. A valid `instance_id` must: be 6-50 characters long, contain only lowercase letters, digits, hyphens and underscores, start with a lowercase letter, and end with a lowercase letter or a digit.
    &quot;parent&quot;: &quot;A String&quot;, # Resource name of the project containing the instance. Format: `projects/[PROJECT_ID]`.
    &quot;instance&quot;: { # Instance conceptually encapsulates all Remote Build Execution resources for remote builds. An instance consists of storage and compute resources (for example, `ContentAddressableStorage`, `ActionCache`, `WorkerPools`) used for running remote builds. All Remote Build Execution API calls are scoped to an instance. # Specifies the instance to create. The name in the instance, if specified in the instance, is ignored.
      &quot;featurePolicy&quot;: { # FeaturePolicy defines features allowed to be used on RBE instances, as well as instance-wide behavior changes that take effect without opt-in or opt-out at usage time. # The policy to define whether or not RBE features can be used or how they can be used.
        &quot;dockerSiblingContainers&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerSiblingContainers can be used.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;dockerRuntime&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRuntime is allowed to be set or what runtimes are allowed. Note linux_isolation takes precedence, and if set, docker_runtime values may be rejected if they are incompatible with the selected isolation.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;linuxIsolation&quot;: &quot;A String&quot;, # linux_isolation allows overriding the docker runtime used for containers started on Linux.
        &quot;dockerAddCapabilities&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerAddCapabilities can be used or what capabilities are allowed.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;dockerPrivileged&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerPrivileged can be used.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;dockerChrootPath&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerChrootPath can be used.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;dockerNetwork&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerNetwork can be used or what network modes are allowed. E.g. one may allow `off` value only via `allowed_values`.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;dockerRunAsRoot&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRunAsRoot can be used.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
        &quot;containerImageSources&quot;: { # Defines whether a feature can be used or what values are accepted. # Which container image sources are allowed. Currently only RBE-supported registry (gcr.io) is allowed. One can allow all repositories under a project or one specific repository only. E.g. container_image_sources { policy: RESTRICTED allowed_values: [ &quot;gcr.io/project-foo&quot;, &quot;gcr.io/project-bar/repo-baz&quot;, ] } will allow any repositories under &quot;gcr.io/project-foo&quot; plus the repository &quot;gcr.io/project-bar/repo-baz&quot;. Default (UNSPECIFIED) is equivalent to any source is allowed.
          &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
          &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
            &quot;A String&quot;,
          ],
        },
      },
      &quot;loggingEnabled&quot;: True or False, # Output only. Whether stack driver logging is enabled for the instance.
      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the instance.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Instance resource name formatted as: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. Name should not be populated when creating an instance since it is provided in the `instance_id` field.
      &quot;location&quot;: &quot;A String&quot;, # The location is a GCP region. Currently only `us-central1` is supported.
    },
  }

  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;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;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
      &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>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified instance. Returns a long running operation which contains a `google.protobuf.Empty` response on completion. Deleting an instance with worker pools in it will delete these worker pools.

Args:
  name: string, Name of the instance to delete. Format: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. (required)
  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;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;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
      &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>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns the specified instance.

Args:
  name: string, Name of the instance to retrieve. Format: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Instance conceptually encapsulates all Remote Build Execution resources for remote builds. An instance consists of storage and compute resources (for example, `ContentAddressableStorage`, `ActionCache`, `WorkerPools`) used for running remote builds. All Remote Build Execution API calls are scoped to an instance.
    &quot;featurePolicy&quot;: { # FeaturePolicy defines features allowed to be used on RBE instances, as well as instance-wide behavior changes that take effect without opt-in or opt-out at usage time. # The policy to define whether or not RBE features can be used or how they can be used.
      &quot;dockerSiblingContainers&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerSiblingContainers can be used.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;dockerRuntime&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRuntime is allowed to be set or what runtimes are allowed. Note linux_isolation takes precedence, and if set, docker_runtime values may be rejected if they are incompatible with the selected isolation.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;linuxIsolation&quot;: &quot;A String&quot;, # linux_isolation allows overriding the docker runtime used for containers started on Linux.
      &quot;dockerAddCapabilities&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerAddCapabilities can be used or what capabilities are allowed.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;dockerPrivileged&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerPrivileged can be used.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;dockerChrootPath&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerChrootPath can be used.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;dockerNetwork&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerNetwork can be used or what network modes are allowed. E.g. one may allow `off` value only via `allowed_values`.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;dockerRunAsRoot&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRunAsRoot can be used.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
      &quot;containerImageSources&quot;: { # Defines whether a feature can be used or what values are accepted. # Which container image sources are allowed. Currently only RBE-supported registry (gcr.io) is allowed. One can allow all repositories under a project or one specific repository only. E.g. container_image_sources { policy: RESTRICTED allowed_values: [ &quot;gcr.io/project-foo&quot;, &quot;gcr.io/project-bar/repo-baz&quot;, ] } will allow any repositories under &quot;gcr.io/project-foo&quot; plus the repository &quot;gcr.io/project-bar/repo-baz&quot;. Default (UNSPECIFIED) is equivalent to any source is allowed.
        &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
        &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;loggingEnabled&quot;: True or False, # Output only. Whether stack driver logging is enabled for the instance.
    &quot;state&quot;: &quot;A String&quot;, # Output only. State of the instance.
    &quot;name&quot;: &quot;A String&quot;, # Output only. Instance resource name formatted as: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. Name should not be populated when creating an instance since it is provided in the `instance_id` field.
    &quot;location&quot;: &quot;A String&quot;, # The location is a GCP region. Currently only `us-central1` is supported.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, x__xgafv=None)</code>
  <pre>Lists instances in a project.

Args:
  parent: string, Resource name of the project. Format: `projects/[PROJECT_ID]`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;instances&quot;: [ # The list of instances in a given project.
      { # Instance conceptually encapsulates all Remote Build Execution resources for remote builds. An instance consists of storage and compute resources (for example, `ContentAddressableStorage`, `ActionCache`, `WorkerPools`) used for running remote builds. All Remote Build Execution API calls are scoped to an instance.
        &quot;featurePolicy&quot;: { # FeaturePolicy defines features allowed to be used on RBE instances, as well as instance-wide behavior changes that take effect without opt-in or opt-out at usage time. # The policy to define whether or not RBE features can be used or how they can be used.
          &quot;dockerSiblingContainers&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerSiblingContainers can be used.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;dockerRuntime&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRuntime is allowed to be set or what runtimes are allowed. Note linux_isolation takes precedence, and if set, docker_runtime values may be rejected if they are incompatible with the selected isolation.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;linuxIsolation&quot;: &quot;A String&quot;, # linux_isolation allows overriding the docker runtime used for containers started on Linux.
          &quot;dockerAddCapabilities&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerAddCapabilities can be used or what capabilities are allowed.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;dockerPrivileged&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerPrivileged can be used.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;dockerChrootPath&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerChrootPath can be used.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;dockerNetwork&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerNetwork can be used or what network modes are allowed. E.g. one may allow `off` value only via `allowed_values`.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;dockerRunAsRoot&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRunAsRoot can be used.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
          &quot;containerImageSources&quot;: { # Defines whether a feature can be used or what values are accepted. # Which container image sources are allowed. Currently only RBE-supported registry (gcr.io) is allowed. One can allow all repositories under a project or one specific repository only. E.g. container_image_sources { policy: RESTRICTED allowed_values: [ &quot;gcr.io/project-foo&quot;, &quot;gcr.io/project-bar/repo-baz&quot;, ] } will allow any repositories under &quot;gcr.io/project-foo&quot; plus the repository &quot;gcr.io/project-bar/repo-baz&quot;. Default (UNSPECIFIED) is equivalent to any source is allowed.
            &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
            &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
              &quot;A String&quot;,
            ],
          },
        },
        &quot;loggingEnabled&quot;: True or False, # Output only. Whether stack driver logging is enabled for the instance.
        &quot;state&quot;: &quot;A String&quot;, # Output only. State of the instance.
        &quot;name&quot;: &quot;A String&quot;, # Output only. Instance resource name formatted as: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. Name should not be populated when creating an instance since it is provided in the `instance_id` field.
        &quot;location&quot;: &quot;A String&quot;, # The location is a GCP region. Currently only `us-central1` is supported.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, name1=None, loggingEnabled=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified instance. Returns a long running operation which contains the updated instance in the response on completion.

Args:
  name: string, Output only. Instance resource name formatted as: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. Name should not be populated when creating an instance since it is provided in the `instance_id` field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Instance conceptually encapsulates all Remote Build Execution resources for remote builds. An instance consists of storage and compute resources (for example, `ContentAddressableStorage`, `ActionCache`, `WorkerPools`) used for running remote builds. All Remote Build Execution API calls are scoped to an instance.
  &quot;featurePolicy&quot;: { # FeaturePolicy defines features allowed to be used on RBE instances, as well as instance-wide behavior changes that take effect without opt-in or opt-out at usage time. # The policy to define whether or not RBE features can be used or how they can be used.
    &quot;dockerSiblingContainers&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerSiblingContainers can be used.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;dockerRuntime&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRuntime is allowed to be set or what runtimes are allowed. Note linux_isolation takes precedence, and if set, docker_runtime values may be rejected if they are incompatible with the selected isolation.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;linuxIsolation&quot;: &quot;A String&quot;, # linux_isolation allows overriding the docker runtime used for containers started on Linux.
    &quot;dockerAddCapabilities&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerAddCapabilities can be used or what capabilities are allowed.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;dockerPrivileged&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerPrivileged can be used.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;dockerChrootPath&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerChrootPath can be used.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;dockerNetwork&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerNetwork can be used or what network modes are allowed. E.g. one may allow `off` value only via `allowed_values`.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;dockerRunAsRoot&quot;: { # Defines whether a feature can be used or what values are accepted. # Whether dockerRunAsRoot can be used.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
    &quot;containerImageSources&quot;: { # Defines whether a feature can be used or what values are accepted. # Which container image sources are allowed. Currently only RBE-supported registry (gcr.io) is allowed. One can allow all repositories under a project or one specific repository only. E.g. container_image_sources { policy: RESTRICTED allowed_values: [ &quot;gcr.io/project-foo&quot;, &quot;gcr.io/project-bar/repo-baz&quot;, ] } will allow any repositories under &quot;gcr.io/project-foo&quot; plus the repository &quot;gcr.io/project-bar/repo-baz&quot;. Default (UNSPECIFIED) is equivalent to any source is allowed.
      &quot;policy&quot;: &quot;A String&quot;, # The policy of the feature.
      &quot;allowedValues&quot;: [ # A list of acceptable values. Only effective when the policy is `RESTRICTED`.
        &quot;A String&quot;,
      ],
    },
  },
  &quot;loggingEnabled&quot;: True or False, # Output only. Whether stack driver logging is enabled for the instance.
  &quot;state&quot;: &quot;A String&quot;, # Output only. State of the instance.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Instance resource name formatted as: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`. Name should not be populated when creating an instance since it is provided in the `instance_id` field.
  &quot;location&quot;: &quot;A String&quot;, # The location is a GCP region. Currently only `us-central1` is supported.
}

  name1: string, Deprecated, use instance.Name instead. Name of the instance to update. Format: `projects/[PROJECT_ID]/instances/[INSTANCE_ID]`.
  loggingEnabled: boolean, Deprecated, use instance.logging_enabled instead. Whether to enable Stackdriver logging for this instance.
  updateMask: string, The update mask applies to instance. For the `FieldMask` definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask If an empty update_mask is provided, only the non-default valued field in the worker pool field will be updated. Note that in order to update a field to the default value (zero, false, empty string) an explicit update_mask must be provided.
  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;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;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
      &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>