# 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: computerouters.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeRouter
    plural: computerouters
    shortNames:
    - gcpcomputerouter
    - gcpcomputerouters
    singular: computerouter
  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:
              bgp:
                description: BGP information specific to this router.
                properties:
                  advertiseMode:
                    description: 'User-specified flag to indicate which mode to use
                      for advertisement. Default value: "DEFAULT" Possible values:
                      ["DEFAULT", "CUSTOM"].'
                    type: string
                  advertisedGroups:
                    description: |-
                      User-specified list of prefix groups to advertise in custom mode.
                      This field can only be populated if advertiseMode is CUSTOM and
                      is advertised to all peers of the router. These groups will be
                      advertised in addition to any specified prefixes. Leave this field
                      blank to advertise no custom groups.

                      This enum field has the one valid value: ALL_SUBNETS.
                    items:
                      type: string
                    type: array
                  advertisedIpRanges:
                    description: |-
                      User-specified list of individual IP ranges to advertise in
                      custom mode. This field can only be populated if advertiseMode
                      is CUSTOM and is advertised to all peers of the router. These IP
                      ranges will be advertised in addition to any specified groups.
                      Leave this field blank to advertise no custom IP ranges.
                    items:
                      properties:
                        description:
                          description: User-specified description for the IP range.
                          type: string
                        range:
                          description: |-
                            The IP range to advertise. The value must be a
                            CIDR-formatted string.
                          type: string
                      required:
                      - range
                      type: object
                    type: array
                  asn:
                    description: |-
                      Local BGP Autonomous System Number (ASN). Must be an RFC6996
                      private ASN, either 16-bit or 32-bit. The value will be fixed for
                      this router resource. All VPN tunnels that link to this router
                      will have the same local ASN.
                    type: integer
                  keepaliveInterval:
                    description: |-
                      The interval in seconds between BGP keepalive messages that are sent
                      to the peer. Hold time is three times the interval at which keepalive
                      messages are sent, and the hold time is the maximum number of seconds
                      allowed to elapse between successive keepalive messages that BGP
                      receives from a peer.

                      BGP will use the smaller of either the local hold time value or the
                      peer's hold time value as the hold time for the BGP connection
                      between the two peers. If set, this value must be between 20 and 60.
                      The default is 20.
                    type: integer
                required:
                - asn
                type: object
              description:
                description: An optional description of this resource.
                type: string
              encryptedInterconnectRouter:
                description: |-
                  Immutable. Indicates if a router is dedicated for use with encrypted VLAN
                  attachments (interconnectAttachments).
                type: boolean
              networkRef:
                description: A reference to the network to which this router belongs.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeNetwork`
                      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
              region:
                description: Immutable. Region where the router 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
            required:
            - networkRef
            - region
            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
              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
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
