<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="cloudbuild_v1alpha1.html">Cloud Build API</a> . <a href="cloudbuild_v1alpha1.projects.html">projects</a> . <a href="cloudbuild_v1alpha1.projects.workerPools.html">workerPools</a></h1>
<h2>Instance Methods</h2>
<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 `WorkerPool` to run the builds, and returns the new worker pool.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a `WorkerPool` by its project ID and WorkerPool name.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns information about a `WorkerPool`.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, x__xgafv=None)</a></code></p>
<p class="firstline">List project's `WorkerPool`s.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update a `WorkerPool`.</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 `WorkerPool` to run the builds, and returns the new worker pool.

Args:
  parent: string, ID of the parent project. (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
  &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
  &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
  &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
  &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
    &quot;A String&quot;,
  ],
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
  &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
  &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
  &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
    &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
    &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
    &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
    &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
      &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
      &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
      &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
}

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

Returns:
  An object of the form:

    { # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
    &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
    &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
    &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
    &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
      &quot;A String&quot;,
    ],
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
    &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
    &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
    &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
      &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
      &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
      &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
      &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
        &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
        &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
        &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
      },
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
    &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a `WorkerPool` by its project ID and WorkerPool name.

Args:
  name: string, The field will contain name of the resource requested, for example: &quot;projects/project-1/workerPools/workerpool-name&quot; (required)
  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(name, x__xgafv=None)</code>
  <pre>Returns information about a `WorkerPool`.

Args:
  name: string, The field will contain name of the resource requested, for example: &quot;projects/project-1/workerPools/workerpool-name&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
    &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
    &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
    &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
    &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
      &quot;A String&quot;,
    ],
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
    &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
    &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
    &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
      &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
      &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
      &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
      &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
        &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
        &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
        &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
      },
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
    &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, x__xgafv=None)</code>
  <pre>List project&#x27;s `WorkerPool`s.

Args:
  parent: string, ID of the parent project. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing existing `WorkerPools`.
    &quot;workerPools&quot;: [ # `WorkerPools` for the project.
      { # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
        &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
        &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
        &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
        &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
          &quot;A String&quot;,
        ],
        &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
        &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
        &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
        &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
          &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
          &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
          &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
          &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
            &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
            &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
            &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
          },
        },
        &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
        &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, x__xgafv=None)</code>
  <pre>Update a `WorkerPool`.

Args:
  name: string, The field will contain name of the resource requested, for example: &quot;projects/project-1/workerPools/workerpool-name&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
  &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
  &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
  &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
  &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
    &quot;A String&quot;,
  ],
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
  &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
  &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
  &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
    &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
    &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
    &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
    &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
      &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
      &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
      &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
}

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

Returns:
  An object of the form:

    { # Configuration for a WorkerPool to run the builds. Workers are machines that Cloud Build uses to run your builds. By default, all workers run in a project owned by Cloud Build. To have full control over the workers that execute your builds -- such as enabling them to access private resources on your private network -- you can request Cloud Build to run the workers in your own project by creating a custom workers pool.
    &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
    &quot;status&quot;: &quot;A String&quot;, # Output only. WorkerPool Status.
    &quot;serviceAccountEmail&quot;: &quot;A String&quot;, # Output only. The service account used to manage the `WorkerPool`. The service account must have the Compute Instance Admin (Beta) permission at the project level.
    &quot;regions&quot;: [ # List of regions to create the `WorkerPool`. Regions can&#x27;t be empty. If Cloud Build adds a new GCP region in the future, the existing `WorkerPool` will not be enabled in the new region automatically; you must add the new region to the `regions` field to enable the `WorkerPool` in that region.
      &quot;A String&quot;,
    ],
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was received.
    &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
    &quot;name&quot;: &quot;A String&quot;, # User-defined name of the `WorkerPool`.
    &quot;workerConfig&quot;: { # WorkerConfig defines the configuration to be used for a creating workers in the pool. # Configuration to be used for a creating workers in the `WorkerPool`.
      &quot;diskSizeGb&quot;: &quot;A String&quot;, # Size of the disk attached to the worker, in GB. See https://cloud.google.com/compute/docs/disks/ If `0` is specified, Cloud Build will use a standard disk size. `disk_size` is overridden if you specify a different disk size in `build_options`. In this case, a VM with a disk size specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds#buildoptions
      &quot;machineType&quot;: &quot;A String&quot;, # Machine Type of the worker, such as n1-standard-1. See https://cloud.google.com/compute/docs/machine-types. If left blank, Cloud Build will use a standard unspecified machine to create the worker pool. `machine_type` is overridden if you specify a different machine type in `build_options`. In this case, the VM specified in the `build_options` will be created on demand at build time. For more information see https://cloud.google.com/cloud-build/docs/speeding-up-builds#using_custom_virtual_machine_sizes
      &quot;tag&quot;: &quot;A String&quot;, # The tag applied to the worker, and the same tag used by the firewall rule. It is used to identify the Cloud Build workers among other VMs. The default value for tag is `worker`.
      &quot;network&quot;: { # Network describes the GCP network used to create workers in. # The network definition used to create the worker. If this section is left empty, the workers will be created in WorkerPool.project_id on the default network.
        &quot;network&quot;: &quot;A String&quot;, # Network on which the workers are created. &quot;default&quot; network is used if empty.
        &quot;subnetwork&quot;: &quot;A String&quot;, # Subnetwork on which the workers are created. &quot;default&quot; subnetwork is used if empty.
        &quot;projectId&quot;: &quot;A String&quot;, # Project id containing the defined network and subnetwork. For a peered VPC, this will be the same as the project_id in which the workers are created. For a shared VPC, this will be the project sharing the network with the project_id project in which workers will be created. For custom workers with no VPC, this will be the same as project_id.
      },
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was received.
    &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was received.
  }</pre>
</div>

</body></html>