<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="compute_alpha.html">Compute Engine API</a> . <a href="compute_alpha.interconnectAttachments.html">interconnectAttachments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#aggregatedList">aggregatedList(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Retrieves an aggregated list of interconnect attachments.</p>
<p class="toc_element">
  <code><a href="#aggregatedList_next">aggregatedList_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="#delete">delete(project, region, interconnectAttachment, requestId=None)</a></code></p>
<p class="firstline">Deletes the specified interconnect attachment.</p>
<p class="toc_element">
  <code><a href="#get">get(project, region, interconnectAttachment)</a></code></p>
<p class="firstline">Returns the specified interconnect attachment.</p>
<p class="toc_element">
  <code><a href="#getIamPolicy">getIamPolicy(project, region, resource)</a></code></p>
<p class="firstline">Gets the access control policy for a resource. May be empty if no such policy or resource exists.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, region, body, requestId=None, validateOnly=None)</a></code></p>
<p class="firstline">Creates an InterconnectAttachment in the specified project using the data included in the request.</p>
<p class="toc_element">
  <code><a href="#list">list(project, region, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Retrieves the list of interconnect attachments contained within the specified region.</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, region, interconnectAttachment, body, requestId=None)</a></code></p>
<p class="firstline">Updates the specified interconnect attachment with the data included in the request. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.</p>
<p class="toc_element">
  <code><a href="#setIamPolicy">setIamPolicy(project, region, resource, body)</a></code></p>
<p class="firstline">Sets the access control policy on the specified resource. Replaces any existing policy.</p>
<p class="toc_element">
  <code><a href="#setLabels">setLabels(project, region, resource, body, requestId=None)</a></code></p>
<p class="firstline">Sets the labels on an InterconnectAttachment. To learn more about labels, read the Labeling Resources documentation.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, region, resource, body)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="aggregatedList">aggregatedList(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</code>
  <pre>Retrieves an aggregated list of interconnect attachments.

Args:
  project: string, Project ID for this request. (required)
  orderBy: string, Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.

You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.

Currently, only sorting by name or creationTimestamp desc is supported.
  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)
  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, >, or <.

For example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.

You can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true).

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
    "kind": "compute#interconnectAttachmentAggregatedList", # [Output Only] Type of resource. Always compute#interconnectAttachmentAggregatedList for aggregated lists of interconnect attachments.
    "items": { # A list of InterconnectAttachmentsScopedList resources.
      "a_key": { # Name of the scope containing this set of interconnect attachments.
        "interconnectAttachments": [ # A list of interconnect attachments contained in this scope.
          { # Represents an Interconnect Attachment (VLAN) resource.
                #
                # You can use Interconnect attachments (VLANS) to connect your Virtual Private Cloud networks to your on-premises networks through an Interconnect. For more information, read  Creating VLAN Attachments. (== resource_for beta.interconnectAttachments ==) (== resource_for v1.interconnectAttachments ==)
              "customerRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.
              "labels": { # Labels to apply to this InterconnectAttachment resource. These can be later modified by the setLabels method. Each label key/value must comply with RFC1035. Label values may be empty.
                "a_key": "A String",
              },
              "bandwidth": "A String", # Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values:
                  # - BPS_50M: 50 Mbit/s
                  # - BPS_100M: 100 Mbit/s
                  # - BPS_200M: 200 Mbit/s
                  # - BPS_300M: 300 Mbit/s
                  # - BPS_400M: 400 Mbit/s
                  # - BPS_500M: 500 Mbit/s
                  # - BPS_1G: 1 Gbit/s
                  # - BPS_2G: 2 Gbit/s
                  # - BPS_5G: 5 Gbit/s
                  # - BPS_10G: 10 Gbit/s
              "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
              "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
              "vlanTag8021q": 42, # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. Only specified at creation time.
              "interconnect": "A String", # URL of the underlying Interconnect object that this attachment's traffic will traverse through.
              "privateInterconnectInfo": { # Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED. # [Output Only] Information specific to an InterconnectAttachment. This property is populated if the interconnect that this is attached to is of type DEDICATED.
                "tag8021q": 42, # [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.
              },
              "pairingKey": "A String", # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of an PARTNER attachment used to initiate provisioning with a selected partner. Of the form "XXXXX/region/domain"
              "state": "A String", # [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values:
                  # - ACTIVE: The attachment has been turned up and is ready to use.
                  # - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
                  # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side.
                  # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it.
                  # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it.
                  # - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.
              "partnerMetadata": { # Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments. # Informational metadata about Partner attachments from Partners to display to customers. Output only for for PARTNER type, mutable for PARTNER_PROVIDER, not available for DEDICATED.
                "partnerName": "A String", # Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.
                "interconnectName": "A String", # Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner?s portal. For instance "Chicago 1". This value may be validated to match approved Partner values.
                "portalUrl": "A String", # URL of the Partner?s portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.
              },
              "type": "A String", # The type of interconnect attachment this is, which can take one of the following values:
                  # - DEDICATED: an attachment to a Dedicated Interconnect.
                  # - PARTNER: an attachment to a Partner Interconnect, created by the customer.
                  # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.
              "partnerAsn": "A String", # Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.
              "description": "A String", # An optional description of this resource.
              "adminEnabled": True or False, # Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.
              "labelFingerprint": "A String", # A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet.
                  #
                  # To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.
              "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
              "operationalStatus": "A String", # [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values:
                  # - OS_ACTIVE: The attachment has been turned up and is ready to use.
                  # - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
              "cloudRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.
              "kind": "compute#interconnectAttachment", # [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.
              "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
              "googleReferenceId": "A String", # [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.
              "candidateSubnets": [ # Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google?s edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.
                "A String",
              ],
              "edgeAvailabilityDomain": "A String", # Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values:
                  # - AVAILABILITY_DOMAIN_ANY
                  # - AVAILABILITY_DOMAIN_1
                  # - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
              "router": "A String", # URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.
              "region": "A String", # [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
              "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
            },
        ],
        "warning": { # Informational warning which replaces the list of addresses when the list is empty.
          "message": "A String", # [Output Only] A human-readable description of the warning code.
          "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
          "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
              # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
            {
              "value": "A String", # [Output Only] A warning data value corresponding to the key.
              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
            },
          ],
        },
      },
    },
    "warning": { # [Output Only] Informational warning message.
      "message": "A String", # [Output Only] A human-readable description of the warning code.
      "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
          # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
        {
          "value": "A String", # [Output Only] A warning data value corresponding to the key.
          "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
        },
      ],
    },
    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="aggregatedList_next">aggregatedList_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 'execute()' 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="delete">delete(project, region, interconnectAttachment, requestId=None)</code>
  <pre>Deletes the specified interconnect attachment.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  interconnectAttachment: string, Name of the interconnect attachment to delete. (required)
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the globalOperations resource.
      # - For regional operations, use the regionOperations resource.
      # - For zonal operations, use the zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, region, interconnectAttachment)</code>
  <pre>Returns the specified interconnect attachment.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  interconnectAttachment: string, Name of the interconnect attachment to return. (required)

Returns:
  An object of the form:

    { # Represents an Interconnect Attachment (VLAN) resource.
        #
        # You can use Interconnect attachments (VLANS) to connect your Virtual Private Cloud networks to your on-premises networks through an Interconnect. For more information, read  Creating VLAN Attachments. (== resource_for beta.interconnectAttachments ==) (== resource_for v1.interconnectAttachments ==)
      "customerRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.
      "labels": { # Labels to apply to this InterconnectAttachment resource. These can be later modified by the setLabels method. Each label key/value must comply with RFC1035. Label values may be empty.
        "a_key": "A String",
      },
      "bandwidth": "A String", # Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values:
          # - BPS_50M: 50 Mbit/s
          # - BPS_100M: 100 Mbit/s
          # - BPS_200M: 200 Mbit/s
          # - BPS_300M: 300 Mbit/s
          # - BPS_400M: 400 Mbit/s
          # - BPS_500M: 500 Mbit/s
          # - BPS_1G: 1 Gbit/s
          # - BPS_2G: 2 Gbit/s
          # - BPS_5G: 5 Gbit/s
          # - BPS_10G: 10 Gbit/s
      "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
      "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
      "vlanTag8021q": 42, # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. Only specified at creation time.
      "interconnect": "A String", # URL of the underlying Interconnect object that this attachment's traffic will traverse through.
      "privateInterconnectInfo": { # Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED. # [Output Only] Information specific to an InterconnectAttachment. This property is populated if the interconnect that this is attached to is of type DEDICATED.
        "tag8021q": 42, # [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.
      },
      "pairingKey": "A String", # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of an PARTNER attachment used to initiate provisioning with a selected partner. Of the form "XXXXX/region/domain"
      "state": "A String", # [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values:
          # - ACTIVE: The attachment has been turned up and is ready to use.
          # - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
          # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side.
          # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it.
          # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it.
          # - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.
      "partnerMetadata": { # Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments. # Informational metadata about Partner attachments from Partners to display to customers. Output only for for PARTNER type, mutable for PARTNER_PROVIDER, not available for DEDICATED.
        "partnerName": "A String", # Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.
        "interconnectName": "A String", # Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner?s portal. For instance "Chicago 1". This value may be validated to match approved Partner values.
        "portalUrl": "A String", # URL of the Partner?s portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.
      },
      "type": "A String", # The type of interconnect attachment this is, which can take one of the following values:
          # - DEDICATED: an attachment to a Dedicated Interconnect.
          # - PARTNER: an attachment to a Partner Interconnect, created by the customer.
          # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.
      "partnerAsn": "A String", # Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.
      "description": "A String", # An optional description of this resource.
      "adminEnabled": True or False, # Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.
      "labelFingerprint": "A String", # A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet.
          #
          # To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.
      "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
      "operationalStatus": "A String", # [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values:
          # - OS_ACTIVE: The attachment has been turned up and is ready to use.
          # - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
      "cloudRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.
      "kind": "compute#interconnectAttachment", # [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.
      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
      "googleReferenceId": "A String", # [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.
      "candidateSubnets": [ # Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google?s edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.
        "A String",
      ],
      "edgeAvailabilityDomain": "A String", # Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values:
          # - AVAILABILITY_DOMAIN_ANY
          # - AVAILABILITY_DOMAIN_1
          # - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
      "router": "A String", # URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.
      "region": "A String", # [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
      "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getIamPolicy">getIamPolicy(project, region, resource)</code>
  <pre>Gets the access control policy for a resource. May be empty if no such policy or resource exists.

Args:
  project: string, Project ID for this request. (required)
  region: string, The name of the region for this request. (required)
  resource: string, Name or id of the resource for this request. (required)

Returns:
  An object of the form:

    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources.
      #
      #
      #
      # A `Policy` consists of a list of `bindings`. A `binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM.
      #
      # **JSON Example**
      #
      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
      #
      # **YAML Example**
      #
      # bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-other-app@appspot.gserviceaccount.com role: roles/owner - members: - user:sean@example.com role: roles/viewer
      #
      #
      #
      # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam/docs).
    "auditConfigs": [ # Specifies cloud audit logging configuration for this policy.
      { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs.
          #
          # If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted.
          #
          # Example Policy with multiple AuditConfigs:
          #
          # { "audit_configs": [ { "service": "allServices" "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", }, { "log_type": "ADMIN_READ", } ] }, { "service": "fooservice.googleapis.com" "audit_log_configs": [ { "log_type": "DATA_READ", }, { "log_type": "DATA_WRITE", "exempted_members": [ "user:bar@gmail.com" ] } ] } ] }
          #
          # For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts foo@gmail.com from DATA_READ logging, and bar@gmail.com from DATA_WRITE logging.
        "exemptedMembers": [
          "A String",
        ],
        "auditLogConfigs": [ # The configuration for logging of each type of permission.
          { # Provides the configuration for logging a type of permissions. Example:
              #
              # { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", } ] }
              #
              # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting foo@gmail.com from DATA_READ logging.
            "exemptedMembers": [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of [Binding.members][].
              "A String",
            ],
            "logType": "A String", # The log type that this config enables.
          },
        ],
        "service": "A String", # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
      },
    ],
    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
      { # A rule to be applied in a Policy.
        "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
          { # Specifies what kind of log the caller must write
            "counter": { # Increment a streamz counter with the specified metric and field names. # Counter options.
                #
                # Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended.
                #
                # Field names correspond to IAM request parameters and field values are their respective values.
                #
                # Supported field names: - "authority", which is "[token]" if IAMContext.token is present, otherwise the value of IAMContext.authority_selector if present, and otherwise a representation of IAMContext.principal; or - "iam_principal", a representation of IAMContext.principal even if a token or authority selector is present; or - "" (empty string), resulting in a counter with no fields.
                #
                # Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]}
                #
                # At this time we do not support multiple field names (though this may be supported in the future).
              "field": "A String", # The field value to attribute.
              "metric": "A String", # The metric to update.
            },
            "dataAccess": { # Write a Data Access (Gin) log # Data access options.
              "logMode": "A String", # Whether Gin logging should happen in a fail-closed manner at the caller. This is relevant only in the LocalIAM implementation, for now.
            },
            "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
              "logName": "A String", # The log_name to populate in the Cloud Audit Record.
              "authorizationLoggingOptions": { # Authorization-related information used by Cloud Audit Logging. # Information used by the Cloud Audit Logging pipeline.
                "permissionType": "A String", # The type of the permission that was checked.
              },
            },
          },
        ],
        "notIns": [ # If one or more 'not_in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
          "A String",
        ],
        "ins": [ # If one or more 'in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
          "A String",
        ],
        "action": "A String", # Required
        "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
          "A String",
        ],
        "conditions": [ # Additional restrictions that must be met. All conditions must pass for the rule to match.
          { # A condition to be met.
            "iam": "A String", # Trusted attributes supplied by the IAM system.
            "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
            "values": [ # The objects of the condition.
              "A String",
            ],
            "svc": "A String", # Trusted attributes discharged by the service.
            "op": "A String", # An operator to apply the subject with.
          },
        ],
        "description": "A String", # Human-readable description of the rule.
      },
    ],
    "version": 42, # Deprecated.
    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        #
        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
    "bindings": [ # Associates a list of `members` to a `role`. `bindings` with no members will result in an error.
      { # Associates `members` with a `role`.
        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
            #
            # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
            #
            # * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account.
            #
            # * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` .
            #
            #
            #
            # * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`.
            #
            # * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
            #
            #
            #
            # * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
          "A String",
        ],
        "condition": { # Represents an expression text. Example: # The condition that is associated with this binding. NOTE: An unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently.
            #
            # title: "User account presence" description: "Determines whether the request has a user account" expression: "size(request.user) > 0"
          "title": "A String", # An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
          "expression": "A String", # Textual representation of an expression in Common Expression Language syntax.
              #
              # The application context of the containing message determines which well-known feature set of CEL is supported.
          "description": "A String", # An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
          "location": "A String", # An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
        },
      },
    ],
    "iamOwned": True or False,
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, region, body, requestId=None, validateOnly=None)</code>
  <pre>Creates an InterconnectAttachment in the specified project using the data included in the request.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an Interconnect Attachment (VLAN) resource.
      # 
      # You can use Interconnect attachments (VLANS) to connect your Virtual Private Cloud networks to your on-premises networks through an Interconnect. For more information, read  Creating VLAN Attachments. (== resource_for beta.interconnectAttachments ==) (== resource_for v1.interconnectAttachments ==)
    "customerRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.
    "labels": { # Labels to apply to this InterconnectAttachment resource. These can be later modified by the setLabels method. Each label key/value must comply with RFC1035. Label values may be empty.
      "a_key": "A String",
    },
    "bandwidth": "A String", # Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values:
        # - BPS_50M: 50 Mbit/s
        # - BPS_100M: 100 Mbit/s
        # - BPS_200M: 200 Mbit/s
        # - BPS_300M: 300 Mbit/s
        # - BPS_400M: 400 Mbit/s
        # - BPS_500M: 500 Mbit/s
        # - BPS_1G: 1 Gbit/s
        # - BPS_2G: 2 Gbit/s
        # - BPS_5G: 5 Gbit/s
        # - BPS_10G: 10 Gbit/s
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "vlanTag8021q": 42, # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. Only specified at creation time.
    "interconnect": "A String", # URL of the underlying Interconnect object that this attachment's traffic will traverse through.
    "privateInterconnectInfo": { # Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED. # [Output Only] Information specific to an InterconnectAttachment. This property is populated if the interconnect that this is attached to is of type DEDICATED.
      "tag8021q": 42, # [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.
    },
    "pairingKey": "A String", # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of an PARTNER attachment used to initiate provisioning with a selected partner. Of the form "XXXXX/region/domain"
    "state": "A String", # [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values:
        # - ACTIVE: The attachment has been turned up and is ready to use.
        # - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
        # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side.
        # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it.
        # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it.
        # - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.
    "partnerMetadata": { # Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments. # Informational metadata about Partner attachments from Partners to display to customers. Output only for for PARTNER type, mutable for PARTNER_PROVIDER, not available for DEDICATED.
      "partnerName": "A String", # Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.
      "interconnectName": "A String", # Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner?s portal. For instance "Chicago 1". This value may be validated to match approved Partner values.
      "portalUrl": "A String", # URL of the Partner?s portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.
    },
    "type": "A String", # The type of interconnect attachment this is, which can take one of the following values:
        # - DEDICATED: an attachment to a Dedicated Interconnect.
        # - PARTNER: an attachment to a Partner Interconnect, created by the customer.
        # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.
    "partnerAsn": "A String", # Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.
    "description": "A String", # An optional description of this resource.
    "adminEnabled": True or False, # Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.
    "labelFingerprint": "A String", # A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet.
        # 
        # To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "operationalStatus": "A String", # [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values:
        # - OS_ACTIVE: The attachment has been turned up and is ready to use.
        # - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
    "cloudRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.
    "kind": "compute#interconnectAttachment", # [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.
    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
    "googleReferenceId": "A String", # [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.
    "candidateSubnets": [ # Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google?s edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.
      "A String",
    ],
    "edgeAvailabilityDomain": "A String", # Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values:
        # - AVAILABILITY_DOMAIN_ANY
        # - AVAILABILITY_DOMAIN_1
        # - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
    "router": "A String", # URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.
    "region": "A String", # [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  validateOnly: boolean, If true, the request will not be committed.

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the globalOperations resource.
      # - For regional operations, use the regionOperations resource.
      # - For zonal operations, use the zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, region, orderBy=None, maxResults=None, pageToken=None, filter=None)</code>
  <pre>Retrieves the list of interconnect attachments contained within the specified region.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  orderBy: string, Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.

You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.

Currently, only sorting by name or creationTimestamp desc is supported.
  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)
  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, >, or <.

For example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.

You can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true).

Returns:
  An object of the form:

    { # Response to the list request, and contains a list of interconnect attachments.
    "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
    "kind": "compute#interconnectAttachmentList", # [Output Only] Type of resource. Always compute#interconnectAttachmentList for lists of interconnect attachments.
    "items": [ # A list of InterconnectAttachment resources.
      { # Represents an Interconnect Attachment (VLAN) resource.
            #
            # You can use Interconnect attachments (VLANS) to connect your Virtual Private Cloud networks to your on-premises networks through an Interconnect. For more information, read  Creating VLAN Attachments. (== resource_for beta.interconnectAttachments ==) (== resource_for v1.interconnectAttachments ==)
          "customerRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.
          "labels": { # Labels to apply to this InterconnectAttachment resource. These can be later modified by the setLabels method. Each label key/value must comply with RFC1035. Label values may be empty.
            "a_key": "A String",
          },
          "bandwidth": "A String", # Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values:
              # - BPS_50M: 50 Mbit/s
              # - BPS_100M: 100 Mbit/s
              # - BPS_200M: 200 Mbit/s
              # - BPS_300M: 300 Mbit/s
              # - BPS_400M: 400 Mbit/s
              # - BPS_500M: 500 Mbit/s
              # - BPS_1G: 1 Gbit/s
              # - BPS_2G: 2 Gbit/s
              # - BPS_5G: 5 Gbit/s
              # - BPS_10G: 10 Gbit/s
          "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
          "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
          "vlanTag8021q": 42, # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. Only specified at creation time.
          "interconnect": "A String", # URL of the underlying Interconnect object that this attachment's traffic will traverse through.
          "privateInterconnectInfo": { # Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED. # [Output Only] Information specific to an InterconnectAttachment. This property is populated if the interconnect that this is attached to is of type DEDICATED.
            "tag8021q": 42, # [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.
          },
          "pairingKey": "A String", # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of an PARTNER attachment used to initiate provisioning with a selected partner. Of the form "XXXXX/region/domain"
          "state": "A String", # [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values:
              # - ACTIVE: The attachment has been turned up and is ready to use.
              # - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
              # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side.
              # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it.
              # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it.
              # - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.
          "partnerMetadata": { # Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments. # Informational metadata about Partner attachments from Partners to display to customers. Output only for for PARTNER type, mutable for PARTNER_PROVIDER, not available for DEDICATED.
            "partnerName": "A String", # Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.
            "interconnectName": "A String", # Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner?s portal. For instance "Chicago 1". This value may be validated to match approved Partner values.
            "portalUrl": "A String", # URL of the Partner?s portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.
          },
          "type": "A String", # The type of interconnect attachment this is, which can take one of the following values:
              # - DEDICATED: an attachment to a Dedicated Interconnect.
              # - PARTNER: an attachment to a Partner Interconnect, created by the customer.
              # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.
          "partnerAsn": "A String", # Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.
          "description": "A String", # An optional description of this resource.
          "adminEnabled": True or False, # Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.
          "labelFingerprint": "A String", # A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet.
              #
              # To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.
          "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
          "operationalStatus": "A String", # [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values:
              # - OS_ACTIVE: The attachment has been turned up and is ready to use.
              # - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
          "cloudRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.
          "kind": "compute#interconnectAttachment", # [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.
          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
          "googleReferenceId": "A String", # [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.
          "candidateSubnets": [ # Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google?s edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.
            "A String",
          ],
          "edgeAvailabilityDomain": "A String", # Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values:
              # - AVAILABILITY_DOMAIN_ANY
              # - AVAILABILITY_DOMAIN_1
              # - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
          "router": "A String", # URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.
          "region": "A String", # [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
          "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
        },
    ],
    "warning": { # [Output Only] Informational warning message.
      "message": "A String", # [Output Only] A human-readable description of the warning code.
      "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
          # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
        {
          "value": "A String", # [Output Only] A warning data value corresponding to the key.
          "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
        },
      ],
    },
    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
  }</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 'execute()' 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, region, interconnectAttachment, body, requestId=None)</code>
  <pre>Updates the specified interconnect attachment with the data included in the request. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region scoping this request. (required)
  interconnectAttachment: string, Name of the interconnect attachment to patch. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an Interconnect Attachment (VLAN) resource.
      # 
      # You can use Interconnect attachments (VLANS) to connect your Virtual Private Cloud networks to your on-premises networks through an Interconnect. For more information, read  Creating VLAN Attachments. (== resource_for beta.interconnectAttachments ==) (== resource_for v1.interconnectAttachments ==)
    "customerRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on the customer router subinterface for this interconnect attachment.
    "labels": { # Labels to apply to this InterconnectAttachment resource. These can be later modified by the setLabels method. Each label key/value must comply with RFC1035. Label values may be empty.
      "a_key": "A String",
    },
    "bandwidth": "A String", # Provisioned bandwidth capacity for the interconnect attachment. For attachments of type DEDICATED, the user can set the bandwidth. For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, and can take one of the following values:
        # - BPS_50M: 50 Mbit/s
        # - BPS_100M: 100 Mbit/s
        # - BPS_200M: 200 Mbit/s
        # - BPS_300M: 300 Mbit/s
        # - BPS_400M: 400 Mbit/s
        # - BPS_500M: 500 Mbit/s
        # - BPS_1G: 1 Gbit/s
        # - BPS_2G: 2 Gbit/s
        # - BPS_5G: 5 Gbit/s
        # - BPS_10G: 10 Gbit/s
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "vlanTag8021q": 42, # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. Only specified at creation time.
    "interconnect": "A String", # URL of the underlying Interconnect object that this attachment's traffic will traverse through.
    "privateInterconnectInfo": { # Information for an interconnect attachment when this belongs to an interconnect of type DEDICATED. # [Output Only] Information specific to an InterconnectAttachment. This property is populated if the interconnect that this is attached to is of type DEDICATED.
      "tag8021q": 42, # [Output Only] 802.1q encapsulation tag to be used for traffic between Google and the customer, going to and from this network and region.
    },
    "pairingKey": "A String", # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not present for DEDICATED]. The opaque identifier of an PARTNER attachment used to initiate provisioning with a selected partner. Of the form "XXXXX/region/domain"
    "state": "A String", # [Output Only] The current state of this attachment's functionality. Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE, PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used for only PARTNER and PARTNER_PROVIDER interconnect attachments. This state can take one of the following values:
        # - ACTIVE: The attachment has been turned up and is ready to use.
        # - UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
        # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet been configured on the Partner side.
        # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of provisioning after a PARTNER_PROVIDER attachment was created that references it.
        # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER attachment that is waiting for a customer to activate it.
        # - DEFUNCT: The attachment was deleted externally and is no longer functional. This could be because the associated Interconnect was removed, or because the other side of a Partner attachment was deleted.
    "partnerMetadata": { # Informational metadata about Partner attachments from Partners to display to customers. These fields are propagated from PARTNER_PROVIDER attachments to their corresponding PARTNER attachments. # Informational metadata about Partner attachments from Partners to display to customers. Output only for for PARTNER type, mutable for PARTNER_PROVIDER, not available for DEDICATED.
      "partnerName": "A String", # Plain text name of the Partner providing this attachment. This value may be validated to match approved Partner values.
      "interconnectName": "A String", # Plain text name of the Interconnect this attachment is connected to, as displayed in the Partner?s portal. For instance "Chicago 1". This value may be validated to match approved Partner values.
      "portalUrl": "A String", # URL of the Partner?s portal for this Attachment. Partners may customise this to be a deep link to the specific resource on the Partner portal. This value may be validated to match approved Partner values.
    },
    "type": "A String", # The type of interconnect attachment this is, which can take one of the following values:
        # - DEDICATED: an attachment to a Dedicated Interconnect.
        # - PARTNER: an attachment to a Partner Interconnect, created by the customer.
        # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by the partner.
    "partnerAsn": "A String", # Optional BGP ASN for the router supplied by a Layer 3 Partner if they configured BGP on behalf of the customer. Output only for PARTNER type, input only for PARTNER_PROVIDER, not available for DEDICATED.
    "description": "A String", # An optional description of this resource.
    "adminEnabled": True or False, # Determines whether this Attachment will carry packets. Not present for PARTNER_PROVIDER.
    "labelFingerprint": "A String", # A fingerprint for the labels being applied to this InterconnectAttachment, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet.
        # 
        # To see the latest fingerprint, make a get() request to retrieve an InterconnectAttachment.
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "operationalStatus": "A String", # [Output Only] The current status of whether or not this interconnect attachment is functional, which can take one of the following values:
        # - OS_ACTIVE: The attachment has been turned up and is ready to use.
        # - OS_UNPROVISIONED: The attachment is not ready to use yet, because turnup is not complete.
    "cloudRouterIpAddress": "A String", # [Output Only] IPv4 address + prefix length to be configured on Cloud Router Interface for this interconnect attachment.
    "kind": "compute#interconnectAttachment", # [Output Only] Type of the resource. Always compute#interconnectAttachment for interconnect attachments.
    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
    "googleReferenceId": "A String", # [Output Only] Google reference ID, to be used when raising support tickets with Google or otherwise to debug backend connectivity issues. [Deprecated] This field is not used.
    "candidateSubnets": [ # Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) and must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29 from the supplied candidate prefix(es). The request will fail if all possible /29s are in use on Google?s edge. If not supplied, Google will randomly select an unused /29 from all of link-local space.
      "A String",
    ],
    "edgeAvailabilityDomain": "A String", # Desired availability domain for the attachment. Only available for type PARTNER, at creation time, and can take one of the following values:
        # - AVAILABILITY_DOMAIN_ANY
        # - AVAILABILITY_DOMAIN_1
        # - AVAILABILITY_DOMAIN_2 For improved reliability, customers should configure a pair of attachments, one per availability domain. The selected availability domain will be provided to the Partner via the pairing key, so that the provisioned circuit will lie in the specified domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
    "router": "A String", # URL of the Cloud Router to be used for dynamic routing. This router must be in the same region as this InterconnectAttachment. The InterconnectAttachment will automatically connect the Interconnect to the network & region within which the Cloud Router is configured.
    "region": "A String", # [Output Only] URL of the region where the regional interconnect attachment resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the globalOperations resource.
      # - For regional operations, use the regionOperations resource.
      # - For zonal operations, use the zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setIamPolicy">setIamPolicy(project, region, resource, body)</code>
  <pre>Sets the access control policy on the specified resource. Replaces any existing policy.

Args:
  project: string, Project ID for this request. (required)
  region: string, The name of the region for this request. (required)
  resource: string, Name or id of the resource for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. # REQUIRED: The complete policy to be applied to the 'resource'. The size of the policy is limited to a few 10s of KB. An empty policy is in general a valid policy but certain services (like Projects) might reject them.
        #
        #
        #
        # A `Policy` consists of a list of `bindings`. A `binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM.
        #
        # **JSON Example**
        #
        # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
        #
        # **YAML Example**
        #
        # bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-other-app@appspot.gserviceaccount.com role: roles/owner - members: - user:sean@example.com role: roles/viewer
        #
        #
        #
        # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam/docs).
      "auditConfigs": [ # Specifies cloud audit logging configuration for this policy.
        { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs.
            #
            # If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted.
            #
            # Example Policy with multiple AuditConfigs:
            #
            # { "audit_configs": [ { "service": "allServices" "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", }, { "log_type": "ADMIN_READ", } ] }, { "service": "fooservice.googleapis.com" "audit_log_configs": [ { "log_type": "DATA_READ", }, { "log_type": "DATA_WRITE", "exempted_members": [ "user:bar@gmail.com" ] } ] } ] }
            #
            # For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts foo@gmail.com from DATA_READ logging, and bar@gmail.com from DATA_WRITE logging.
          "exemptedMembers": [
            "A String",
          ],
          "auditLogConfigs": [ # The configuration for logging of each type of permission.
            { # Provides the configuration for logging a type of permissions. Example:
                #
                # { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", } ] }
                #
                # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting foo@gmail.com from DATA_READ logging.
              "exemptedMembers": [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of [Binding.members][].
                "A String",
              ],
              "logType": "A String", # The log type that this config enables.
            },
          ],
          "service": "A String", # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
        },
      ],
      "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
        { # A rule to be applied in a Policy.
          "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
            { # Specifies what kind of log the caller must write
              "counter": { # Increment a streamz counter with the specified metric and field names. # Counter options.
                  #
                  # Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended.
                  #
                  # Field names correspond to IAM request parameters and field values are their respective values.
                  #
                  # Supported field names: - "authority", which is "[token]" if IAMContext.token is present, otherwise the value of IAMContext.authority_selector if present, and otherwise a representation of IAMContext.principal; or - "iam_principal", a representation of IAMContext.principal even if a token or authority selector is present; or - "" (empty string), resulting in a counter with no fields.
                  #
                  # Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]}
                  #
                  # At this time we do not support multiple field names (though this may be supported in the future).
                "field": "A String", # The field value to attribute.
                "metric": "A String", # The metric to update.
              },
              "dataAccess": { # Write a Data Access (Gin) log # Data access options.
                "logMode": "A String", # Whether Gin logging should happen in a fail-closed manner at the caller. This is relevant only in the LocalIAM implementation, for now.
              },
              "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
                "logName": "A String", # The log_name to populate in the Cloud Audit Record.
                "authorizationLoggingOptions": { # Authorization-related information used by Cloud Audit Logging. # Information used by the Cloud Audit Logging pipeline.
                  "permissionType": "A String", # The type of the permission that was checked.
                },
              },
            },
          ],
          "notIns": [ # If one or more 'not_in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
            "A String",
          ],
          "ins": [ # If one or more 'in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
            "A String",
          ],
          "action": "A String", # Required
          "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
            "A String",
          ],
          "conditions": [ # Additional restrictions that must be met. All conditions must pass for the rule to match.
            { # A condition to be met.
              "iam": "A String", # Trusted attributes supplied by the IAM system.
              "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
              "values": [ # The objects of the condition.
                "A String",
              ],
              "svc": "A String", # Trusted attributes discharged by the service.
              "op": "A String", # An operator to apply the subject with.
            },
          ],
          "description": "A String", # Human-readable description of the rule.
        },
      ],
      "version": 42, # Deprecated.
      "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
          #
          # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
      "bindings": [ # Associates a list of `members` to a `role`. `bindings` with no members will result in an error.
        { # Associates `members` with a `role`.
          "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
              #
              # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
              #
              # * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account.
              #
              # * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` .
              #
              #
              #
              # * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`.
              #
              # * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
              #
              #
              #
              # * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
            "A String",
          ],
          "condition": { # Represents an expression text. Example: # The condition that is associated with this binding. NOTE: An unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently.
              #
              # title: "User account presence" description: "Determines whether the request has a user account" expression: "size(request.user) > 0"
            "title": "A String", # An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
            "expression": "A String", # Textual representation of an expression in Common Expression Language syntax.
                #
                # The application context of the containing message determines which well-known feature set of CEL is supported.
            "description": "A String", # An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
            "location": "A String", # An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
          },
        },
      ],
      "iamOwned": True or False,
    },
    "bindings": [ # Flatten Policy to create a backwacd compatible wire-format. Deprecated. Use 'policy' to specify bindings.
      { # Associates `members` with a `role`.
        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
            #
            # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
            #
            # * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account.
            #
            # * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` .
            #
            #
            #
            # * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`.
            #
            # * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
            #
            #
            #
            # * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
          "A String",
        ],
        "condition": { # Represents an expression text. Example: # The condition that is associated with this binding. NOTE: An unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently.
            #
            # title: "User account presence" description: "Determines whether the request has a user account" expression: "size(request.user) > 0"
          "title": "A String", # An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
          "expression": "A String", # Textual representation of an expression in Common Expression Language syntax.
              #
              # The application context of the containing message determines which well-known feature set of CEL is supported.
          "description": "A String", # An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
          "location": "A String", # An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
        },
      },
    ],
    "etag": "A String", # Flatten Policy to create a backward compatible wire-format. Deprecated. Use 'policy' to specify the etag.
  }


Returns:
  An object of the form:

    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources.
      #
      #
      #
      # A `Policy` consists of a list of `bindings`. A `binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM.
      #
      # **JSON Example**
      #
      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
      #
      # **YAML Example**
      #
      # bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-other-app@appspot.gserviceaccount.com role: roles/owner - members: - user:sean@example.com role: roles/viewer
      #
      #
      #
      # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam/docs).
    "auditConfigs": [ # Specifies cloud audit logging configuration for this policy.
      { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs.
          #
          # If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted.
          #
          # Example Policy with multiple AuditConfigs:
          #
          # { "audit_configs": [ { "service": "allServices" "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", }, { "log_type": "ADMIN_READ", } ] }, { "service": "fooservice.googleapis.com" "audit_log_configs": [ { "log_type": "DATA_READ", }, { "log_type": "DATA_WRITE", "exempted_members": [ "user:bar@gmail.com" ] } ] } ] }
          #
          # For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts foo@gmail.com from DATA_READ logging, and bar@gmail.com from DATA_WRITE logging.
        "exemptedMembers": [
          "A String",
        ],
        "auditLogConfigs": [ # The configuration for logging of each type of permission.
          { # Provides the configuration for logging a type of permissions. Example:
              #
              # { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:foo@gmail.com" ] }, { "log_type": "DATA_WRITE", } ] }
              #
              # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting foo@gmail.com from DATA_READ logging.
            "exemptedMembers": [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of [Binding.members][].
              "A String",
            ],
            "logType": "A String", # The log type that this config enables.
          },
        ],
        "service": "A String", # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
      },
    ],
    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
      { # A rule to be applied in a Policy.
        "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
          { # Specifies what kind of log the caller must write
            "counter": { # Increment a streamz counter with the specified metric and field names. # Counter options.
                #
                # Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended.
                #
                # Field names correspond to IAM request parameters and field values are their respective values.
                #
                # Supported field names: - "authority", which is "[token]" if IAMContext.token is present, otherwise the value of IAMContext.authority_selector if present, and otherwise a representation of IAMContext.principal; or - "iam_principal", a representation of IAMContext.principal even if a token or authority selector is present; or - "" (empty string), resulting in a counter with no fields.
                #
                # Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]}
                #
                # At this time we do not support multiple field names (though this may be supported in the future).
              "field": "A String", # The field value to attribute.
              "metric": "A String", # The metric to update.
            },
            "dataAccess": { # Write a Data Access (Gin) log # Data access options.
              "logMode": "A String", # Whether Gin logging should happen in a fail-closed manner at the caller. This is relevant only in the LocalIAM implementation, for now.
            },
            "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
              "logName": "A String", # The log_name to populate in the Cloud Audit Record.
              "authorizationLoggingOptions": { # Authorization-related information used by Cloud Audit Logging. # Information used by the Cloud Audit Logging pipeline.
                "permissionType": "A String", # The type of the permission that was checked.
              },
            },
          },
        ],
        "notIns": [ # If one or more 'not_in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
          "A String",
        ],
        "ins": [ # If one or more 'in' clauses are specified, the rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
          "A String",
        ],
        "action": "A String", # Required
        "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
          "A String",
        ],
        "conditions": [ # Additional restrictions that must be met. All conditions must pass for the rule to match.
          { # A condition to be met.
            "iam": "A String", # Trusted attributes supplied by the IAM system.
            "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
            "values": [ # The objects of the condition.
              "A String",
            ],
            "svc": "A String", # Trusted attributes discharged by the service.
            "op": "A String", # An operator to apply the subject with.
          },
        ],
        "description": "A String", # Human-readable description of the rule.
      },
    ],
    "version": 42, # Deprecated.
    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        #
        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
    "bindings": [ # Associates a list of `members` to a `role`. `bindings` with no members will result in an error.
      { # Associates `members` with a `role`.
        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
            #
            # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
            #
            # * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account.
            #
            # * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` .
            #
            #
            #
            # * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`.
            #
            # * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
            #
            #
            #
            # * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
          "A String",
        ],
        "condition": { # Represents an expression text. Example: # The condition that is associated with this binding. NOTE: An unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently.
            #
            # title: "User account presence" description: "Determines whether the request has a user account" expression: "size(request.user) > 0"
          "title": "A String", # An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
          "expression": "A String", # Textual representation of an expression in Common Expression Language syntax.
              #
              # The application context of the containing message determines which well-known feature set of CEL is supported.
          "description": "A String", # An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
          "location": "A String", # An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
        },
      },
    ],
    "iamOwned": True or False,
  }</pre>
</div>

<div class="method">
    <code class="details" id="setLabels">setLabels(project, region, resource, body, requestId=None)</code>
  <pre>Sets the labels on an InterconnectAttachment. To learn more about labels, read the Labeling Resources documentation.

Args:
  project: string, Project ID for this request. (required)
  region: string, The region for this request. (required)
  resource: string, Name or id of the resource for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "labelFingerprint": "A String", # The fingerprint of the previous set of labels for this resource, used to detect conflicts. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels. Make a get() request to the resource to get the latest fingerprint.
    "labels": { # The labels to set for this resource.
      "a_key": "A String",
    },
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # You can use an operation resource to manage asynchronous API requests. For more information, read Handling API responses.
      #
      # Operations can be global, regional or zonal.
      # - For global operations, use the globalOperations resource.
      # - For regional operations, use the regionOperations resource.
      # - For zonal operations, use the zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(project, region, resource, body)</code>
  <pre>Returns permissions that a caller has on the specified resource.

Args:
  project: string, Project ID for this request. (required)
  region: string, The name of the region for this request. (required)
  resource: string, Name or id of the resource for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "permissions": [ # The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
      "A String",
    ],
  }


Returns:
  An object of the form:

    {
    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
      "A String",
    ],
  }</pre>
</div>

</body></html>