<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="#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, orderBy=None, maxResults=None, pageToken=None, filter=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)</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="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.
    "status": "A String", # [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.
    "city": "A String", # [Output Only] Metropolitan area designator that indicates which city an interconnect is located. For example: "Chicago, IL", "Amsterdam, Netherlands".
    "kind": "compute#interconnectLocation", # [Output Only] Type of the resource. Always compute#interconnectLocation for interconnect locations.
    "availabilityZone": "A String", # [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: "zone1" or "zone2".
    "description": "A String", # [Output Only] An optional description of the resource.
    "peeringdbFacilityId": "A String", # [Output Only] The peeringdb identifier for this facility (corresponding with a netfac type in peeringdb).
    "facilityProvider": "A String", # [Output Only] The name of the provider for this facility (e.g., EQUINIX).
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "regionInfos": [ # [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.
        "locationPresence": "A String", # Identifies the network presence of this location.
        "region": "A String", # URL for the region of this location.
        "expectedRttMs": "A String", # Expected round-trip time in milliseconds, from this InterconnectLocation to a VM in this region.
      },
    ],
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "address": "A String", # [Output Only] The postal address of the Point of Presence, each line in the address is separated by a newline character.
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "continent": "A String", # [Output Only] Continent for this location, which can take one of the following values:
        # - AFRICA
        # - ASIA_PAC
        # - EUROPE
        # - NORTH_AMERICA
        # - SOUTH_AMERICA
    "facilityProviderFacilityId": "A String", # [Output Only] A provider-assigned Identifier for this facility (e.g., Ashburn-DC1).
    "name": "A String", # [Output Only] Name of the resource.
  }</pre>
</div>

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

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:

    { # Response to the list request, and contains a list of interconnect locations.
    "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#interconnectLocationList", # [Output Only] Type of resource. Always compute#interconnectLocationList for lists of interconnect locations.
    "items": [ # 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.
        "status": "A String", # [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.
        "city": "A String", # [Output Only] Metropolitan area designator that indicates which city an interconnect is located. For example: "Chicago, IL", "Amsterdam, Netherlands".
        "kind": "compute#interconnectLocation", # [Output Only] Type of the resource. Always compute#interconnectLocation for interconnect locations.
        "availabilityZone": "A String", # [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: "zone1" or "zone2".
        "description": "A String", # [Output Only] An optional description of the resource.
        "peeringdbFacilityId": "A String", # [Output Only] The peeringdb identifier for this facility (corresponding with a netfac type in peeringdb).
        "facilityProvider": "A String", # [Output Only] The name of the provider for this facility (e.g., EQUINIX).
        "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
        "regionInfos": [ # [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.
            "locationPresence": "A String", # Identifies the network presence of this location.
            "region": "A String", # URL for the region of this location.
            "expectedRttMs": "A String", # Expected round-trip time in milliseconds, from this InterconnectLocation to a VM in this region.
          },
        ],
        "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
        "address": "A String", # [Output Only] The postal address of the Point of Presence, each line in the address is separated by a newline character.
        "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
        "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
        "continent": "A String", # [Output Only] Continent for this location, which can take one of the following values:
            # - AFRICA
            # - ASIA_PAC
            # - EUROPE
            # - NORTH_AMERICA
            # - SOUTH_AMERICA
        "facilityProviderFacilityId": "A String", # [Output Only] A provider-assigned Identifier for this facility (e.g., Ashburn-DC1).
        "name": "A String", # [Output Only] Name of 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="testIamPermissions">testIamPermissions(project, resource, body)</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. (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>