# Copyright 2020 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/v1
kind: CustomResourceDefinition
metadata:
  name: triggers.eventing.knative.dev
  labels:
    knative.dev/release: devel
    knative.dev/crd-install: "true"
spec:
  group: eventing.knative.dev
  versions:
  - &version
    name: v1alpha1
    served: false
    storage: false
    subresources:
      status: {}
    schema:
      openAPIV3Schema:
        type: object
        # this is a work around so we don't need to flush out the
        # schema for each version at this time
        #
        # see issue: https://github.com/knative/serving/issues/912
        x-kubernetes-preserve-unknown-fields: true
    additionalPrinterColumns:
    - name: Ready
      type: string
      jsonPath: ".status.conditions[?(@.type==\"Ready\")].status"
    - name: Reason
      type: string
      jsonPath: ".status.conditions[?(@.type==\"Ready\")].reason"
    - name: Broker
      type: string
      jsonPath: .spec.broker
    - name: Subscriber_URI
      type: string
      jsonPath: .status.subscriberUri
    - name: Age
      type: date
      jsonPath: .metadata.creationTimestamp
  - << : *version
    name: v1beta1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            required:
              - subscriber
            type: object
            properties:
              broker:
                type: string
                description: "Broker that this trigger receives events from. If not specified, will default to 'default'."
              filter:
                type: object
                properties:
                  attributes:
                    type: object
                    description: "Map of CloudEvents attributes used for filtering events. If not specified, will default to all events"
                    additionalProperties:
                      type: string
              subscriber:
                type: object
                description: "the destination that should receive events."
                properties:
                  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
                      namespace:
                        type: string
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                  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."
          status:
            type: object
            x-kubernetes-preserve-unknown-fields: true
  - << : *version
    name: v1
    served: true
    storage: false
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            required:
              - subscriber
              - broker
            type: object
            properties:
              broker:
                type: string
                description: "Broker that this trigger receives events from."
              filter:
                type: object
                properties:
                  attributes:
                    type: object
                    description: "Map of CloudEvents attributes used for filtering events. If not specified, will default to all events"
                    additionalProperties:
                      type: string
              subscriber:
                type: object
                description: "the destination that should receive events."
                properties:
                  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
                      namespace:
                        type: string
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                  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."
          status:
            type: object
            x-kubernetes-preserve-unknown-fields: true
  names:
    kind: Trigger
    plural: triggers
    singular: trigger
    categories:
    - all
    - knative
    - eventing
  scope: Namespaced
  conversion:
    strategy: Webhook
    webhook:
      conversionReviewVersions: ["v1", "v1beta1"]
      clientConfig:
        service:
          name: webhook
          namespace: mink-system
