# Copyright 2025 Google LLC
#
# 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.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cnrm.cloud.google.com/version: 1.128.0
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/stability-level: stable
    cnrm.cloud.google.com/system: "true"
    cnrm.cloud.google.com/tf2crd: "true"
  name: computeinterconnectattachments.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeInterconnectAttachment
    plural: computeinterconnectattachments
    shortNames:
    - gcpcomputeinterconnectattachment
    - gcpcomputeinterconnectattachments
    singular: computeinterconnectattachment
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: When 'True', the most recent reconcile of the resource succeeded
      jsonPath: .status.conditions[?(@.type=='Ready')].status
      name: Ready
      type: string
    - description: The reason for the value in 'Ready'
      jsonPath: .status.conditions[?(@.type=='Ready')].reason
      name: Status
      type: string
    - description: The last transition time for the value in 'Status'
      jsonPath: .status.conditions[?(@.type=='Ready')].lastTransitionTime
      name: Status Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        properties:
          apiVersion:
            description: 'apiVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
            type: string
          kind:
            description: 'kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            properties:
              adminEnabled:
                description: |-
                  Whether the VLAN attachment is enabled or disabled.  When using
                  PARTNER type this will Pre-Activate the interconnect attachment.
                type: boolean
              bandwidth:
                description: |-
                  Provisioned bandwidth capacity for the interconnect attachment.
                  For attachments of type DEDICATED, the user can set the bandwidth.
                  For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.
                  Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,
                  Defaults to BPS_10G Possible values: ["BPS_50M", "BPS_100M", "BPS_200M", "BPS_300M", "BPS_400M", "BPS_500M", "BPS_1G", "BPS_2G", "BPS_5G", "BPS_10G", "BPS_20G", "BPS_50G"].
                type: string
              candidateSubnets:
                description: |-
                  Immutable. Up to 16 candidate prefixes that can be used to restrict the allocation
                  of cloudRouterIpAddress and customerRouterIpAddress for this attachment.
                  All prefixes must be within link-local address space (169.254.0.0/16)
                  and must be /29 or shorter (/28, /27, etc). Google will attempt to select
                  an unused /29 from the supplied candidate prefix(es). The request will
                  fail if all possible /29s are in use on Google's edge. If not supplied,
                  Google will randomly select an unused /29 from all of link-local space.
                items:
                  type: string
                type: array
              description:
                description: An optional description of this resource.
                type: string
              edgeAvailabilityDomain:
                description: |-
                  Immutable. Desired availability domain for the attachment. Only available for type
                  PARTNER, at creation time. For improved reliability, customers should
                  configure a pair of attachments with one per availability domain. The
                  selected availability domain will be provided to the Partner via the
                  pairing key so that the provisioned circuit will lie in the specified
                  domain. If not specified, the value will default to AVAILABILITY_DOMAIN_ANY.
                type: string
              encryption:
                description: |-
                  Immutable. Indicates the user-supplied encryption option of this interconnect
                  attachment. Can only be specified at attachment creation for PARTNER or
                  DEDICATED attachments.

                  * NONE - This is the default value, which means that the VLAN attachment
                  carries unencrypted traffic. VMs are able to send traffic to, or receive
                  traffic from, such a VLAN attachment.

                  * IPSEC - The VLAN attachment carries only encrypted traffic that is
                  encrypted by an IPsec device, such as an HA VPN gateway or third-party
                  IPsec VPN. VMs cannot directly send traffic to, or receive traffic from,
                  such a VLAN attachment. To use HA VPN over Cloud Interconnect, the VLAN
                  attachment must be created with this option. Default value: "NONE" Possible values: ["NONE", "IPSEC"].
                type: string
              interconnect:
                description: |-
                  Immutable. URL of the underlying Interconnect object that this attachment's
                  traffic will traverse through. Required if type is DEDICATED, must not
                  be set if type is PARTNER.
                type: string
              ipsecInternalAddresses:
                items:
                  description: |-
                    Immutable. The addresses that have been reserved for the
                    interconnect attachment. Used only for interconnect attachment that
                    has the encryption option as IPSEC.

                    The addresses must be RFC 1918 IP address ranges. When creating HA
                    VPN gateway over the interconnect attachment, if the attachment is
                    configured to use an RFC 1918 IP address, then the VPN gateway's IP
                    address will be allocated from the IP address range specified
                    here.

                    For example, if the HA VPN gateway's interface 0 is paired to this
                    interconnect attachment, then an RFC 1918 IP address for the VPN
                    gateway interface 0 will be allocated from the IP address specified
                    for this interconnect attachment.

                    If this field is not specified for interconnect attachment that has
                    encryption option as IPSEC, later on when creating HA VPN gateway on
                    this interconnect attachment, the HA VPN gateway's IP address will
                    be allocated from regional external IP address pool.
                  oneOf:
                  - not:
                      required:
                      - external
                    required:
                    - name
                  - not:
                      anyOf:
                      - required:
                        - name
                      - required:
                        - namespace
                    required:
                    - external
                  properties:
                    external:
                      description: 'Allowed value: The `selfLink` field of a `ComputeAddress`
                        resource.'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                  type: object
                type: array
              mtu:
                description: |-
                  Maximum Transmission Unit (MTU), in bytes, of packets passing through
                  this interconnect attachment. Currently, only 1440 and 1500 are allowed. If not specified, the value will default to 1440.
                type: string
              region:
                description: Region where the regional interconnect attachment resides.
                type: string
              resourceID:
                description: Immutable. Optional. The name of the resource. Used for
                  creation and acquisition. When unset, the value of `metadata.name`
                  is used as the default.
                type: string
              routerRef:
                description: |-
                  The Cloud Router to be used for dynamic routing. This router must
                  be in the same region as this ComputeInterconnectAttachment. The
                  ComputeInterconnectAttachment will automatically connect the
                  interconnect to the network & region within which the Cloud Router
                  is configured.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeRouter`
                      resource.'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                type: object
              type:
                description: |-
                  Immutable. The type of InterconnectAttachment you wish to create. Defaults to
                  DEDICATED. Possible values: ["DEDICATED", "PARTNER", "PARTNER_PROVIDER"].
                type: string
              vlanTag8021q:
                description: |-
                  Immutable. The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094. When
                  using PARTNER type this will be managed upstream.
                type: integer
            required:
            - region
            - routerRef
            type: object
          status:
            properties:
              cloudRouterIpAddress:
                description: |-
                  IPv4 address + prefix length to be configured on Cloud Router
                  Interface for this interconnect attachment.
                type: string
              conditions:
                description: Conditions represent the latest available observation
                  of the resource's current state.
                items:
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        last transition.
                      type: string
                    reason:
                      description: Unique, one-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: Status is the status of the condition. Can be True,
                        False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the condition.
                      type: string
                  type: object
                type: array
              creationTimestamp:
                description: Creation timestamp in RFC3339 text format.
                type: string
              customerRouterIpAddress:
                description: |-
                  IPv4 address + prefix length to be configured on the customer
                  router subinterface for this interconnect attachment.
                type: string
              googleReferenceId:
                description: |-
                  Google reference ID, to be used when raising support tickets with
                  Google or otherwise to debug backend connectivity issues.
                type: string
              observedGeneration:
                description: ObservedGeneration is the generation of the resource
                  that was most recently observed by the Config Connector controller.
                  If this is equal to metadata.generation, then that means that the
                  current reported status reflects the most recent desired state of
                  the resource.
                type: integer
              pairingKey:
                description: |-
                  [Output only for type PARTNER. Not present for DEDICATED]. The opaque
                  identifier of an PARTNER attachment used to initiate provisioning with
                  a selected partner. Of the form "XXXXX/region/domain".
                type: string
              partnerAsn:
                description: |-
                  [Output only for type PARTNER. Not present for DEDICATED]. Optional
                  BGP ASN for the router that should be supplied by a layer 3 Partner if
                  they configured BGP on behalf of the customer.
                type: string
              privateInterconnectInfo:
                description: |-
                  Information specific to an InterconnectAttachment. This property
                  is populated if the interconnect that this is attached to is of type DEDICATED.
                properties:
                  tag8021q:
                    description: |-
                      802.1q encapsulation tag to be used for traffic between
                      Google and the customer, going to and from this network and region.
                    type: integer
                type: object
              selfLink:
                type: string
              state:
                description: '[Output Only] The current state of this attachment''s
                  functionality.'
                type: string
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
