<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.interconnectLocations.html">interconnectLocations</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, interconnectLocation)</a></code></p>
<p class="firstline">Returns the details for the specified interconnect location. Gets a list of available interconnect 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)</a></code></p>
<p class="firstline">Retrieves the list of interconnect locations available to the specified project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, resource, body=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, interconnectLocation)</code>
  <pre>Returns the details for the specified interconnect location. Gets a list of available interconnect locations by making a list() request.

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

Returns:
  An object of the form:

    { # Represents an Interconnect Attachment (VLAN) Location resource.
      #
      # You can use this resource to find location details about an Interconnect attachment (VLAN). For more information about interconnect attachments, read  Creating VLAN Attachments.
    &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;availabilityZone&quot;: &quot;A String&quot;, # [Output Only] Availability zone for this InterconnectLocation. Within a metropolitan area (metro), maintenance will not be simultaneously scheduled in more than one availability zone. Example: &quot;zone1&quot; or &quot;zone2&quot;.
    &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;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#interconnectLocation&quot;, # [Output Only] Type of the resource. Always compute#interconnectLocation for interconnect locations.
    &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;regionInfos&quot;: [ # [Output Only] A list of InterconnectLocation.RegionInfo objects, that describe parameters pertaining to the relation between this InterconnectLocation and various Google Cloud regions.
      { # Information about any potential InterconnectAttachments between an Interconnect at a specific InterconnectLocation, and a specific Cloud Region.
        &quot;expectedRttMs&quot;: &quot;A String&quot;, # Expected round-trip time in milliseconds, from this InterconnectLocation to a VM in this region.
        &quot;locationPresence&quot;: &quot;A String&quot;, # Identifies the network presence of this location.
        &quot;region&quot;: &quot;A String&quot;, # URL for the region of this location.
      },
    ],
    &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 InterconnectLocation, which can take one of the following values:
        # - CLOSED: The InterconnectLocation is closed and is unavailable for provisioning new Interconnects.
        # - AVAILABLE: The InterconnectLocation is available for provisioning new Interconnects.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None)</code>
  <pre>Retrieves the list of interconnect 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. 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 `=`, `!=`, `&gt;`, or `&lt;`.

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 = &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) ```
  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 and the logic is the same as today.

Returns:
  An object of the form:

    { # Response to the list request, and contains a list of interconnect 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 InterconnectLocation resources.
      { # Represents an Interconnect Attachment (VLAN) Location resource.
          #
          # You can use this resource to find location details about an Interconnect attachment (VLAN). For more information about interconnect attachments, read  Creating VLAN Attachments.
        &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;availabilityZone&quot;: &quot;A String&quot;, # [Output Only] Availability zone for this InterconnectLocation. Within a metropolitan area (metro), maintenance will not be simultaneously scheduled in more than one availability zone. Example: &quot;zone1&quot; or &quot;zone2&quot;.
        &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;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#interconnectLocation&quot;, # [Output Only] Type of the resource. Always compute#interconnectLocation for interconnect locations.
        &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;regionInfos&quot;: [ # [Output Only] A list of InterconnectLocation.RegionInfo objects, that describe parameters pertaining to the relation between this InterconnectLocation and various Google Cloud regions.
          { # Information about any potential InterconnectAttachments between an Interconnect at a specific InterconnectLocation, and a specific Cloud Region.
            &quot;expectedRttMs&quot;: &quot;A String&quot;, # Expected round-trip time in milliseconds, from this InterconnectLocation to a VM in this region.
            &quot;locationPresence&quot;: &quot;A String&quot;, # Identifies the network presence of this location.
            &quot;region&quot;: &quot;A String&quot;, # URL for the region of this location.
          },
        ],
        &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 InterconnectLocation, which can take one of the following values:
            # - CLOSED: The InterconnectLocation is closed and is unavailable for provisioning new Interconnects.
            # - AVAILABLE: The InterconnectLocation is available for provisioning new Interconnects.
      },
    ],
    &quot;kind&quot;: &quot;compute#interconnectLocationList&quot;, # [Output Only] Type of resource. Always compute#interconnectLocationList for lists of interconnect locations.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # [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.
    &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(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

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

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

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(project, resource, body=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;,
    ],
  }


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>