<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="dns_v1beta2.html">Cloud DNS API</a> . <a href="dns_v1beta2.responsePolicies.html">responsePolicies</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(project, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new Response Policy</p>
<p class="toc_element">
  <code><a href="#delete">delete(project, responsePolicy, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a previously created Response Policy. Fails if the response policy is non-empty or still being referenced by a network.</p>
<p class="toc_element">
  <code><a href="#get">get(project, responsePolicy, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Fetches the representation of an existing Response Policy.</p>
<p class="toc_element">
  <code><a href="#list">list(project, maxResults=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enumerates all Response Policies associated with a project.</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(project, responsePolicy, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Applies a partial update to an existing Response Policy.</p>
<p class="toc_element">
  <code><a href="#update">update(project, responsePolicy, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing Response Policy.</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(project, body=None, clientOperationId=None, x__xgafv=None)</code>
  <pre>Creates a new Response Policy

Args:
  project: string, Identifies the project addressed by this request. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
  &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
  &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
    {
      &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
      &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
  &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
  &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
    {
      &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
      &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
    },
  ],
  &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
}

  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
  &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
  &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
    {
      &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
      &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
  &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
  &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
    {
      &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
      &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
    },
  ],
  &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(project, responsePolicy, clientOperationId=None, x__xgafv=None)</code>
  <pre>Deletes a previously created Response Policy. Fails if the response policy is non-empty or still being referenced by a network.

Args:
  project: string, Identifies the project addressed by this request. (required)
  responsePolicy: string, User assigned name of the Response Policy addressed by this request. (required)
  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, responsePolicy, clientOperationId=None, x__xgafv=None)</code>
  <pre>Fetches the representation of an existing Response Policy.

Args:
  project: string, Identifies the project addressed by this request. (required)
  responsePolicy: string, User assigned name of the Response Policy addressed by this request. (required)
  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
  &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
  &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
    {
      &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
      &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
  &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
  &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
    {
      &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
      &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
    },
  ],
  &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, maxResults=None, pageToken=None, x__xgafv=None)</code>
  <pre>Enumerates all Response Policies associated with a project.

Args:
  project: string, Identifies the project addressed by this request. (required)
  maxResults: integer, Optional. Maximum number of results to be returned. If unspecified, the server decides how many results to return.
  pageToken: string, Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;header&quot;: { # Elements common to every response.
    &quot;operationId&quot;: &quot;A String&quot;, # For mutating operation requests that completed successfully. This is the client_operation_id if the client specified it, otherwise it is generated by the server (output only).
  },
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your page token. This lets you the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned are an inconsistent view of the collection. You cannot retrieve a consistent snapshot of a collection larger than the maximum page size.
  &quot;responsePolicies&quot;: [ # The Response Policy resources.
    { # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
      &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
      &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
        {
          &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
          &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
      &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
      &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
        {
          &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
          &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
        },
      ],
      &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
    },
  ],
}</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(project, responsePolicy, body=None, clientOperationId=None, x__xgafv=None)</code>
  <pre>Applies a partial update to an existing Response Policy.

Args:
  project: string, Identifies the project addressed by this request. (required)
  responsePolicy: string, User assigned name of the Respones Policy addressed by this request. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
  &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
  &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
    {
      &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
      &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
  &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
  &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
    {
      &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
      &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
    },
  ],
  &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
}

  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;header&quot;: { # Elements common to every response.
    &quot;operationId&quot;: &quot;A String&quot;, # For mutating operation requests that completed successfully. This is the client_operation_id if the client specified it, otherwise it is generated by the server (output only).
  },
  &quot;responsePolicy&quot;: { # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
    &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
    &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
      {
        &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
        &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
      },
    ],
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
    &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
      {
        &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
        &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
      },
    ],
    &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(project, responsePolicy, body=None, clientOperationId=None, x__xgafv=None)</code>
  <pre>Updates an existing Response Policy.

Args:
  project: string, Identifies the project addressed by this request. (required)
  responsePolicy: string, User assigned name of the Response Policy addressed by this request. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
  &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
  &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
    {
      &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
      &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
    },
  ],
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
  &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
  &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
    {
      &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
      &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
    },
  ],
  &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
}

  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;header&quot;: { # Elements common to every response.
    &quot;operationId&quot;: &quot;A String&quot;, # For mutating operation requests that completed successfully. This is the client_operation_id if the client specified it, otherwise it is generated by the server (output only).
  },
  &quot;responsePolicy&quot;: { # A Response Policy is a collection of selectors that apply to queries made against one or more Virtual Private Cloud networks.
    &quot;description&quot;: &quot;A String&quot;, # User-provided description for this Response Policy.
    &quot;gkeClusters&quot;: [ # The list of Google Kubernetes Engine clusters to which this response policy is applied.
      {
        &quot;gkeClusterName&quot;: &quot;A String&quot;, # The resource name of the cluster to bind this response policy to. This should be specified in the format like: projects/*/locations/*/clusters/*. This is referenced from GKE projects.locations.clusters.get API: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/get
        &quot;kind&quot;: &quot;dns#responsePolicyGKECluster&quot;,
      },
    ],
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;kind&quot;: &quot;dns#responsePolicy&quot;,
    &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
      {
        &quot;kind&quot;: &quot;dns#responsePolicyNetwork&quot;,
        &quot;networkUrl&quot;: &quot;A String&quot;, # The fully qualified URL of the VPC network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
      },
    ],
    &quot;responsePolicyName&quot;: &quot;A String&quot;, # User assigned name for this Response Policy.
  },
}</pre>
</div>

</body></html>