# 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: computevpntunnels.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeVPNTunnel
    plural: computevpntunnels
    shortNames:
    - gcpcomputevpntunnel
    - gcpcomputevpntunnels
    singular: computevpntunnel
  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:
              description:
                description: Immutable. An optional description of this resource.
                type: string
              ikeVersion:
                description: |-
                  Immutable. IKE protocol version to use when establishing the VPN tunnel with
                  peer VPN gateway.
                  Acceptable IKE versions are 1 or 2. Default version is 2.
                type: integer
              localTrafficSelector:
                description: |-
                  Immutable. Local traffic selector to use when establishing the VPN tunnel with
                  peer VPN gateway. The value should be a CIDR formatted string,
                  for example '192.168.0.0/16'. The ranges should be disjoint.
                  Only IPv4 is supported.
                items:
                  type: string
                type: array
              peerExternalGatewayInterface:
                description: Immutable. The interface ID of the external VPN gateway
                  to which this VPN tunnel is connected.
                type: integer
              peerExternalGatewayRef:
                description: |-
                  The peer side external VPN gateway to which this VPN tunnel
                  is connected.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeExternalVPNGateway`
                      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
              peerGCPGatewayRef:
                description: |-
                  The peer side HA GCP VPN gateway to which this VPN tunnel is
                  connected. If provided, the VPN tunnel will automatically use the
                  same VPN gateway interface ID in the peer GCP VPN gateway.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeVPNGateway`
                      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
              peerIp:
                description: Immutable. IP address of the peer VPN gateway. Only IPv4
                  is supported.
                type: string
              region:
                description: Immutable. The region where the tunnel is located. If
                  unset, is set to the region of 'target_vpn_gateway'.
                type: string
              remoteTrafficSelector:
                description: |-
                  Immutable. Remote traffic selector to use when establishing the VPN tunnel with
                  peer VPN gateway. The value should be a CIDR formatted string,
                  for example '192.168.0.0/16'. The ranges should be disjoint.
                  Only IPv4 is supported.
                items:
                  type: string
                type: array
              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 router to be used for dynamic routing.
                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
              sharedSecret:
                description: |-
                  Immutable. Shared secret used to set the secure session between the Cloud VPN
                  gateway and the peer VPN gateway.
                oneOf:
                - not:
                    required:
                    - valueFrom
                  required:
                  - value
                - not:
                    required:
                    - value
                  required:
                  - valueFrom
                properties:
                  value:
                    description: Value of the field. Cannot be used if 'valueFrom'
                      is specified.
                    type: string
                  valueFrom:
                    description: Source for the field's value. Cannot be used if 'value'
                      is specified.
                    properties:
                      secretKeyRef:
                        description: Reference to a value with the given key in the
                          given Secret in the resource's namespace.
                        properties:
                          key:
                            description: Key that identifies the value to be extracted.
                            type: string
                          name:
                            description: Name of the Secret to extract a value from.
                            type: string
                        required:
                        - name
                        - key
                        type: object
                    type: object
                type: object
              targetVPNGatewayRef:
                description: |-
                  The ComputeTargetVPNGateway with which this VPN tunnel is
                  associated.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeTargetVPNGateway`
                      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
              vpnGatewayInterface:
                description: Immutable. The interface ID of the VPN gateway with which
                  this VPN tunnel is associated.
                type: integer
              vpnGatewayRef:
                description: |-
                  The ComputeVPNGateway with which this VPN tunnel is associated.
                  This must be used if a High Availability VPN gateway resource is
                  created.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeVPNGateway`
                      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
            required:
            - region
            - sharedSecret
            type: object
          status:
            properties:
              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
              detailedStatus:
                description: Detailed status message for the VPN tunnel.
                type: string
              labelFingerprint:
                description: |-
                  The fingerprint used for optimistic locking of this resource.  Used
                  internally during updates.
                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
              selfLink:
                type: string
              sharedSecretHash:
                description: Hash of the shared secret.
                type: string
              tunnelId:
                description: The unique identifier for the resource. This identifier
                  is defined by the server.
                type: string
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
