# Copyright 2018 The Knative 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/v1beta1
kind: CustomResourceDefinition
metadata:
  name: subscriptions.messaging.knative.dev
  labels:
    eventing.knative.dev/release: devel
    knative.dev/crd-install: "true"
spec:
  group: messaging.knative.dev
  preserveUnknownFields: false
  names:
    kind: Subscription
    plural: subscriptions
    singular: subscription
    categories:
    - all
    - knative
    - eventing
    shortNames:
    - sub
  scope: Namespaced
  subresources:
    status: {}
  conversion:
    strategy: None
#    strategy: Webhook
#    webhookClientConfig:
#      service:
#        name: eventing-webhook
#        namespace: knative-eventing
  additionalPrinterColumns:
    - name: Ready
      type: string
      JSONPath: ".status.conditions[?(@.type==\"Ready\")].status"
    - name: Reason
      type: string
      JSONPath: ".status.conditions[?(@.type==\"Ready\")].reason"
    - name: Age
      type: date
      JSONPath: .metadata.creationTimestamp
  validation:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          required:
            - channel
          type: object
          properties:
            channel:
              type: object
              description: "Channel that forwards incoming events to the subscription."
              required:
                - apiVersion
                - kind
                - name
              properties:
                apiVersion:
                  type: string
                  minLength: 1
                kind:
                  type: string
                name:
                  type: string
                  minLength: 1
            subscriber:
              type: object
              description: "the subscriber that (optionally) processes events."
              properties:
                uri:
                  type: string
                  description: "the target URI or, if ref is provided, a relative URI reference that will be combined with ref to produce a target URI."
                  minLength: 1
                ref:
                  type: object
                  description: "a reference to a Kubernetes object from which to retrieve the target URI."
                  required:
                    - apiVersion
                    - kind
                    - name
                  properties:
                    apiVersion:
                      type: string
                      minLength: 1
                    kind:
                      type: string
                      minLength: 1
                    name:
                      type: string
                      minLength: 1
                    namespace:
                      type: string
                      minLength: 1
            reply:
              type: object
              description: "the destination that (optionally) receive events."
              properties:
                uri:
                  type: string
                  description: "the target URI or, if ref is provided, a relative URI reference that will be combined with ref to produce a target URI."
                  minLength: 1
                ref:
                  type: object
                  description: "a reference to a Kubernetes object from which to retrieve the target URI."
                  required:
                    - apiVersion
                    - kind
                    - name
                  properties:
                    apiVersion:
                      type: string
                      minLength: 1
                    kind:
                      type: string
                      minLength: 1
                    name:
                      type: string
                      minLength: 1
                    namespace:
                      type: string
                      minLength: 1
            delivery:
              description: "Subscription delivery options. More information: https://knative.dev/docs/eventing/event-delivery."
              type: object
              x-kubernetes-preserve-unknown-fields: true
        status:
          type: object
          x-kubernetes-preserve-unknown-fields: true
  versions:
  - name: v1alpha1
    served: true
    storage: true
  - name: v1beta1
    served: true
    storage: false
