<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_v1.html">Compute Engine API</a> . <a href="compute_v1.interconnects.html">interconnects</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="#delete">delete(project, interconnect, requestId=None)</a></code></p>
<p class="firstline">Deletes the specified interconnect.</p>
<p class="toc_element">
  <code><a href="#get">get(project, interconnect)</a></code></p>
<p class="firstline">Returns the specified interconnect. Get a list of available interconnects by making a list() request.</p>
<p class="toc_element">
  <code><a href="#getDiagnostics">getDiagnostics(project, interconnect)</a></code></p>
<p class="firstline">Returns the interconnectDiagnostics for the specified interconnect.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, body=None, requestId=None)</a></code></p>
<p class="firstline">Creates a Interconnect in the specified project using the data included in the 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 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="#patch">patch(project, interconnect, body=None, requestId=None)</a></code></p>
<p class="firstline">Updates the specified interconnect with the data included in the request. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.</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="delete">delete(project, interconnect, requestId=None)</code>
  <pre>Deletes the specified interconnect.

Args:
  project: string, Project ID for this request. (required)
  interconnect: string, Name of the interconnect 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.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
    #
    # 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 {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [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.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
    {
      &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.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, interconnect)</code>
  <pre>Returns the specified interconnect. Get a list of available interconnects by making a list() request.

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

Returns:
  An object of the form:

    { # Represents an Interconnect resource.
    #
    # An Interconnect resource is a dedicated connection between the GCP network and your on-premises network. For more information, read the  Dedicated Interconnect Overview. (== resource_for {$api_version}.interconnects ==)
  &quot;adminEnabled&quot;: True or False, # Administrative status of the interconnect. When this is set to true, the Interconnect is functional and can carry traffic. When set to false, no packets can be carried over the interconnect and no BGP routes are exchanged over it. By default, the status is set to true.
  &quot;circuitInfos&quot;: [ # [Output Only] A list of CircuitInfo objects, that describe the individual circuits in this LAG.
    { # Describes a single physical circuit between the Customer and Google. CircuitInfo objects are created by Google, so all fields are output only.
      &quot;customerDemarcId&quot;: &quot;A String&quot;, # Customer-side demarc ID for this circuit.
      &quot;googleCircuitId&quot;: &quot;A String&quot;, # Google-assigned unique ID for this circuit. Assigned at circuit turn-up.
      &quot;googleDemarcId&quot;: &quot;A String&quot;, # Google-side demarc ID for this circuit. Assigned at circuit turn-up and provided by Google to the customer in the LOA.
    },
  ],
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customerName&quot;: &quot;A String&quot;, # Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;expectedOutages&quot;: [ # [Output Only] A list of outages expected for this Interconnect.
    { # Description of a planned outage on this Interconnect.
      &quot;affectedCircuits&quot;: [ # If issue_type is IT_PARTIAL_OUTAGE, a list of the Google-side circuit IDs that will be affected.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # A description about the purpose of the outage.
      &quot;endTime&quot;: &quot;A String&quot;, # Scheduled end time for the outage (milliseconds since Unix epoch).
      &quot;issueType&quot;: &quot;A String&quot;, # Form this outage is expected to take, which can take one of the following values:
          # - OUTAGE: The Interconnect may be completely out of service for some or all of the specified window.
          # - PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole should remain up, but with reduced bandwidth. Note that the versions of this enum prefixed with &quot;IT_&quot; have been deprecated in favor of the unprefixed values.
      &quot;name&quot;: &quot;A String&quot;, # Unique identifier for this outage notification.
      &quot;source&quot;: &quot;A String&quot;, # The party that generated this notification, which can take the following value:
          # - GOOGLE: this notification as generated by Google. Note that the value of NSRC_GOOGLE has been deprecated in favor of GOOGLE.
      &quot;startTime&quot;: &quot;A String&quot;, # Scheduled start time for the outage (milliseconds since Unix epoch).
      &quot;state&quot;: &quot;A String&quot;, # State of this notification, which can take one of the following values:
          # - ACTIVE: This outage notification is active. The event could be in the past, present, or future. See start_time and end_time for scheduling.
          # - CANCELLED: The outage associated with this notification was cancelled before the outage was due to start. Note that the versions of this enum prefixed with &quot;NS_&quot; have been deprecated in favor of the unprefixed values.
    },
  ],
  &quot;googleIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the Google side of the Interconnect link. This can be used only for ping tests.
  &quot;googleReferenceId&quot;: &quot;A String&quot;, # [Output Only] Google reference ID to be used when raising support tickets with Google or otherwise to debug backend connectivity issues.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;interconnectAttachments&quot;: [ # [Output Only] A list of the URLs of all InterconnectAttachments configured to use this Interconnect.
    &quot;A String&quot;,
  ],
  &quot;interconnectType&quot;: &quot;A String&quot;, # Type of interconnect, which can take one of the following values:
      # - PARTNER: A partner-managed interconnection shared between customers though a partner.
      # - DEDICATED: A dedicated physical interconnection with the customer. Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.
  &quot;kind&quot;: &quot;compute#interconnect&quot;, # [Output Only] Type of the resource. Always compute#interconnect for interconnects.
  &quot;linkType&quot;: &quot;A String&quot;, # Type of link requested, which can take one of the following values:
      # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
      # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics. Note that this field indicates the speed of each of the links in the bundle, not the speed of the entire bundle.
  &quot;location&quot;: &quot;A String&quot;, # URL of the InterconnectLocation object that represents where this connection is to be provisioned.
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;nocContactEmail&quot;: &quot;A String&quot;, # Email address to contact the customer NOC for operations and maintenance notifications regarding this Interconnect. If specified, this will be used for notifications in addition to all other forms described, such as Stackdriver logs alerting and Cloud Notifications.
  &quot;operationalStatus&quot;: &quot;A String&quot;, # [Output Only] The current status of this Interconnect&#x27;s functionality, which can take one of the following values:
      # - OS_ACTIVE: A valid Interconnect, which is turned up and is ready to use. Attachments may be provisioned on this Interconnect.
      # - OS_UNPROVISIONED: An Interconnect that has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
  &quot;peerIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.
  &quot;provisionedLinkCount&quot;: 42, # [Output Only] Number of links actually provisioned in this interconnect.
  &quot;requestedLinkCount&quot;: 42, # Target number of physical links in the link bundle, as requested by the customer.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;state&quot;: &quot;A String&quot;, # [Output Only] The current state of Interconnect functionality, which can take one of the following values:
      # - ACTIVE: The Interconnect is valid, turned up and ready to use. Attachments may be provisioned on this Interconnect.
      # - UNPROVISIONED: The Interconnect has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - UNDER_MAINTENANCE: The Interconnect is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
}</pre>
</div>

<div class="method">
    <code class="details" id="getDiagnostics">getDiagnostics(project, interconnect)</code>
  <pre>Returns the interconnectDiagnostics for the specified interconnect.

Args:
  project: string, Project ID for this request. (required)
  interconnect: string, Name of the interconnect resource to query. (required)

Returns:
  An object of the form:

    { # Response for the InterconnectsGetDiagnosticsRequest.
  &quot;result&quot;: { # Diagnostics information about interconnect, contains detailed and current technical information about Google&#x27;s side of the connection.
    &quot;arpCaches&quot;: [ # A list of InterconnectDiagnostics.ARPEntry objects, describing individual neighbors currently seen by the Google router in the ARP cache for the Interconnect. This will be empty when the Interconnect is not bundled.
      { # Describing the ARP neighbor entries seen on this link
        &quot;ipAddress&quot;: &quot;A String&quot;, # The IP address of this ARP neighbor.
        &quot;macAddress&quot;: &quot;A String&quot;, # The MAC address of this ARP neighbor.
      },
    ],
    &quot;links&quot;: [ # A list of InterconnectDiagnostics.LinkStatus objects, describing the status for each link on the Interconnect.
      {
        &quot;arpCaches&quot;: [ # A list of InterconnectDiagnostics.ARPEntry objects, describing the ARP neighbor entries seen on this link. This will be empty if the link is bundled
          { # Describing the ARP neighbor entries seen on this link
            &quot;ipAddress&quot;: &quot;A String&quot;, # The IP address of this ARP neighbor.
            &quot;macAddress&quot;: &quot;A String&quot;, # The MAC address of this ARP neighbor.
          },
        ],
        &quot;circuitId&quot;: &quot;A String&quot;, # The unique ID for this link assigned during turn up by Google.
        &quot;googleDemarc&quot;: &quot;A String&quot;, # The Demarc address assigned by Google and provided in the LoA.
        &quot;lacpStatus&quot;: {
          &quot;googleSystemId&quot;: &quot;A String&quot;, # System ID of the port on Google&#x27;s side of the LACP exchange.
          &quot;neighborSystemId&quot;: &quot;A String&quot;, # System ID of the port on the neighbor&#x27;s side of the LACP exchange.
          &quot;state&quot;: &quot;A String&quot;, # The state of a LACP link, which can take one of the following values:
              # - ACTIVE: The link is configured and active within the bundle.
              # - DETACHED: The link is not configured within the bundle. This means that the rest of the object should be empty.
        },
        &quot;receivingOpticalPower&quot;: { # An InterconnectDiagnostics.LinkOpticalPower object, describing the current value and status of the received light level.
          &quot;state&quot;: &quot;A String&quot;, # The status of the current value when compared to the warning and alarm levels for the receiving or transmitting transceiver. Possible states include:
              # - OK: The value has not crossed a warning threshold.
              # - LOW_WARNING: The value has crossed below the low warning threshold.
              # - HIGH_WARNING: The value has crossed above the high warning threshold.
              # - LOW_ALARM: The value has crossed below the low alarm threshold.
              # - HIGH_ALARM: The value has crossed above the high alarm threshold.
          &quot;value&quot;: 3.14, # Value of the current receiving or transmitting optical power, read in dBm. Take a known good optical value, give it a 10% margin and trigger warnings relative to that value. In general, a -7dBm warning and a -11dBm alarm are good optical value estimates for most links.
        },
        &quot;transmittingOpticalPower&quot;: { # An InterconnectDiagnostics.LinkOpticalPower object, describing the current value and status of the transmitted light level.
          &quot;state&quot;: &quot;A String&quot;, # The status of the current value when compared to the warning and alarm levels for the receiving or transmitting transceiver. Possible states include:
              # - OK: The value has not crossed a warning threshold.
              # - LOW_WARNING: The value has crossed below the low warning threshold.
              # - HIGH_WARNING: The value has crossed above the high warning threshold.
              # - LOW_ALARM: The value has crossed below the low alarm threshold.
              # - HIGH_ALARM: The value has crossed above the high alarm threshold.
          &quot;value&quot;: 3.14, # Value of the current receiving or transmitting optical power, read in dBm. Take a known good optical value, give it a 10% margin and trigger warnings relative to that value. In general, a -7dBm warning and a -11dBm alarm are good optical value estimates for most links.
        },
      },
    ],
    &quot;macAddress&quot;: &quot;A String&quot;, # The MAC address of the Interconnect&#x27;s bundle interface.
  },
}</pre>
</div>

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

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

{ # Represents an Interconnect resource.
    # 
    # An Interconnect resource is a dedicated connection between the GCP network and your on-premises network. For more information, read the  Dedicated Interconnect Overview. (== resource_for {$api_version}.interconnects ==)
  &quot;adminEnabled&quot;: True or False, # Administrative status of the interconnect. When this is set to true, the Interconnect is functional and can carry traffic. When set to false, no packets can be carried over the interconnect and no BGP routes are exchanged over it. By default, the status is set to true.
  &quot;circuitInfos&quot;: [ # [Output Only] A list of CircuitInfo objects, that describe the individual circuits in this LAG.
    { # Describes a single physical circuit between the Customer and Google. CircuitInfo objects are created by Google, so all fields are output only.
      &quot;customerDemarcId&quot;: &quot;A String&quot;, # Customer-side demarc ID for this circuit.
      &quot;googleCircuitId&quot;: &quot;A String&quot;, # Google-assigned unique ID for this circuit. Assigned at circuit turn-up.
      &quot;googleDemarcId&quot;: &quot;A String&quot;, # Google-side demarc ID for this circuit. Assigned at circuit turn-up and provided by Google to the customer in the LOA.
    },
  ],
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customerName&quot;: &quot;A String&quot;, # Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;expectedOutages&quot;: [ # [Output Only] A list of outages expected for this Interconnect.
    { # Description of a planned outage on this Interconnect.
      &quot;affectedCircuits&quot;: [ # If issue_type is IT_PARTIAL_OUTAGE, a list of the Google-side circuit IDs that will be affected.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # A description about the purpose of the outage.
      &quot;endTime&quot;: &quot;A String&quot;, # Scheduled end time for the outage (milliseconds since Unix epoch).
      &quot;issueType&quot;: &quot;A String&quot;, # Form this outage is expected to take, which can take one of the following values:
          # - OUTAGE: The Interconnect may be completely out of service for some or all of the specified window.
          # - PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole should remain up, but with reduced bandwidth. Note that the versions of this enum prefixed with &quot;IT_&quot; have been deprecated in favor of the unprefixed values.
      &quot;name&quot;: &quot;A String&quot;, # Unique identifier for this outage notification.
      &quot;source&quot;: &quot;A String&quot;, # The party that generated this notification, which can take the following value:
          # - GOOGLE: this notification as generated by Google. Note that the value of NSRC_GOOGLE has been deprecated in favor of GOOGLE.
      &quot;startTime&quot;: &quot;A String&quot;, # Scheduled start time for the outage (milliseconds since Unix epoch).
      &quot;state&quot;: &quot;A String&quot;, # State of this notification, which can take one of the following values:
          # - ACTIVE: This outage notification is active. The event could be in the past, present, or future. See start_time and end_time for scheduling.
          # - CANCELLED: The outage associated with this notification was cancelled before the outage was due to start. Note that the versions of this enum prefixed with &quot;NS_&quot; have been deprecated in favor of the unprefixed values.
    },
  ],
  &quot;googleIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the Google side of the Interconnect link. This can be used only for ping tests.
  &quot;googleReferenceId&quot;: &quot;A String&quot;, # [Output Only] Google reference ID to be used when raising support tickets with Google or otherwise to debug backend connectivity issues.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;interconnectAttachments&quot;: [ # [Output Only] A list of the URLs of all InterconnectAttachments configured to use this Interconnect.
    &quot;A String&quot;,
  ],
  &quot;interconnectType&quot;: &quot;A String&quot;, # Type of interconnect, which can take one of the following values:
      # - PARTNER: A partner-managed interconnection shared between customers though a partner.
      # - DEDICATED: A dedicated physical interconnection with the customer. Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.
  &quot;kind&quot;: &quot;compute#interconnect&quot;, # [Output Only] Type of the resource. Always compute#interconnect for interconnects.
  &quot;linkType&quot;: &quot;A String&quot;, # Type of link requested, which can take one of the following values:
      # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
      # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics. Note that this field indicates the speed of each of the links in the bundle, not the speed of the entire bundle.
  &quot;location&quot;: &quot;A String&quot;, # URL of the InterconnectLocation object that represents where this connection is to be provisioned.
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;nocContactEmail&quot;: &quot;A String&quot;, # Email address to contact the customer NOC for operations and maintenance notifications regarding this Interconnect. If specified, this will be used for notifications in addition to all other forms described, such as Stackdriver logs alerting and Cloud Notifications.
  &quot;operationalStatus&quot;: &quot;A String&quot;, # [Output Only] The current status of this Interconnect&#x27;s functionality, which can take one of the following values:
      # - OS_ACTIVE: A valid Interconnect, which is turned up and is ready to use. Attachments may be provisioned on this Interconnect.
      # - OS_UNPROVISIONED: An Interconnect that has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
  &quot;peerIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.
  &quot;provisionedLinkCount&quot;: 42, # [Output Only] Number of links actually provisioned in this interconnect.
  &quot;requestedLinkCount&quot;: 42, # Target number of physical links in the link bundle, as requested by the customer.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;state&quot;: &quot;A String&quot;, # [Output Only] The current state of Interconnect functionality, which can take one of the following values:
      # - ACTIVE: The Interconnect is valid, turned up and ready to use. Attachments may be provisioned on this Interconnect.
      # - UNPROVISIONED: The Interconnect has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - UNDER_MAINTENANCE: The Interconnect is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
}

  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.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
    #
    # 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 {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [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.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
    {
      &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.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
}</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 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 interconnects.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: [ # A list of Interconnect resources.
    { # Represents an Interconnect resource.
        #
        # An Interconnect resource is a dedicated connection between the GCP network and your on-premises network. For more information, read the  Dedicated Interconnect Overview. (== resource_for {$api_version}.interconnects ==)
      &quot;adminEnabled&quot;: True or False, # Administrative status of the interconnect. When this is set to true, the Interconnect is functional and can carry traffic. When set to false, no packets can be carried over the interconnect and no BGP routes are exchanged over it. By default, the status is set to true.
      &quot;circuitInfos&quot;: [ # [Output Only] A list of CircuitInfo objects, that describe the individual circuits in this LAG.
        { # Describes a single physical circuit between the Customer and Google. CircuitInfo objects are created by Google, so all fields are output only.
          &quot;customerDemarcId&quot;: &quot;A String&quot;, # Customer-side demarc ID for this circuit.
          &quot;googleCircuitId&quot;: &quot;A String&quot;, # Google-assigned unique ID for this circuit. Assigned at circuit turn-up.
          &quot;googleDemarcId&quot;: &quot;A String&quot;, # Google-side demarc ID for this circuit. Assigned at circuit turn-up and provided by Google to the customer in the LOA.
        },
      ],
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
      &quot;customerName&quot;: &quot;A String&quot;, # Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
      &quot;expectedOutages&quot;: [ # [Output Only] A list of outages expected for this Interconnect.
        { # Description of a planned outage on this Interconnect.
          &quot;affectedCircuits&quot;: [ # If issue_type is IT_PARTIAL_OUTAGE, a list of the Google-side circuit IDs that will be affected.
            &quot;A String&quot;,
          ],
          &quot;description&quot;: &quot;A String&quot;, # A description about the purpose of the outage.
          &quot;endTime&quot;: &quot;A String&quot;, # Scheduled end time for the outage (milliseconds since Unix epoch).
          &quot;issueType&quot;: &quot;A String&quot;, # Form this outage is expected to take, which can take one of the following values:
              # - OUTAGE: The Interconnect may be completely out of service for some or all of the specified window.
              # - PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole should remain up, but with reduced bandwidth. Note that the versions of this enum prefixed with &quot;IT_&quot; have been deprecated in favor of the unprefixed values.
          &quot;name&quot;: &quot;A String&quot;, # Unique identifier for this outage notification.
          &quot;source&quot;: &quot;A String&quot;, # The party that generated this notification, which can take the following value:
              # - GOOGLE: this notification as generated by Google. Note that the value of NSRC_GOOGLE has been deprecated in favor of GOOGLE.
          &quot;startTime&quot;: &quot;A String&quot;, # Scheduled start time for the outage (milliseconds since Unix epoch).
          &quot;state&quot;: &quot;A String&quot;, # State of this notification, which can take one of the following values:
              # - ACTIVE: This outage notification is active. The event could be in the past, present, or future. See start_time and end_time for scheduling.
              # - CANCELLED: The outage associated with this notification was cancelled before the outage was due to start. Note that the versions of this enum prefixed with &quot;NS_&quot; have been deprecated in favor of the unprefixed values.
        },
      ],
      &quot;googleIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the Google side of the Interconnect link. This can be used only for ping tests.
      &quot;googleReferenceId&quot;: &quot;A String&quot;, # [Output Only] Google reference ID to be used when raising support tickets with Google or otherwise to debug backend connectivity issues.
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
      &quot;interconnectAttachments&quot;: [ # [Output Only] A list of the URLs of all InterconnectAttachments configured to use this Interconnect.
        &quot;A String&quot;,
      ],
      &quot;interconnectType&quot;: &quot;A String&quot;, # Type of interconnect, which can take one of the following values:
          # - PARTNER: A partner-managed interconnection shared between customers though a partner.
          # - DEDICATED: A dedicated physical interconnection with the customer. Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.
      &quot;kind&quot;: &quot;compute#interconnect&quot;, # [Output Only] Type of the resource. Always compute#interconnect for interconnects.
      &quot;linkType&quot;: &quot;A String&quot;, # Type of link requested, which can take one of the following values:
          # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
          # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics. Note that this field indicates the speed of each of the links in the bundle, not the speed of the entire bundle.
      &quot;location&quot;: &quot;A String&quot;, # URL of the InterconnectLocation object that represents where this connection is to be provisioned.
      &quot;name&quot;: &quot;A String&quot;, # 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.
      &quot;nocContactEmail&quot;: &quot;A String&quot;, # Email address to contact the customer NOC for operations and maintenance notifications regarding this Interconnect. If specified, this will be used for notifications in addition to all other forms described, such as Stackdriver logs alerting and Cloud Notifications.
      &quot;operationalStatus&quot;: &quot;A String&quot;, # [Output Only] The current status of this Interconnect&#x27;s functionality, which can take one of the following values:
          # - OS_ACTIVE: A valid Interconnect, which is turned up and is ready to use. Attachments may be provisioned on this Interconnect.
          # - OS_UNPROVISIONED: An Interconnect that has not completed turnup. No attachments may be provisioned on this Interconnect.
          # - OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
      &quot;peerIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.
      &quot;provisionedLinkCount&quot;: 42, # [Output Only] Number of links actually provisioned in this interconnect.
      &quot;requestedLinkCount&quot;: 42, # Target number of physical links in the link bundle, as requested by the customer.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
      &quot;state&quot;: &quot;A String&quot;, # [Output Only] The current state of Interconnect functionality, which can take one of the following values:
          # - ACTIVE: The Interconnect is valid, turned up and ready to use. Attachments may be provisioned on this Interconnect.
          # - UNPROVISIONED: The Interconnect has not completed turnup. No attachments may be provisioned on this Interconnect.
          # - UNDER_MAINTENANCE: The Interconnect is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
    },
  ],
  &quot;kind&quot;: &quot;compute#interconnectList&quot;, # [Output Only] Type of resource. Always compute#interconnectList for lists of interconnects.
  &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="patch">patch(project, interconnect, body=None, requestId=None)</code>
  <pre>Updates the specified interconnect 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)
  interconnect: string, Name of the interconnect to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents an Interconnect resource.
    # 
    # An Interconnect resource is a dedicated connection between the GCP network and your on-premises network. For more information, read the  Dedicated Interconnect Overview. (== resource_for {$api_version}.interconnects ==)
  &quot;adminEnabled&quot;: True or False, # Administrative status of the interconnect. When this is set to true, the Interconnect is functional and can carry traffic. When set to false, no packets can be carried over the interconnect and no BGP routes are exchanged over it. By default, the status is set to true.
  &quot;circuitInfos&quot;: [ # [Output Only] A list of CircuitInfo objects, that describe the individual circuits in this LAG.
    { # Describes a single physical circuit between the Customer and Google. CircuitInfo objects are created by Google, so all fields are output only.
      &quot;customerDemarcId&quot;: &quot;A String&quot;, # Customer-side demarc ID for this circuit.
      &quot;googleCircuitId&quot;: &quot;A String&quot;, # Google-assigned unique ID for this circuit. Assigned at circuit turn-up.
      &quot;googleDemarcId&quot;: &quot;A String&quot;, # Google-side demarc ID for this circuit. Assigned at circuit turn-up and provided by Google to the customer in the LOA.
    },
  ],
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp in RFC3339 text format.
  &quot;customerName&quot;: &quot;A String&quot;, # Customer name, to put in the Letter of Authorization as the party authorized to request a crossconnect.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you create the resource.
  &quot;expectedOutages&quot;: [ # [Output Only] A list of outages expected for this Interconnect.
    { # Description of a planned outage on this Interconnect.
      &quot;affectedCircuits&quot;: [ # If issue_type is IT_PARTIAL_OUTAGE, a list of the Google-side circuit IDs that will be affected.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # A description about the purpose of the outage.
      &quot;endTime&quot;: &quot;A String&quot;, # Scheduled end time for the outage (milliseconds since Unix epoch).
      &quot;issueType&quot;: &quot;A String&quot;, # Form this outage is expected to take, which can take one of the following values:
          # - OUTAGE: The Interconnect may be completely out of service for some or all of the specified window.
          # - PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole should remain up, but with reduced bandwidth. Note that the versions of this enum prefixed with &quot;IT_&quot; have been deprecated in favor of the unprefixed values.
      &quot;name&quot;: &quot;A String&quot;, # Unique identifier for this outage notification.
      &quot;source&quot;: &quot;A String&quot;, # The party that generated this notification, which can take the following value:
          # - GOOGLE: this notification as generated by Google. Note that the value of NSRC_GOOGLE has been deprecated in favor of GOOGLE.
      &quot;startTime&quot;: &quot;A String&quot;, # Scheduled start time for the outage (milliseconds since Unix epoch).
      &quot;state&quot;: &quot;A String&quot;, # State of this notification, which can take one of the following values:
          # - ACTIVE: This outage notification is active. The event could be in the past, present, or future. See start_time and end_time for scheduling.
          # - CANCELLED: The outage associated with this notification was cancelled before the outage was due to start. Note that the versions of this enum prefixed with &quot;NS_&quot; have been deprecated in favor of the unprefixed values.
    },
  ],
  &quot;googleIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the Google side of the Interconnect link. This can be used only for ping tests.
  &quot;googleReferenceId&quot;: &quot;A String&quot;, # [Output Only] Google reference ID to be used when raising support tickets with Google or otherwise to debug backend connectivity issues.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
  &quot;interconnectAttachments&quot;: [ # [Output Only] A list of the URLs of all InterconnectAttachments configured to use this Interconnect.
    &quot;A String&quot;,
  ],
  &quot;interconnectType&quot;: &quot;A String&quot;, # Type of interconnect, which can take one of the following values:
      # - PARTNER: A partner-managed interconnection shared between customers though a partner.
      # - DEDICATED: A dedicated physical interconnection with the customer. Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.
  &quot;kind&quot;: &quot;compute#interconnect&quot;, # [Output Only] Type of the resource. Always compute#interconnect for interconnects.
  &quot;linkType&quot;: &quot;A String&quot;, # Type of link requested, which can take one of the following values:
      # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
      # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics. Note that this field indicates the speed of each of the links in the bundle, not the speed of the entire bundle.
  &quot;location&quot;: &quot;A String&quot;, # URL of the InterconnectLocation object that represents where this connection is to be provisioned.
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;nocContactEmail&quot;: &quot;A String&quot;, # Email address to contact the customer NOC for operations and maintenance notifications regarding this Interconnect. If specified, this will be used for notifications in addition to all other forms described, such as Stackdriver logs alerting and Cloud Notifications.
  &quot;operationalStatus&quot;: &quot;A String&quot;, # [Output Only] The current status of this Interconnect&#x27;s functionality, which can take one of the following values:
      # - OS_ACTIVE: A valid Interconnect, which is turned up and is ready to use. Attachments may be provisioned on this Interconnect.
      # - OS_UNPROVISIONED: An Interconnect that has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
  &quot;peerIpAddress&quot;: &quot;A String&quot;, # [Output Only] IP address configured on the customer side of the Interconnect link. The customer should configure this IP address during turnup when prompted by Google NOC. This can be used only for ping tests.
  &quot;provisionedLinkCount&quot;: 42, # [Output Only] Number of links actually provisioned in this interconnect.
  &quot;requestedLinkCount&quot;: 42, # Target number of physical links in the link bundle, as requested by the customer.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;state&quot;: &quot;A String&quot;, # [Output Only] The current state of Interconnect functionality, which can take one of the following values:
      # - ACTIVE: The Interconnect is valid, turned up and ready to use. Attachments may be provisioned on this Interconnect.
      # - UNPROVISIONED: The Interconnect has not completed turnup. No attachments may be provisioned on this Interconnect.
      # - UNDER_MAINTENANCE: The Interconnect is undergoing internal maintenance. No attachments may be provisioned or updated on this Interconnect.
}

  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.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/{$api_version}/globalOperations) * [Regional](/compute/docs/reference/rest/{$api_version}/regionOperations) * [Zonal](/compute/docs/reference/rest/{$api_version}/zoneOperations)
    #
    # 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 {$api_version}.globalOperations ==) (== resource_for {$api_version}.regionOperations ==) (== resource_for {$api_version}.zoneOperations ==)
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`, `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the following: `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [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.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example: `user@example.com`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
    {
      &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.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
}</pre>
</div>

</body></html>