# 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: bigtableinstances.bigtable.cnrm.cloud.google.com
spec:
  group: bigtable.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: BigtableInstance
    listKind: BigtableInstanceList
    plural: bigtableinstances
    shortNames:
    - gcpbigtableinstance
    - gcpbigtableinstances
    singular: bigtableinstance
  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:
        description: BigtableInstance is the Schema for the BigtableInstance API
        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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: BigtableInstanceSpec defines the desired state of BigtableInstance
            properties:
              cluster:
                description: A block of cluster configuration options. This can be
                  specified at least once.
                items:
                  properties:
                    autoscalingConfig:
                      description: A list of Autoscaling configurations. Only one
                        element is used and allowed.
                      properties:
                        cpuTarget:
                          description: The target CPU utilization for autoscaling.
                            Value must be between 10 and 80.
                          format: int64
                          type: integer
                        maxNodes:
                          description: The maximum number of nodes for autoscaling.
                          format: int64
                          type: integer
                        minNodes:
                          description: The minimum number of nodes for autoscaling.
                          format: int64
                          type: integer
                        storageTarget:
                          description: The target storage utilization for autoscaling,
                            in GB, for each node in a cluster. This number is limited
                            between 2560 (2.5TiB) and 5120 (5TiB) for a SSD cluster
                            and between 8192 (8TiB) and 16384 (16 TiB) for an HDD
                            cluster. If not set, whatever is already set for the cluster
                            will not change, or if the cluster is just being created,
                            it will use the default value of 2560 for SSD clusters
                            and 8192 for HDD clusters.
                          format: int64
                          type: integer
                      required:
                      - cpuTarget
                      - maxNodes
                      - minNodes
                      type: object
                    clusterId:
                      description: The ID of the Cloud Bigtable cluster. Must be 6-30
                        characters and must only contain hyphens, lowercase letters
                        and numbers.
                      type: string
                    kmsKeyRef:
                      description: |-
                        Describes the Cloud KMS encryption key that will be used to protect the destination Bigtable
                        cluster. The requirements for this key are:

                        1) The Cloud Bigtable service account associated with the project that contains
                        this cluster must be granted the cloudkms.cryptoKeyEncrypterDecrypter role on the CMEK key.
                        2) Only regional keys can be used and the region of the CMEK key must match the region of the cluster.
                        3) All clusters within an instance must use the same CMEK key access to this encryption key.
                      oneOf:
                      - not:
                          required:
                          - external
                        required:
                        - name
                      - not:
                          anyOf:
                          - required:
                            - name
                          - required:
                            - namespace
                        required:
                        - external
                      properties:
                        external:
                          description: A reference to an externally managed KMSCryptoKey.
                            Should be in the format `projects/[kms_project_id]/locations/[region]/keyRings/[key_ring_id]/cryptoKeys/[key]`.
                          type: string
                        name:
                          description: The `name` of a `KMSCryptoKey` resource.
                          type: string
                        namespace:
                          description: The `namespace` of a `KMSCryptoKey` resource.
                          type: string
                      type: object
                    numNodes:
                      description: The number of nodes in the cluster. If no value
                        is set, Cloud Bigtable automatically allocates nodes based
                        on your data footprint and optimized for 50% storage utilization.
                      format: int64
                      type: integer
                    storageType:
                      description: The storage type to use. One of "SSD" or "HDD".
                        Defaults to "SSD".
                      type: string
                    zone:
                      description: The zone to create the Cloud Bigtable cluster in.
                        Each cluster must have a different zone in the same region.
                        Zones that support Bigtable instances are noted on the Cloud
                        Bigtable locations page.
                      type: string
                  required:
                  - clusterId
                  - zone
                  type: object
                type: array
              deletionProtection:
                description: DEPRECATED. This field no longer serves any function
                  and is intended to be dropped in a later version of the resource.
                type: boolean
              displayName:
                description: Required. The descriptive name for this instance as it
                  appears in UIs. Can be changed at any time, but should be kept globally
                  unique to avoid confusion.
                type: string
              instanceType:
                description: DEPRECATED. It is recommended to leave this field unspecified
                  since the distinction between "DEVELOPMENT" and "PRODUCTION" instances
                  is going away, and all instances will become "PRODUCTION" instances.
                  This means that new and existing "DEVELOPMENT" instances will be
                  converted to "PRODUCTION" instances. It is recommended for users
                  to use "PRODUCTION" instances in any case, since a 1-node "PRODUCTION"
                  instance is functionally identical to a "DEVELOPMENT" instance,
                  but without the accompanying restrictions. The instance type to
                  create. One of "DEVELOPMENT" or "PRODUCTION". Defaults to "PRODUCTION".
                type: string
              resourceID:
                description: The Instance name. If not given, the metadata.name will
                  be used.
                type: string
            type: object
          status:
            description: BigtableInstanceStatus defines the config connector machine
              state of BigtableInstance
            properties:
              conditions:
                description: Conditions represent the latest available observations
                  of the object'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
              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.
                format: int64
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
