# Copyright 2019 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: inmemorychannels.messaging.knative.dev
 labels:
    eventing.knative.dev/release: devel
    knative.dev/crd-install: "true"
    messaging.knative.dev/subscribable: "true"
    duck.knative.dev/addressable: "true"
spec:
  group: messaging.knative.dev
  versions:
  - name: v1
    served: true
    storage: true
    subresources:
      status: {}
    schema:
      openAPIV3Schema:
        description: 'InMemoryChannel is a resource representing an in memory channel'
        type: object
        properties:
          spec:
            description: Spec defines the desired state of the Channel.
            type: object
            properties:
              delivery:
                description: DeliverySpec contains the default delivery spec for each subscription to this Channelable. Each subscription delivery spec, if any, overrides this global delivery spec.
                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
                x-kubernetes-preserve-unknown-fields: true # This is necessary to enable the experimental feature delivery-timeout
              subscribers:
                description: This is the list of subscriptions for this subscribable.
                type: array
                items:
                  type: object
                  properties:
                    delivery:
                      description: DeliverySpec contains options controlling the event delivery
                      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
                      x-kubernetes-preserve-unknown-fields: true # This is necessary to enable the experimental feature
                    generation:
                      description: Generation of the origin of the subscriber with uid:UID.
                      type: integer
                      format: int64
                    replyUri:
                      description: ReplyURI is the endpoint for the reply
                      type: string
                    subscriberUri:
                      description: SubscriberURI is the endpoint for the subscriber
                      type: string
                    uid:
                      description: UID is used to understand the origin of the subscriber.
                      type: string
          status:
            description: Status represents the current state of the Channel. This data may be out of date.
            type: object
            properties:
              address:
                type: object
                properties:
                  url:
                    type: string
              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
              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
              deadLetterChannel:
                description: DeadLetterChannel is a KReference and is set by the channel when it supports native error handling via a channel Failed messages are delivered here.
                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
              observedGeneration:
                description: ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.
                type: integer
                format: int64
              subscribers:
                description: This is the list of subscription's statuses for this channel.
                type: array
                items:
                  type: object
                  properties:
                    message:
                      description: A human readable message indicating details of Ready status.
                      type: string
                    observedGeneration:
                      description: Generation of the origin of the subscriber with uid:UID.
                      type: integer
                      format: int64
                    ready:
                      description: Status of the subscriber.
                      type: string
                    uid:
                      description: UID is used to understand the origin of the subscriber.
                      type: string
    additionalPrinterColumns:
    - name: URL
      type: string
      jsonPath: .status.address.url
    - 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:
    kind: InMemoryChannel
    plural: inmemorychannels
    singular: inmemorychannel
    categories:
    - all
    - knative
    - messaging
    - channel
    shortNames:
    - imc
  scope: Namespaced
