# Copyright 2021 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: oracletargets.targets.triggermesh.io
  labels:
    knative.dev/crd-install: 'true'
    triggermesh.io/crd-install: 'true'
    duck.knative.dev/addressable: 'true'
spec:
  group: targets.triggermesh.io
  names:
    kind: OracleTarget
    plural: oracletargets
    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 Oracle Cloud (OCI).
        properties:
          spec:
            type: object
            description: Desired state of event target.
            properties:
              oracleApiPrivateKey:
                type: object
                description: Oracle API Private Key to sign each request to the Oracle Cloud.
                  For details on how to create a private keypair for Oracle Cloud, refer to https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
                properties:
                  secretKeyRef:
                    type: object
                    properties:
                      key:
                        type: string
                      name:
                        type: string
              oracleApiPrivateKeyPassphrase:
                type: object
                description: Passphrase to unlock the private key used to sign each request to the Oracle Cloud.
                  For details on how to create a private keypair for Oracle Cloud, refer to https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
                properties:
                  secretKeyRef:
                    type: object
                    properties:
                      key:
                        type: string
                      name:
                        type: string
              oracleApiPrivateKeyFingerprint:
                type: object
                description: MD5 fingerprint to identify the keypair associated with the key used to sign each request to the Oracle Cloud.
                  For details on how to create a private keypair for Oracle Cloud, refer to https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
                properties:
                  secretKeyRef:
                    type: object
                    properties:
                      key:
                        type: string
                      name:
                        type: string
              oracleTenancy:
                description: The Oracle Cloud ID (OCID) of the tenant containing the service to be used on the Oracle Cloud.
                type: string
              oracleUser:
                description: The Oracle Cloud ID (OCID) of the user who owns the key used to interact with the Oracle Cloud.
                type: string
              oracleRegion:
                description: The Oracle Cloud region containing the service being executed. A full list of supported regions can be found at https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm
                type: string
              function:
                type: object
                description: Invoke a serverless function on the Oracle Cloud.
                properties:
                  function:
                    description: The Oracle Cloud ID (OCID) of the function being invoked.
                    type: string
            oneOf:
            - required: [function]
          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.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
