#
# 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: apisixtlses.apisix.apache.org
spec:
  additionalPrinterColumns:
    - JSONPath: .spec.hosts
      name: SNIs
      type: string
    - JSONPath: .spec.secret.name
      name: Secret Name
      type: string
    - JSONPath: .spec.secret.namespace
      name: Secret Namespace
      type: string
    - JSONPath: .metadata.creationTimestamp
      name: Age
      type: date
  group: apisix.apache.org
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: apisixtlses
    singular: apisixtls
    kind: ApisixTls
    shortNames:
    - atls
  preserveUnknownFields: false
  validation:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          type: object
          required:
            - hosts
            - secret
          properties:
            hosts:
              type: array
              minItems: 1
              items:
                type: string
                pattern: "^\\*?[0-9a-zA-Z-.]+$"
            secret:
              type: object
              required:
                - name
                - namespace
              properties:
                name:
                  type: string
                  minLength: 1
                namespace:
                  type: string
                  minLength: 1
