# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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/v1beta1
kind: CustomResourceDefinition
metadata:
  name: brokers.rocketmq.apache.org
spec:
  group: rocketmq.apache.org
  names:
    kind: Broker
    listKind: BrokerList
    plural: brokers
    singular: broker
  scope: Namespaced
  subresources:
    status: {}
  validation:
    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:
            allowRestart:
              description: AllowRestart defines whether allow pod restart
              type: boolean
            brokerImage:
              description: BaseImage is the broker image to use for the Pods
              type: string
            hostPath:
              description: HostPath is the local path to store data
              type: string
            imagePullPolicy:
              description: ImagePullPolicy defines how the image is pulled
              type: string
            nameServers:
              description: NameServers defines the name service list e.g. 192.168.1.1:9876;192.168.1.2:9876
              type: string
            replicaPerGroup:
              description: ReplicaPerGroup each broker cluster's replica number
              format: int64
              type: integer
            resources:
              description: Resources describes the compute resource requirements
              type: object
            scalePodName:
              description: The name of pod where the metadata from
              type: string
            size:
              description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
                Important: Run "operator-sdk generate k8s" to regenerate code after
                modifying this file Add custom validation using kubebuilder tags:
                https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
              format: int64
              type: integer
            storageMode:
              description: StorageMode can be EmptyDir, HostPath, StorageClass
              type: string
            env:
              description: env defines custom env, e.g. BROKER_MEM
              items:
                type: object
              type: array
            volumes:
              description: volumes defines the broker.conf
              items:
                type: object
              type: array
            volumeClaimTemplates:
              description: VolumeClaimTemplates defines the StorageClass
              items:
                type: object
              type: array
          required:
          - size
          - replicaPerGroup
          - brokerImage
          - imagePullPolicy
          - nameServers
          - allowRestart
          - resources
          - storageMode
          - hostPath
          - env
          - volumes
          - volumeClaimTemplates
          - scalePodName
          type: object
        status:
          properties:
            nodes:
              description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
                of cluster Important: Run "operator-sdk generate k8s" to regenerate
                code after modifying this file Add custom validation using kubebuilder
                tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
              items:
                type: string
              type: array
            size:
              format: int64
              type: integer
          required:
          - nodes
          - size
          type: object
  version: v1alpha1
  versions:
  - name: v1alpha1
    served: true
    storage: true
