<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="storagetransfer_v1.html">Storage Transfer API</a> . <a href="storagetransfer_v1.projects.html">projects</a> . <a href="storagetransfer_v1.projects.agentPools.html">agentPools</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(projectId, agentPoolId=None, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an agent pool resource.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an agent pool.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an agent pool.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists agent pools.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing agent pool resource.</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(projectId, agentPoolId=None, body=None, x__xgafv=None)</code>
  <pre>Creates an agent pool resource.

Args:
  projectId: string, Required. The ID of the Google Cloud project that owns the agent pool. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents an On-Premises Agent pool.
  &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
    &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
  &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
  &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
}

  agentPoolId: string, Required. The ID of the agent pool to create. The `agent_pool_id` must meet the following requirements: * Length of 128 characters or less. * Not start with the string `goog`. * Start with a lowercase ASCII character, followed by: * Zero or more: lowercase Latin alphabet characters, numerals, hyphens (`-`), periods (`.`), underscores (`_`), or tildes (`~`). * One or more numerals or lowercase ASCII characters. As expressed by the regular expression: `^(?!goog)[a-z]([a-z0-9-._~]*[a-z0-9])?$`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an On-Premises Agent pool.
  &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
    &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
  &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
  &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an agent pool.

Args:
  name: string, Required. The name of the agent pool to delete. (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>Gets an agent pool.

Args:
  name: string, Required. The name of the agent pool to get. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an On-Premises Agent pool.
  &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
    &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
  &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
  &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists agent pools.

Args:
  projectId: string, Required. The ID of the Google Cloud project that owns the job. (required)
  filter: string, An optional list of query parameters specified as JSON text in the form of: `{&quot;agentPoolNames&quot;:[&quot;agentpool1&quot;,&quot;agentpool2&quot;,...]}` Since `agentPoolNames` support multiple values, its values must be specified with array notation. When the filter is either empty or not provided, the list returns all agent pools for the project.
  pageSize: integer, The list page size. The max allowed value is `256`.
  pageToken: string, The list page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response from ListAgentPools.
  &quot;agentPools&quot;: [ # A list of agent pools.
    { # Represents an On-Premises Agent pool.
      &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
        &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
      },
      &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
      &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
      &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The list next page token.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing agent pool resource.

Args:
  name: string, Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents an On-Premises Agent pool.
  &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
    &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
  &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
  &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
}

  updateMask: string, The [field mask] (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf) of the fields in `agentPool` to update in this request. The following `agentPool` fields can be updated: * display_name * bandwidth_limit
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an On-Premises Agent pool.
  &quot;bandwidthLimit&quot;: { # Specifies a bandwidth limit for an agent pool. # Specifies the bandwidth limit details. If this field is unspecified, the default value is set as &#x27;No Limit&#x27;.
    &quot;limitMbps&quot;: &quot;A String&quot;, # Bandwidth rate in megabytes per second, distributed across all the agents in the pool.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Specifies the client-specified AgentPool description.
  &quot;name&quot;: &quot;A String&quot;, # Required. Specifies a unique string that identifies the agent pool. Format: `projects/{project_id}/agentPools/{agent_pool_id}`
  &quot;state&quot;: &quot;A String&quot;, # Output only. Specifies the state of the AgentPool.
}</pre>
</div>

</body></html>