# Copyright 2022 TriggerMesh Inc.
#
# 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: awseventbridgetargets.targets.triggermesh.io
  labels:
    knative.dev/crd-install: 'true'
    triggermesh.io/crd-install: 'true'
    duck.knative.dev/addressable: 'true'
  annotations:
    registry.triggermesh.io/acceptedEventTypes: |
      [
        { "type": "*" }
      ]
    registry.knative.dev/eventTypes: |
      [
        { "type": "io.triggermesh.targets.aws.eventbridge.result" }
      ]
spec:
  group: targets.triggermesh.io
  names:
    kind: AWSEventBridgeTarget
    plural: awseventbridgetargets
    categories:
    - all
    - knative
    - eventing
    - targets
  scope: Namespaced
  versions:
  - name: v1alpha1
    served: true
    storage: true
    subresources:
      status: {}
    schema:
      openAPIV3Schema:
        type: object
        description: TriggerMesh event target for AWS EventBridge Service.
        properties:
          spec:
            description: Desired state of event target.
            type: object
            properties:
              awsApiKey:
                description: API Key to interact with the Amazon EventBridge API. For more information about AWS security
                  credentials, please refer to the AWS General Reference at https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
                type: object
                properties:
                  secretKeyRef:
                    description: A reference to a Kubernetes Secret object containing the access key ID.
                    type: object
                    properties:
                      key:
                        type: string
                      name:
                        type: string
              awsApiSecret:
                description: API Secret to interact with the Amazon EventBridge API. For more information about AWS security
                  credentials, please refer to the AWS General Reference at https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
                type: object
                properties:
                  secretKeyRef:
                    description: A reference to a Kubernetes Secret object containing the secret access key.
                    type: object
                    properties:
                      key:
                        type: string
                      name:
                        type: string
              arn:
                description: ARN of the Event Bus that will receive events. The expected format is documented at https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridge.html
                type: string
                pattern: ^arn:aws(-cn|-us-gov)?:events:[a-z]{2}(-gov)?-[a-z]+-\d:\d{12}:event-bus\/.+$
              discardCloudEventContext:
                description: Whether to omit CloudEvent context attributes in messages sent to EventBridge. When this property
                  is false (default), the entire CloudEvent payload is included. When this property is true, only the CloudEvent
                  data is included.
                type: boolean
              adapterOverrides:
                description: Kubernetes object parameters to apply on top of default adapter values.
                type: object
                properties:
                  public:
                    description: Adapter visibility scope.
                    type: boolean
                  resources:
                    description: Compute Resources required by the adapter. More info at https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                    type: object
                    properties:
                      limits:
                        additionalProperties:
                          anyOf:
                          - type: integer
                          - type: string
                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                          x-kubernetes-int-or-string: true
                        description: Limits describes the maximum amount of compute resources allowed. More info at https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                        type: object
                      requests:
                        additionalProperties:
                          anyOf:
                          - type: integer
                          - type: string
                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                          x-kubernetes-int-or-string: true
                        description: Requests describes the minimum amount of compute resources required. If Requests is omitted
                          for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined
                          value. More info at https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                        type: object
                  tolerations:
                    description: Pod tolerations, as documented at https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          description: Taint key that the toleration applies to.
                          type: string
                        operator:
                          description: Key's relationship to the value.
                          type: string
                          enum: [Exists, Equal]
                        value:
                          description: Taint value the toleration matches to.
                          type: string
                        effect:
                          description: Taint effect to match.
                          type: string
                          enum: [NoSchedule, PreferNoSchedule, NoExecute]
                        tolerationSeconds:
                          description: Period of time a toleration of effect NoExecute tolerates the taint.
                          type: integer
                          format: int64
            required:
            - arn
            - awsApiSecret
            - awsApiKey
          status:
            type: object
            description: Reported status of the event target.
            properties:
              observedGeneration:
                type: integer
                format: int64
              conditions:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    status:
                      type: string
                      enum: ['True', 'False', Unknown]
                    severity:
                      type: string
                      enum: [Error, Warning, Info]
                    reason:
                      type: string
                    message:
                      type: string
                    lastTransitionTime:
                      type: string
                      format: date-time
                  required:
                  - type
                  - status
              address:
                type: object
                properties:
                  url:
                    type: string
    additionalPrinterColumns:
    - name: URL
      type: string
      jsonPath: .status.address.url
    - name: Ready
      type: string
      jsonPath: .status.conditions[?(@.type=='Ready')].status
    - name: Reason
      type: string
      jsonPath: .status.conditions[?(@.type=='Ready')].reason
    - name: Age
      type: date
      jsonPath: .metadata.creationTimestamp
