# Custom Resource Definition (CRD) for OSM's policy specification.
#
# Copyright Open Service Mesh 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: retries.policy.openservicemesh.io
  labels:
    app.kubernetes.io/name : "openservicemesh.io"
spec:
  group: policy.openservicemesh.io
  scope: Namespaced
  names:
    kind: Retry
    listKind: RetryList
    shortNames:
      - retry
    singular: retry
    plural: retries
  versions:
    - name: v1alpha1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              required:
                - source
                - destinations
                - retryPolicy
              properties:
                source:
                  description: Source the Retry policy is applicable to.
                  type: object
                  required:
                    - kind
                    - name
                    - namespace
                  properties:
                    kind:
                      description: Kind of this source (must be a service account).
                      type: string
                    name:
                      description: Name of this source.
                      type: string
                    namespace:
                      description: Namespace of this source.
                      type: string
                destinations:
                  description: Destinations that the Retry policy is applicable to.
                  type: array
                  items:
                    type: object
                    required:
                      - kind
                      - name
                      - namespace
                    properties:
                      kind:
                        description: Kind of this destination (must be a service).
                        type: string
                      name:
                        description: Name of this destination.
                        type: string
                      namespace:
                        description: Namespace of this destination.
                        type: string
                retryPolicy:
                  description: Retry policy that will be applied to the source and destination services
                  type: object
                  required:
                    - retryOn
                    - perTryTimeout
                    - numRetries
                    - retryBackoffBaseInterval
                  properties:
                    retryOn:
                      description: Policies to retry on (delimited by commas).
                      type: string
                    perTryTimeout:
                      description: Time allowed for a retry before it's considered a failed attempt.
                      type: string
                    numRetries:
                      description: Maximum number of retries to attempt.
                      type: integer
                    retryBackoffBaseInterval:
                      description: Base interval for exponential retry backoff. Max interval will be 10 times the base interval.
                      type: string
