# 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:
  labels:
    knative.dev/release: devel
    eventing.knative.dev/source: "true"
    duck.knative.dev/source: "true"
    duck.knative.dev/binding: "true"
    knative.dev/crd-install: "true"
    app.kubernetes.io/version: devel
    app.kubernetes.io/name: mink-system
  name: sinkbindings.sources.knative.dev
spec:
  group: sources.knative.dev
  versions:
    - name: v1
      served: true
      storage: true
      subresources:
        status: {}
      schema:
        openAPIV3Schema:
          description: 'SinkBinding describes a Binding that is also a Source.
              The `sink` (from the Source duck) is resolved to a URL and
              then projected into the `subject` by augmenting the runtime
              contract of the referenced containers to have a `K_SINK`
              environment variable holding the endpoint to which to send
              cloud events.'
          type: object
          properties:
            spec:
              type: object
              properties:
                ceOverrides:
                  description: CloudEventOverrides defines overrides to control the output format and modifications of the event sent to the sink.
                  type: object
                  properties:
                    extensions:
                      description: Extensions specify what attribute are added or overridden on the outbound event. Each `Extensions` key-value pair are set on the event as an attribute extension independently.
                      type: object
                      x-kubernetes-preserve-unknown-fields: true
                sink:
                  description: Sink is a reference to an object that will resolve to a uri to use as the sink.
                  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
                subject:
                  description: Subject references the resource(s) whose "runtime contract" should be augmented by Binding implementations.
                  type: object
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    kind:
                      description: Kind of the referent.
                      type: string
                    name:
                      description: Name of the referent. Mutually exclusive with Selector.
                      type: string
                    namespace:
                      description: Namespace of the referent.
                      type: string
                    selector:
                      description: Selector of the referents. Mutually exclusive with Name.
                      type: object
                      properties:
                        matchExpressions:
                          description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                description: key is the label key that the selector applies to.
                                type: string
                              operator:
                                description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                type: string
                              values:
                                description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                type: array
                                items:
                                  type: string
                        matchLabels:
                          description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
            status:
              type: object
              properties:
                annotations:
                  description: Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                ceAttributes:
                  description: CloudEventAttributes are the specific attributes that the Source uses as part of its CloudEvents.
                  type: array
                  items:
                    type: object
                    properties:
                      source:
                        description: Source is the CloudEvents source attribute.
                        type: string
                      type:
                        description: Type refers to the CloudEvent type attribute.
                        type: string
                conditions:
                  description: Conditions the latest available observations of a resource's current state.
                  type: array
                  items:
                    type: object
                    required:
                      - type
                      - status
                    properties:
                      lastTransitionTime:
                        description: LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).
                        type: string
                      message:
                        description: A human readable message indicating details about the transition.
                        type: string
                      reason:
                        description: The reason for the condition's last transition.
                        type: string
                      severity:
                        description: Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of condition.
                        type: string
                observedGeneration:
                  description: ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.
                  type: integer
                  format: int64
                sinkUri:
                  description: SinkURI is the current active sink URI that has been configured for the Source.
                  type: string
      additionalPrinterColumns:
        - name: Sink
          type: string
          jsonPath: ".status.sinkUri"
        - 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"
  names:
    categories:
      - all
      - knative
      - sources
      - bindings
    kind: SinkBinding
    plural: sinkbindings
    singular: sinkbinding
  scope: Namespaced
