# 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:
    eventing.knative.dev/release: devel
    eventing.knative.dev/source: "true"
    duck.knative.dev/source: "true"
    knative.dev/crd-install: "true"
    app.kubernetes.io/version: devel
    app.kubernetes.io/name: knative-eventing
  name: containersources.sources.knative.dev
spec:
  group: sources.knative.dev
  versions:
    - name: v1
      served: true
      storage: true
      subresources:
        status: {}
      schema:
        openAPIV3Schema:
          description: 'ContainerSource is an event source that starts a container image which generates events under certain situations and sends messages to a sink URI'
          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
                # WARNING: the schema tool can not parse PodTemplateSpec, stub here and redirect to Deployment documentation.
                template:
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                  description: 'A template in the shape of `Deployment.spec.template` to be used for this ContainerSource. More info: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/'
            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
    kind: ContainerSource
    plural: containersources
    singular: containersource
  scope: Namespaced
