# Custom Resource Definition (CRD) for SMI's http route group specification.
#
# Copyright SMI SDK for Go authors
#
#    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:
  name: httproutegroups.specs.smi-spec.io
spec:
  group: specs.smi-spec.io
  scope: Namespaced
  names:
    kind: HTTPRouteGroup
    shortNames:
      - htr
    plural: httproutegroups
    singular: httproutegroup
  versions:
    - name: v1alpha4
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              required:
                - matches
              properties:
                matches:
                  description: Match conditions of this route group.
                  type: array
                  items:
                    type: object
                    required:
                      - name
                    properties:
                      name:
                        description: Name of the HTTP route.
                        type: string
                      pathRegex:
                        description: URI path regex of the HTTP route.
                        type: string
                      methods:
                        description: The HTTP methods of this HTTP route.
                        type: array
                        items:
                          type: string
                          description: The HTTP method of this HTTP route.
                          enum:
                            - '*'
                            - GET
                            - HEAD
                            - PUT
                            - POST
                            - DELETE
                            - CONNECT
                            - OPTIONS
                            - TRACE
                            - PATCH
                      headers:
                        description: Header match conditions of this route.
                        type: array
                        items:
                          description: Header match condition of this route.
                          type: object
                          additionalProperties:
                            type: string
    - name: v1alpha3
      served: false
      storage: false
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              required:
                - matches
              properties:
                matches:
                  description: Match conditions of this route group.
                  type: array
                  items:
                    type: object
                    required:
                      - name
                    properties:
                      name:
                        description: Name of the HTTP route.
                        type: string
                      pathRegex:
                        description: URI path regex of the HTTP route.
                        type: string
                      methods:
                        description: The HTTP methods of this HTTP route.
                        type: array
                        items:
                          type: string
                          description: The HTTP method of this HTTP route.
                          enum:
                            - '*'
                            - GET
                            - HEAD
                            - PUT
                            - POST
                            - DELETE
                            - CONNECT
                            - OPTIONS
                            - TRACE
                            - PATCH
                      headers:
                        description: Header match conditions of this route.
                        type: array
                        items:
                          description: Header match condition of this route.
                          type: object
                          additionalProperties:
                            type: string
    - name: v1alpha2
      served: false
      storage: false
      schema:
        openAPIV3Schema:
          type: object
          required:
            - matches
          properties:
            matches:
              description: Match conditions of this route group.
              type: array
              items:
                type: object
                required:
                  - name
                properties:
                  name:
                    description: Name of the HTTP route.
                    type: string
                  pathRegex:
                    description: URI path regex of the HTTP route.
                    type: string
                  methods:
                    description: The HTTP methods of this HTTP route.
                    type: array
                    items:
                      type: string
                      description: The HTTP method of this HTTP route.
                      enum:
                        - '*'
                        - GET
                        - HEAD
                        - PUT
                        - POST
                        - DELETE
                        - CONNECT
                        - OPTIONS
                        - TRACE
                        - PATCH
                  headers:
                    description: Header match conditions of this route.
                    type: array
                    items:
                      description: Header match condition of this route.
                      type: object
                      additionalProperties:
                        type: string
    - name: v1alpha1
      served: false
      storage: false
      schema:
        openAPIV3Schema:
          type: object
          required:
            - matches
          properties:
            matches:
              description: Match conditions of this route group.
              type: array
              items:
                type: object
                required:
                  - name
                properties:
                  name:
                    description: Name of the HTTP route.
                    type: string
                  pathRegex:
                    description: URI path regex of the HTTP route.
                    type: string
                  methods:
                    description: The HTTP methods of this HTTP route.
                    type: array
                    items:
                      type: string
                      description: The HTTP method of this HTTP route.
                      enum:
                        - '*'
                        - GET
                        - HEAD
                        - PUT
                        - POST
                        - DELETE
                        - CONNECT
                        - OPTIONS
                        - TRACE
                        - PATCH
                  headers:
                    description: Header match conditions of this route.
                    type: array
                    items:
                      description: Header match condition of this route.
                      type: object
                      additionalProperties:
                        type: string
