<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="#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="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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
        # the pool.
      &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
        # received.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
        # received.
    &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
    &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
        # received.
    &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.
  }

  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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
          # the pool.
        &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
          # received.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
          # received.
      &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
      &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
          # received.
      &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.
    }</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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
          # the pool.
        &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
          # received.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
          # received.
      &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
      &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
          # received.
      &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.
    }</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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
              # the pool.
            &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
              # received.
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
              # received.
          &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
          &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
          &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
              # received.
          &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.
        },
    ],
  }</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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
        # the pool.
      &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
        # received.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
        # received.
    &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
    &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
        # received.
    &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.
  }

  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;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;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 # Configuration to be used for a creating workers in the `WorkerPool`.
          # the pool.
        &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;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;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;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;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;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;deleteTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to delete the `WorkerPool` was
          # received.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the `WorkerPool` was
          # received.
      &quot;projectId&quot;: &quot;A String&quot;, # The project ID of the GCP project for which the `WorkerPool` is created.
      &quot;workerCount&quot;: &quot;A String&quot;, # Total number of workers to be created across all requested regions.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to update the `WorkerPool` was
          # received.
      &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.
    }</pre>
</div>

</body></html>