<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.interconnectRemoteLocations.html">interconnectRemoteLocations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(project, interconnectRemoteLocation, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the details for the specified interconnect remote location. Gets a list of available interconnect remote locations by making a list() request.</p>
<p class="toc_element">
  <code><a href="#list">list(project, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the list of interconnect remote locations available to the specified project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, resource, body=None, x__xgafv=None)</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, interconnectRemoteLocation, x__xgafv=None)</code>
  <pre>Returns the details for the specified interconnect remote location. Gets a list of available interconnect remote locations by making a list() request.

Args:
  project: string, Project ID for this request. (required)
  interconnectRemoteLocation: string, Name of the interconnect remote location to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a Cross-Cloud Interconnect Remote Location resource. You can use this resource to find remote location details about an Interconnect attachment (VLAN).
  &quot;address&quot;: &quot;A String&quot;, # [Output Only] The postal address of the Point of Presence, each line in the address is separated by a newline character.
  &quot;attachmentConfigurationConstraints&quot;: { # [Output Only] Subset of fields from InterconnectAttachment&#x27;s |configurationConstraints| field that apply to all attachments for this remote location.
    &quot;bgpMd5&quot;: &quot;A String&quot;, # [Output Only] Whether the attachment&#x27;s BGP session requires/allows/disallows BGP MD5 authentication. This can take one of the following values: MD5_OPTIONAL, MD5_REQUIRED, MD5_UNSUPPORTED. For example, a Cross-Cloud Interconnect connection to a remote cloud provider that requires BGP MD5 authentication has the interconnectRemoteLocation attachment_configuration_constraints.bgp_md5 field set to MD5_REQUIRED, and that property is propagated to the attachment. Similarly, if BGP MD5 is MD5_UNSUPPORTED, an error is returned if MD5 is requested.
    &quot;bgpPeerAsnRanges&quot;: [ # [Output Only] List of ASN ranges that the remote location is known to support. Formatted as an array of inclusive ranges {min: min-value, max: max-value}. For example, [{min: 123, max: 123}, {min: 64512, max: 65534}] allows the peer ASN to be 123 or anything in the range 64512-65534. This field is only advisory. Although the API accepts other ranges, these are the ranges that we recommend.
      {
        &quot;max&quot;: 42,
        &quot;min&quot;: 42,
      },
    ],
  },
  &quot;city&quot;: &quot;A String&quot;, # [Output Only] Metropolitan area designator that indicates which city an interconnect is located. For example: &quot;Chicago, IL&quot;, &quot;Amsterdam, Netherlands&quot;.
  &quot;constraints&quot;: { # [Output Only] Constraints on the parameters for creating Cross-Cloud Interconnect and associated InterconnectAttachments.
    &quot;portPairRemoteLocation&quot;: &quot;A String&quot;, # [Output Only] Port pair remote location constraints, which can take one of the following values: PORT_PAIR_UNCONSTRAINED_REMOTE_LOCATION, PORT_PAIR_MATCHING_REMOTE_LOCATION. GCP&#x27;s API refers only to individual ports, but the UI uses this field when ordering a pair of ports, to prevent users from accidentally ordering something that is incompatible with their cloud provider. Specifically, when ordering a redundant pair of Cross-Cloud Interconnect ports, and one of them uses a remote location with portPairMatchingRemoteLocation set to matching, the UI requires that both ports use the same remote location.
    &quot;portPairVlan&quot;: &quot;A String&quot;, # [Output Only] Port pair VLAN constraints, which can take one of the following values: PORT_PAIR_UNCONSTRAINED_VLAN, PORT_PAIR_MATCHING_VLAN
    &quot;subnetLengthRange&quot;: { # [Output Only] [min-length, max-length] The minimum and maximum value (inclusive) for the IPv4 subnet length. For example, an interconnectRemoteLocation for Azure has {min: 30, max: 30} because Azure requires /30 subnets. This range specifies the values supported by both cloud providers. Interconnect currently supports /29 and /30 IPv4 subnet lengths. If a remote cloud has no constraint on IPv4 subnet length, the range would thus be {min: 29, max: 30}.
      &quot;max&quot;: 42,
      &quot;min&quot;: 42,
    },
  },
  &quot;continent&quot;: &quot;A String&quot;, # [Output Only] Continent for this location, which can take one of the following values: - AFRICA - ASIA_PAC - EUROPE - NORTH_AMERICA - SOUTH_AMERICA
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] An optional description of the resource.
  &quot;facilityProvider&quot;: &quot;A String&quot;, # [Output Only] The name of the provider for this facility (e.g., EQUINIX).
  &quot;facilityProviderFacilityId&quot;: &quot;A String&quot;, # [Output Only] A provider-assigned Identifier for this facility (e.g., Ashburn-DC1).
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;kind&quot;: &quot;compute#interconnectRemoteLocation&quot;, # [Output Only] Type of the resource. Always compute#interconnectRemoteLocation for interconnect remote locations.
  &quot;lacp&quot;: &quot;A String&quot;, # [Output Only] Link Aggregation Control Protocol (LACP) constraints, which can take one of the following values: LACP_SUPPORTED, LACP_UNSUPPORTED
  &quot;maxLagSize100Gbps&quot;: 42, # [Output Only] The maximum number of 100 Gbps ports supported in a link aggregation group (LAG). When linkType is 100 Gbps, requestedLinkCount cannot exceed max_lag_size_100_gbps.
  &quot;maxLagSize10Gbps&quot;: 42, # [Output Only] The maximum number of 10 Gbps ports supported in a link aggregation group (LAG). When linkType is 10 Gbps, requestedLinkCount cannot exceed max_lag_size_10_gbps.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the resource.
  &quot;peeringdbFacilityId&quot;: &quot;A String&quot;, # [Output Only] The peeringdb identifier for this facility (corresponding with a netfac type in peeringdb).
  &quot;permittedConnections&quot;: [ # [Output Only] Permitted connections.
    {
      &quot;interconnectLocation&quot;: &quot;A String&quot;, # [Output Only] URL of an Interconnect location that is permitted to connect to this Interconnect remote location.
    },
  ],
  &quot;remoteService&quot;: &quot;A String&quot;, # [Output Only] Indicates the service provider present at the remote location. Example values: &quot;Amazon Web Services&quot;, &quot;Microsoft Azure&quot;.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of this InterconnectRemoteLocation, which can take one of the following values: - CLOSED: The InterconnectRemoteLocation is closed and is unavailable for provisioning new Cross-Cloud Interconnects. - AVAILABLE: The InterconnectRemoteLocation is available for provisioning new Cross-Cloud Interconnects.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</code>
  <pre>Retrieves the list of interconnect remote locations available to the specified project.

Args:
  project: string, Project ID for this request. (required)
  filter: string, A filter expression that filters resources listed in the response. Most Compute resources support two types of filter expressions: expressions that support regular expressions and expressions that follow API improvement proposal AIP-160. These two types of filter expressions cannot be mixed in one request. If you want to use AIP-160, your expression must specify the field name, an operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The operator must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`. For example, if you are filtering Compute Engine instances, you can exclude instances named `example-instance` by specifying `name != example-instance`. The `:*` comparison can be used to test whether a key has been defined. For example, to find all objects with `owner` label use: ``` labels.owner:* ``` 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 = &quot;Intel Skylake&quot;) ``` By default, each expression is an `AND` expression. However, you can include `AND` and `OR` expressions explicitly. For example: ``` (cpuPlatform = &quot;Intel Skylake&quot;) OR (cpuPlatform = &quot;Intel Broadwell&quot;) AND (scheduling.automaticRestart = true) ``` If you want to use a regular expression, use the `eq` (equal) or `ne` (not equal) operator against a single un-parenthesized expression with or without quotes or against multiple parenthesized expressions. Examples: `fieldname eq unquoted literal` `fieldname eq &#x27;single quoted literal&#x27;` `fieldname eq &quot;double quoted literal&quot;` `(fieldname1 eq literal) (fieldname2 ne &quot;literal&quot;)` The literal value is interpreted as a regular expression using Google RE2 library syntax. The literal value must match the entire field. For example, to filter for instances that do not end with name &quot;instance&quot;, you would use `name ne .*instance`. You cannot combine constraints on multiple fields using regular expressions.
  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`)
  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=&quot;creationTimestamp desc&quot;`. 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.
  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.
  returnPartialSuccess: boolean, Opt-in for partial success behavior which provides partial results in case of failure. The default value is false.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to the list request, and contains a list of interconnect remote locations.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: [ # A list of InterconnectRemoteLocation resources.
    { # Represents a Cross-Cloud Interconnect Remote Location resource. You can use this resource to find remote location details about an Interconnect attachment (VLAN).
      &quot;address&quot;: &quot;A String&quot;, # [Output Only] The postal address of the Point of Presence, each line in the address is separated by a newline character.
      &quot;attachmentConfigurationConstraints&quot;: { # [Output Only] Subset of fields from InterconnectAttachment&#x27;s |configurationConstraints| field that apply to all attachments for this remote location.
        &quot;bgpMd5&quot;: &quot;A String&quot;, # [Output Only] Whether the attachment&#x27;s BGP session requires/allows/disallows BGP MD5 authentication. This can take one of the following values: MD5_OPTIONAL, MD5_REQUIRED, MD5_UNSUPPORTED. For example, a Cross-Cloud Interconnect connection to a remote cloud provider that requires BGP MD5 authentication has the interconnectRemoteLocation attachment_configuration_constraints.bgp_md5 field set to MD5_REQUIRED, and that property is propagated to the attachment. Similarly, if BGP MD5 is MD5_UNSUPPORTED, an error is returned if MD5 is requested.
        &quot;bgpPeerAsnRanges&quot;: [ # [Output Only] List of ASN ranges that the remote location is known to support. Formatted as an array of inclusive ranges {min: min-value, max: max-value}. For example, [{min: 123, max: 123}, {min: 64512, max: 65534}] allows the peer ASN to be 123 or anything in the range 64512-65534. This field is only advisory. Although the API accepts other ranges, these are the ranges that we recommend.
          {
            &quot;max&quot;: 42,
            &quot;min&quot;: 42,
          },
        ],
      },
      &quot;city&quot;: &quot;A String&quot;, # [Output Only] Metropolitan area designator that indicates which city an interconnect is located. For example: &quot;Chicago, IL&quot;, &quot;Amsterdam, Netherlands&quot;.
      &quot;constraints&quot;: { # [Output Only] Constraints on the parameters for creating Cross-Cloud Interconnect and associated InterconnectAttachments.
        &quot;portPairRemoteLocation&quot;: &quot;A String&quot;, # [Output Only] Port pair remote location constraints, which can take one of the following values: PORT_PAIR_UNCONSTRAINED_REMOTE_LOCATION, PORT_PAIR_MATCHING_REMOTE_LOCATION. GCP&#x27;s API refers only to individual ports, but the UI uses this field when ordering a pair of ports, to prevent users from accidentally ordering something that is incompatible with their cloud provider. Specifically, when ordering a redundant pair of Cross-Cloud Interconnect ports, and one of them uses a remote location with portPairMatchingRemoteLocation set to matching, the UI requires that both ports use the same remote location.
        &quot;portPairVlan&quot;: &quot;A String&quot;, # [Output Only] Port pair VLAN constraints, which can take one of the following values: PORT_PAIR_UNCONSTRAINED_VLAN, PORT_PAIR_MATCHING_VLAN
        &quot;subnetLengthRange&quot;: { # [Output Only] [min-length, max-length] The minimum and maximum value (inclusive) for the IPv4 subnet length. For example, an interconnectRemoteLocation for Azure has {min: 30, max: 30} because Azure requires /30 subnets. This range specifies the values supported by both cloud providers. Interconnect currently supports /29 and /30 IPv4 subnet lengths. If a remote cloud has no constraint on IPv4 subnet length, the range would thus be {min: 29, max: 30}.
          &quot;max&quot;: 42,
          &quot;min&quot;: 42,
        },
      },
      &quot;continent&quot;: &quot;A String&quot;, # [Output Only] Continent for this location, which can take one of the following values: - AFRICA - ASIA_PAC - EUROPE - NORTH_AMERICA - SOUTH_AMERICA
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
      &quot;description&quot;: &quot;A String&quot;, # [Output Only] An optional description of the resource.
      &quot;facilityProvider&quot;: &quot;A String&quot;, # [Output Only] The name of the provider for this facility (e.g., EQUINIX).
      &quot;facilityProviderFacilityId&quot;: &quot;A String&quot;, # [Output Only] A provider-assigned Identifier for this facility (e.g., Ashburn-DC1).
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
      &quot;kind&quot;: &quot;compute#interconnectRemoteLocation&quot;, # [Output Only] Type of the resource. Always compute#interconnectRemoteLocation for interconnect remote locations.
      &quot;lacp&quot;: &quot;A String&quot;, # [Output Only] Link Aggregation Control Protocol (LACP) constraints, which can take one of the following values: LACP_SUPPORTED, LACP_UNSUPPORTED
      &quot;maxLagSize100Gbps&quot;: 42, # [Output Only] The maximum number of 100 Gbps ports supported in a link aggregation group (LAG). When linkType is 100 Gbps, requestedLinkCount cannot exceed max_lag_size_100_gbps.
      &quot;maxLagSize10Gbps&quot;: 42, # [Output Only] The maximum number of 10 Gbps ports supported in a link aggregation group (LAG). When linkType is 10 Gbps, requestedLinkCount cannot exceed max_lag_size_10_gbps.
      &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the resource.
      &quot;peeringdbFacilityId&quot;: &quot;A String&quot;, # [Output Only] The peeringdb identifier for this facility (corresponding with a netfac type in peeringdb).
      &quot;permittedConnections&quot;: [ # [Output Only] Permitted connections.
        {
          &quot;interconnectLocation&quot;: &quot;A String&quot;, # [Output Only] URL of an Interconnect location that is permitted to connect to this Interconnect remote location.
        },
      ],
      &quot;remoteService&quot;: &quot;A String&quot;, # [Output Only] Indicates the service provider present at the remote location. Example values: &quot;Amazon Web Services&quot;, &quot;Microsoft Azure&quot;.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
      &quot;selfLinkWithId&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource with the resource id.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of this InterconnectRemoteLocation, which can take one of the following values: - CLOSED: The InterconnectRemoteLocation is closed and is unavailable for provisioning new Cross-Cloud Interconnects. - AVAILABLE: The InterconnectRemoteLocation is available for provisioning new Cross-Cloud Interconnects.
    },
  ],
  &quot;kind&quot;: &quot;compute#interconnectRemoteLocationList&quot;, # [Output Only] Type of resource. Always compute#interconnectRemoteLocationList for lists of interconnect remote locations.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # [Output Only] This token lets you 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.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource.
  &quot;warning&quot;: { # [Output Only] Informational warning message.
    &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
    &quot;data&quot;: [ # [Output Only] Metadata about this warning in key: value format. For example: &quot;data&quot;: [ { &quot;key&quot;: &quot;scope&quot;, &quot;value&quot;: &quot;zones/us-east1-d&quot; }
      {
        &quot;key&quot;: &quot;A String&quot;, # [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).
        &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
  },
}</pre>
</div>

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

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

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

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

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

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

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

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

</body></html>