HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/396/lib/googlecloudsdk/api_lib/compute/interconnects/client.py
# -*- coding: utf-8 -*- #
# Copyright 2025 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Interconnect."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

import dataclasses

from googlecloudsdk.command_lib.compute.interconnects import flags


class Interconnect(object):
  """Abstracts Interconnect resource."""

  def __init__(self, ref, compute_client=None):
    self.ref = ref
    self._compute_client = compute_client

  @property
  def _client(self):
    return self._compute_client.apitools_client

  def _MakeCreateRequestTuple(
      self,
      description,
      location,
      subzone,
      interconnect_type,
      requested_link_count,
      link_type,
      admin_enabled,
      noc_contact_email,
      customer_name,
      remote_location,
      requested_features,
      resource_manager_tags,
  ):
    """Make a tuple for interconnect insert request.

    Args:
      description: String that represents the description of the Cloud
        Interconnect resource.
      location: String that represents the URL of the location resource for
        Cloud Interconnect that Cloud Interconnect should be connected to.
      subzone: String that represents the subzone of the location resource that
        Cloud Interconnect should be connected to.
      interconnect_type: InterconnectTypeValueValuesEnum that represents the
        type of Cloud Interconnect.
      requested_link_count: Number of the requested links.
      link_type: LinkTypeValueValuesEnum that represents Cloud Interconnect link
        type.
      admin_enabled: Boolean that represents administrative status of Cloud
        Interconnect.
      noc_contact_email: String that represents the customer's email address.
      customer_name: String that represents the customer's name.
      remote_location: String that represents the Cloud Interconnect remote
        location URL that should be connected to Cloud Interconnect.
      requested_features: List of features requested for this interconnect.
      resource_manager_tags: Dictionary of resource manager tags for this
        interconnect.

    Returns:
    Insert interconnect tuple that can be used in a request.
    """
    kwargs = {}
    if resource_manager_tags is not None:
      kwargs['params'] = flags.CreateInterconnectParams(
          self._messages, resource_manager_tags
      )
    return (
        self._client.interconnects,
        'Insert',
        self._messages.ComputeInterconnectsInsertRequest(
            project=self.ref.project,
            interconnect=self._messages.Interconnect(
                name=self.ref.Name(),
                description=description,
                interconnectType=interconnect_type,
                linkType=link_type,
                nocContactEmail=noc_contact_email,
                requestedLinkCount=requested_link_count,
                location=location,
                subzone=subzone,
                adminEnabled=admin_enabled,
                customerName=customer_name,
                remoteLocation=remote_location,
                requestedFeatures=requested_features,
                **kwargs
            ),
        ),
    )

  def _MakePatchRequestTuple(
      self,
      description,
      location,
      interconnect_type,
      requested_link_count,
      link_type,
      admin_enabled,
      noc_contact_email,
      labels,
      label_fingerprint,
      macsec_enabled,
      macsec,
      aai_enabled,
      application_aware_interconnect,
  ):
    """Make a tuple for interconnect patch request."""
    kwargs = {}
    if labels is not None:
      kwargs['labels'] = labels
    if label_fingerprint is not None:
      kwargs['labelFingerprint'] = label_fingerprint
    if aai_enabled is not None:
      kwargs['aaiEnabled'] = aai_enabled
    if application_aware_interconnect is not None:
      kwargs['applicationAwareInterconnect'] = application_aware_interconnect
    return (
        self._client.interconnects,
        'Patch',
        self._messages.ComputeInterconnectsPatchRequest(
            interconnect=self.ref.Name(),
            interconnectResource=self._messages.Interconnect(
                name=None,
                description=description,
                interconnectType=interconnect_type,
                linkType=link_type,
                nocContactEmail=noc_contact_email,
                requestedLinkCount=requested_link_count,
                location=location,
                adminEnabled=admin_enabled,
                macsecEnabled=macsec_enabled,
                macsec=macsec,
                **kwargs
            ),
            project=self.ref.project,
        ),
    )

  def _MakeDeleteRequestTuple(self):
    return (self._client.interconnects, 'Delete',
            self._messages.ComputeInterconnectsDeleteRequest(
                project=self.ref.project, interconnect=self.ref.Name()))

  def _MakeDescribeRequestTuple(self):
    return (self._client.interconnects, 'Get',
            self._messages.ComputeInterconnectsGetRequest(
                project=self.ref.project, interconnect=self.ref.Name()))

  def _MakeGetDiagnosticsRequestTuple(self):
    return (self._client.interconnects, 'GetDiagnostics',
            self._messages.ComputeInterconnectsGetDiagnosticsRequest(
                project=self.ref.project, interconnect=self.ref.Name()))

  def _MakeGetMacsecConfigRequestTuple(self):
    return (self._client.interconnects, 'GetMacsecConfig',
            self._messages.ComputeInterconnectsGetMacsecConfigRequest(
                project=self.ref.project, interconnect=self.ref.Name()))

  @property
  def _messages(self):
    return self._compute_client.messages

  def Create(
      self,
      description='',
      location=None,
      subzone=None,
      interconnect_type=None,
      requested_link_count=None,
      link_type=None,
      admin_enabled=False,
      noc_contact_email=None,
      customer_name=None,
      only_generate_request=False,
      remote_location=None,
      requested_features=None,
      resource_manager_tags=None,
  ):
    """Create an interconnect."""
    requests = [
        self._MakeCreateRequestTuple(
            description,
            location,
            subzone,
            interconnect_type,
            requested_link_count,
            link_type,
            admin_enabled,
            noc_contact_email,
            customer_name,
            remote_location,
            requested_features or [],
            resource_manager_tags,
        )
    ]
    if not only_generate_request:
      resources = self._compute_client.MakeRequests(requests)
      return resources[0]
    return requests

  def Delete(self, only_generate_request=False):
    requests = [self._MakeDeleteRequestTuple()]
    if not only_generate_request:
      return self._compute_client.MakeRequests(requests)
    return requests

  def Describe(self, only_generate_request=False):
    requests = [self._MakeDescribeRequestTuple()]
    if not only_generate_request:
      resources = self._compute_client.MakeRequests(requests)
      return resources[0]
    return requests

  def GetDiagnostics(self, only_generate_request=False):
    requests = [self._MakeGetDiagnosticsRequestTuple()]
    if not only_generate_request:
      resources = self._compute_client.MakeRequests(requests)
      return resources[0]
    return requests

  def GetMacsecConfig(self, only_generate_request=False):
    requests = [self._MakeGetMacsecConfigRequestTuple()]
    if not only_generate_request:
      resources = self._compute_client.MakeRequests(requests)
      return resources[0]
    return requests

  def GetApplicationAwarenessConfig(self, only_generate_request=False):
    # pylint: disable=missing-function-docstring
    requests = [self._MakeDescribeRequestTuple()]

    @dataclasses.dataclass(frozen=True)
    class AaiState:
      """Encapsulates application awareness enabled status and config.

      Attr:
        aai_enabled: indicates where AAI is enabled.
        aai_config: AAI policy.
      """

      aai_enabled: bool
      aai_config: self._messages.InterconnectApplicationAwareInterconnect

    if not only_generate_request:
      resources = self._compute_client.MakeRequests(requests)

      return AaiState(
          getattr(resources[0], 'aaiEnabled', None),
          getattr(resources[0], 'applicationAwareInterconnect', None),
      )
    return requests

  def Patch(
      self,
      description='',
      location=None,
      interconnect_type=None,
      requested_link_count=None,
      link_type=None,
      admin_enabled=False,
      noc_contact_email=None,
      only_generate_request=False,
      labels=None,
      label_fingerprint=None,
      macsec_enabled=None,
      macsec=None,
      aai_enabled=None,
      application_aware_interconnect=None,
      cleared_fields=None,
  ):
    """Patch an interconnect."""
    requests = [
        self._MakePatchRequestTuple(
            description,
            location,
            interconnect_type,
            requested_link_count,
            link_type,
            admin_enabled,
            noc_contact_email,
            labels,
            label_fingerprint,
            macsec_enabled,
            macsec,
            aai_enabled,
            application_aware_interconnect,
        )
    ]
    if not only_generate_request:
      with self._client.IncludeFields(cleared_fields):
        resources = self._compute_client.MakeRequests(requests)
      return resources[0]
    return requests