apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # 名字必需与下面的 spec 字段匹配，并且格式为 '<名称的复数形式>.<组名>'
  name: cicd.api.myit.fun
spec:
  # 分组名，在REST API中也会用到的，格式是: /apis/分组名/CRD版本
  group: api.myit.fun
  # 列举此 CustomResourceDefinition 所支持的版本
  versions:
    - name: v1
      # 是否有效
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
                  default: 2
                dsn:
                  type: string
                  default: "mysql_dsn"
                test:
                  type: string
                  # 1.20 版本新增: 对于未设置其 nullable 标志的字段或者将该标志设置为 false 的字段，其空值（Null）会在设置默认值之前被剪裁掉。
                  # 如果对应字段 存在默认值，则默认值会被赋予该字段。当 nullable 被设置为 true 时， 字段的空值会被保留，且不会在设置默认值时被覆盖。
                  nullable: false
            status:
              type: object
              properties:
                replicas:
                  type: integer
                ready:
                  type: string
      # subresources 描述定制资源的子资源
      subresources:
        # status 启用 status 子资源
        status: { }
        # scale 启用 scale 子资源
        scale:
          # specReplicasPath 定义定制资源中对应 scale.spec.replicas 的 JSON 路径
          specReplicasPath: .spec.replicas
          # statusReplicasPath 定义定制资源中对应 scale.status.replicas 的 JSON 路径
          statusReplicasPath: .status.replicas
          # labelSelectorPath  定义定制资源中对应 scale.status.selector 的 JSON 路径
          labelSelectorPath: .status.labelSelector
      # 额外打印列（执行kubectl get < resource > 命令时候显示的列）
      additionalPrinterColumns:
        #        - name: Spec
        #          type: string
        #          description: The cron spec defining the interval a dbconfig is run
        #          jsonPath: .spec.cronSpec
        - name: READY
          type: string
          description: The number of jobs exact by the dbconfig
          jsonPath: .status.ready
        - name: EXPECTERD
          type: integer
          description: The number of jobs expected by the dbconfig
          jsonPath: .spec.replicas
        - name: AVAILABLE
          type: integer
          description: The number of jobs available by the dbconfig
          jsonPath: .status.replicas
        - name: Age
          type: date
          jsonPath: .metadata.creationTimestamp

  # 范围是属于namespace的 ,可以是 Namespaced 或 Cluster
  scope: Namespaced
  names:
    # 复数名
    plural: dbconfigs
    # 单数名
    singular: dbconfig
    # 类型名
    kind: DbConfig
    listKind: DbConfigList
    # kind的简称，就像service的简称是svc
    shortNames:
      - dc