<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_v1.html">Cloud DNS API</a> . <a href="dns_v1.policies.html">policies</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(project, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a new Policy</p>
<p class="toc_element">
  <code><a href="#delete">delete(project, policy, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a previously created Policy. Will fail if the policy is still being</p>
<p class="toc_element">
  <code><a href="#get">get(project, policy, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Fetch the representation of an existing Policy.</p>
<p class="toc_element">
  <code><a href="#list">list(project, pageToken=None, maxResults=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enumerate all 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, policy, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Apply a partial update to an existing Policy.</p>
<p class="toc_element">
  <code><a href="#update">update(project, policy, body=None, clientOperationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update an existing Policy.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(project, body=None, clientOperationId=None, x__xgafv=None)</code>
  <pre>Create a new Policy

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

{ # A policy is a collection of DNS rules applied to one or more Virtual Private
      # Cloud resources.
    &quot;kind&quot;: &quot;dns#policy&quot;,
    &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
      {
        &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
        # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
    &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
        # Defaults to no logging if not set.
    &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
        # applications over VPN connections. When enabled, a virtual IP address will
        # be allocated from each of the sub-networks that are bound to this policy.
    &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
        # specified, all DNS queries are forwarded to a name server that you
        # choose. Names such as .internal are not available when an alternative
        # name server is specified.
      &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
      &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
          # specified, all DNS queries are forwarded to a name server that you
          # choose. Names such as .internal are not available when an alternative
          # name server is specified.
        {
          &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
              # Cloud DNS will make forwarding decision based on address ranges,
              # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
              # Internet. When set to PRIVATE, Cloud DNS will always send queries
              # through VPC for this target
          &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
          &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
        },
      ],
    },
  }

  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 policy is a collection of DNS rules applied to one or more Virtual Private
        # Cloud resources.
      &quot;kind&quot;: &quot;dns#policy&quot;,
      &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
      &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
        {
          &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
          # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
      &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
          # Defaults to no logging if not set.
      &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
          # applications over VPN connections. When enabled, a virtual IP address will
          # be allocated from each of the sub-networks that are bound to this policy.
      &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
          # specified, all DNS queries are forwarded to a name server that you
          # choose. Names such as .internal are not available when an alternative
          # name server is specified.
        &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
        &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
            # specified, all DNS queries are forwarded to a name server that you
            # choose. Names such as .internal are not available when an alternative
            # name server is specified.
          {
            &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
                # Cloud DNS will make forwarding decision based on address ranges,
                # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
                # Internet. When set to PRIVATE, Cloud DNS will always send queries
                # through VPC for this target
            &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
            &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
          },
        ],
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(project, policy, clientOperationId=None, x__xgafv=None)</code>
  <pre>Delete a previously created Policy. Will fail if the policy is still being
referenced by a network.

Args:
  project: string, Identifies the project addressed by this request. (required)
  policy: string, User given friendly name of the 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, policy, clientOperationId=None, x__xgafv=None)</code>
  <pre>Fetch the representation of an existing Policy.

Args:
  project: string, Identifies the project addressed by this request. (required)
  policy: string, User given friendly name of the 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 policy is a collection of DNS rules applied to one or more Virtual Private
        # Cloud resources.
      &quot;kind&quot;: &quot;dns#policy&quot;,
      &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
      &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
        {
          &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
          # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
      &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
          # Defaults to no logging if not set.
      &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
          # applications over VPN connections. When enabled, a virtual IP address will
          # be allocated from each of the sub-networks that are bound to this policy.
      &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
          # specified, all DNS queries are forwarded to a name server that you
          # choose. Names such as .internal are not available when an alternative
          # name server is specified.
        &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
        &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
            # specified, all DNS queries are forwarded to a name server that you
            # choose. Names such as .internal are not available when an alternative
            # name server is specified.
          {
            &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
                # Cloud DNS will make forwarding decision based on address ranges,
                # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
                # Internet. When set to PRIVATE, Cloud DNS will always send queries
                # through VPC for this target
            &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
            &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
          },
        ],
      },
    }</pre>
</div>

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

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

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;dns#policiesListResponse&quot;, # Type of resource.
    &quot;policies&quot;: [ # The policy resources.
      { # A policy is a collection of DNS rules applied to one or more Virtual Private
            # Cloud resources.
          &quot;kind&quot;: &quot;dns#policy&quot;,
          &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
          &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
          &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
            {
              &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
              # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
          &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
              # Defaults to no logging if not set.
          &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
              # applications over VPN connections. When enabled, a virtual IP address will
              # be allocated from each of the sub-networks that are bound to this policy.
          &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
              # specified, all DNS queries are forwarded to a name server that you
              # choose. Names such as .internal are not available when an alternative
              # name server is specified.
            &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
            &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
                # specified, all DNS queries are forwarded to a name server that you
                # choose. Names such as .internal are not available when an alternative
                # name server is specified.
              {
                &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
                    # Cloud DNS will make forwarding decision based on address ranges,
                    # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
                    # Internet. When set to PRIVATE, Cloud DNS will always send queries
                    # through VPC for this target
                &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
                &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
              },
            ],
          },
        },
    ],
    &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.
        #
        # In this way you can retrieve 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 will be an inconsistent view of the collection. There is
        # no way to retrieve a consistent snapshot of a collection larger than the
        # maximum page size.
    &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).
    },
  }</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, policy, body=None, clientOperationId=None, x__xgafv=None)</code>
  <pre>Apply a partial update to an existing Policy.

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

{ # A policy is a collection of DNS rules applied to one or more Virtual Private
      # Cloud resources.
    &quot;kind&quot;: &quot;dns#policy&quot;,
    &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
      {
        &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
        # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
    &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
        # Defaults to no logging if not set.
    &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
        # applications over VPN connections. When enabled, a virtual IP address will
        # be allocated from each of the sub-networks that are bound to this policy.
    &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
        # specified, all DNS queries are forwarded to a name server that you
        # choose. Names such as .internal are not available when an alternative
        # name server is specified.
      &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
      &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
          # specified, all DNS queries are forwarded to a name server that you
          # choose. Names such as .internal are not available when an alternative
          # name server is specified.
        {
          &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
              # Cloud DNS will make forwarding decision based on address ranges,
              # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
              # Internet. When set to PRIVATE, Cloud DNS will always send queries
              # through VPC for this target
          &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
          &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
        },
      ],
    },
  }

  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;policy&quot;: { # A policy is a collection of DNS rules applied to one or more Virtual Private
          # Cloud resources.
        &quot;kind&quot;: &quot;dns#policy&quot;,
        &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
        &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
        &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
          {
            &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
            # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
        &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
            # Defaults to no logging if not set.
        &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
            # applications over VPN connections. When enabled, a virtual IP address will
            # be allocated from each of the sub-networks that are bound to this policy.
        &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
            # specified, all DNS queries are forwarded to a name server that you
            # choose. Names such as .internal are not available when an alternative
            # name server is specified.
          &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
          &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
              # specified, all DNS queries are forwarded to a name server that you
              # choose. Names such as .internal are not available when an alternative
              # name server is specified.
            {
              &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
                  # Cloud DNS will make forwarding decision based on address ranges,
                  # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
                  # Internet. When set to PRIVATE, Cloud DNS will always send queries
                  # through VPC for this target
              &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
              &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
            },
          ],
        },
      },
  }</pre>
</div>

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

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

{ # A policy is a collection of DNS rules applied to one or more Virtual Private
      # Cloud resources.
    &quot;kind&quot;: &quot;dns#policy&quot;,
    &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
      {
        &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
        # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
    &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
        # Defaults to no logging if not set.
    &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
        # applications over VPN connections. When enabled, a virtual IP address will
        # be allocated from each of the sub-networks that are bound to this policy.
    &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
        # specified, all DNS queries are forwarded to a name server that you
        # choose. Names such as .internal are not available when an alternative
        # name server is specified.
      &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
      &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
          # specified, all DNS queries are forwarded to a name server that you
          # choose. Names such as .internal are not available when an alternative
          # name server is specified.
        {
          &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
              # Cloud DNS will make forwarding decision based on address ranges,
              # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
              # Internet. When set to PRIVATE, Cloud DNS will always send queries
              # through VPC for this target
          &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
          &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
        },
      ],
    },
  }

  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;policy&quot;: { # A policy is a collection of DNS rules applied to one or more Virtual Private
          # Cloud resources.
        &quot;kind&quot;: &quot;dns#policy&quot;,
        &quot;name&quot;: &quot;A String&quot;, # User assigned name for this policy.
        &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
        &quot;networks&quot;: [ # List of network names specifying networks to which this policy is applied.
          {
            &quot;kind&quot;: &quot;dns#policyNetwork&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;description&quot;: &quot;A String&quot;, # A mutable string of at most 1024 characters associated with this resource
            # for the user&#x27;s convenience. Has no effect on the policy&#x27;s function.
        &quot;enableLogging&quot;: True or False, # Controls whether logging is enabled for the networks bound to this policy.
            # Defaults to no logging if not set.
        &quot;enableInboundForwarding&quot;: True or False, # Allows networks bound to this policy to receive DNS queries sent by VMs or
            # applications over VPN connections. When enabled, a virtual IP address will
            # be allocated from each of the sub-networks that are bound to this policy.
        &quot;alternativeNameServerConfig&quot;: { # Sets an alternative name server for the associated networks. When
            # specified, all DNS queries are forwarded to a name server that you
            # choose. Names such as .internal are not available when an alternative
            # name server is specified.
          &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfig&quot;,
          &quot;targetNameServers&quot;: [ # Sets an alternative name server for the associated networks. When
              # specified, all DNS queries are forwarded to a name server that you
              # choose. Names such as .internal are not available when an alternative
              # name server is specified.
            {
              &quot;forwardingPath&quot;: &quot;A String&quot;, # Forwarding path for this TargetNameServer, if unset or set to DEFAULT,
                  # Cloud DNS will make forwarding decision based on address ranges,
                  # i.e. RFC1918 addresses go to the VPC, Non-RFC1918 addresses go to the
                  # Internet. When set to PRIVATE, Cloud DNS will always send queries
                  # through VPC for this target
              &quot;kind&quot;: &quot;dns#policyAlternativeNameServerConfigTargetNameServer&quot;,
              &quot;ipv4Address&quot;: &quot;A String&quot;, # IPv4 address to forward to.
            },
          ],
        },
      },
  }</pre>
</div>

</body></html>