# 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:
    eventing.knative.dev/release: devel
    knative.dev/crd-install: "true"
spec:
  group: eventing.knative.dev
  versions:
  - &version
    name: v1beta1
    served: true
    storage: false
    subresources:
      status: {}
    additionalPrinterColumns:
    - name: Broker
      type: string
      jsonPath: .spec.broker
    - name: Subscriber_URI
      type: string
      jsonPath: .status.subscriberUri
    - name: Age
      type: date
      jsonPath: .metadata.creationTimestamp
    - name: Ready
      type: string
      jsonPath: ".status.conditions[?(@.type==\"Ready\")].status"
    - name: Reason
      type: string
      jsonPath: ".status.conditions[?(@.type==\"Ready\")].reason"
    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.'
              delivery:
                description: 'Delivery contains the delivery spec for this specific trigger.'
                type: object
                properties:
                  backoffDelay:
                    description: 'BackoffDelay is the delay before retrying. More
                                      information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html
                                      - https://en.wikipedia.org/wiki/ISO_8601  For linear policy,
                                      backoff delay is backoffDelay*<numberOfRetries>. For
                                      exponential policy, backoff delay is backoffDelay*2^<numberOfRetries>.'
                    type: string
                  backoffPolicy:
                    description: ' BackoffPolicy is the retry backoff policy (linear,
                                      exponential).'
                    type: string
                  deadLetterSink:
                    description: 'DeadLetterSink is the sink receiving event that
                                      could not be sent to a destination.'
                    type: object
                    properties:
                      ref:
                        description: 'Ref points to an Addressable.'
                        type: object
                        properties:
                          apiVersion:
                            description: 'API version of the referent.'
                            type: string
                          kind:
                            description: 'Kind of the referent. More info:
                                                  https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                            type: string
                          name:
                            description: 'Name of the referent. More info:
                                                  https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                            type: string
                          namespace:
                            description: 'Namespace of the referent. More
                                                  info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
                                                  This is optional field, it gets defaulted
                                                  to the object holding it if left out.'
                            type: string
                      uri:
                        description: 'URI can be an absolute URL(non-empty
                                          scheme and non-empty host) pointing to the target
                                          or a relative URI. Relative URIs will be resolved
                                          using the base URI retrieved from Ref.'
                        type: string
                  retry:
                    description: 'Retry is the minimum number of retries the sender
                                      should attempt when sending an event before moving it
                                      to the dead letter sink.'
                    type: integer
                    format: int32
          status:
            type: object
            x-kubernetes-preserve-unknown-fields: true
  - << : *version
    name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        description: 'Trigger represents a request to have events delivered to a subscriber from a Broker''s event pool.'
        properties:
          spec:
            description: 'Spec defines the desired state of the Trigger.'
            required:
              - subscriber
              - broker
            type: object
            properties:
              broker:
                type: string
                description: 'Broker that this trigger receives events from.'
              filter:
                type: object
                description: 'Filter is the filter to apply against all events from
                    the Broker. Only events that pass this filter will be sent to
                    the Subscriber. If not specified, will default to allowing all
                    events.'
                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:
            description: 'Status represents the current state of the Trigger. This data may be out of date.'
            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: eventing-webhook
          namespace: knative-eventing
