apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: canaries.flagger.app
  annotations:
    helm.sh/resource-policy: keep
spec:
  group: flagger.app
  names:
    kind: Canary
    listKind: CanaryList
    plural: canaries
    singular: canary
    categories:
      - all
  scope: Namespaced
  versions:
    - name: v1beta1
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns:
        - name: Status
          type: string
          jsonPath: .status.phase
        - name: Weight
          type: string
          jsonPath: .status.canaryWeight
        - name: FailedChecks
          type: string
          jsonPath: .status.failedChecks
          priority: 1
        - name: Interval
          type: string
          jsonPath: .spec.analysis.interval
          priority: 1
        - name: Mirror
          type: boolean
          jsonPath: .spec.analysis.mirror
          priority: 1
        - name: StepWeight
          type: string
          jsonPath: .spec.analysis.stepWeight
          priority: 1
        - name: StepWeights
          type: string
          jsonPath: .spec.analysis.stepWeights
          priority: 1
        - name: MaxWeight
          type: string
          jsonPath: .spec.analysis.maxWeight
          priority: 1
        - name: LastTransitionTime
          type: string
          jsonPath: .status.lastTransitionTime
      schema:
        openAPIV3Schema:
          description: Canary is the Schema for the Canary API.
          type: object
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: CanarySpec defines the desired state of a Canary.
              type: object
              required:
                - targetRef
                - service
                - analysis
              properties:
                provider:
                  description: Traffic managent provider
                  type: string
                metricsServer:
                  description: Prometheus URL
                  type: string
                progressDeadlineSeconds:
                  description: Deployment progress deadline
                  type: number
                targetRef:
                  description: Target selector
                  type: object
                  required: ["apiVersion", "kind", "name"]
                  properties:
                    apiVersion:
                      type: string
                    kind:
                      type: string
                      enum:
                        - DaemonSet
                        - Deployment
                        - Service
                    name:
                      type: string
                autoscalerRef:
                  description: HPA selector
                  type: object
                  required: ["apiVersion", "kind", "name"]
                  properties:
                    apiVersion:
                      type: string
                    kind:
                      type: string
                      enum:
                        - HorizontalPodAutoscaler
                    name:
                      type: string
                ingressRef:
                  description: Ingress selector
                  type: object
                  required: ["apiVersion", "kind", "name"]
                  properties:
                    apiVersion:
                      type: string
                    kind:
                      type: string
                      enum:
                        - Ingress
                    name:
                      type: string
                upstreamRef:
                  description: Gloo Upstream selector
                  type: object
                  required: [ "apiVersion", "kind", "name" ]
                  properties:
                    apiVersion:
                      type: string
                    kind:
                      type: string
                      enum:
                        - Upstream
                    name:
                      type: string
                    namespace:
                      type: string
                service:
                  description: Kubernetes Service spec
                  type: object
                  required: ["port"]
                  properties:
                    name:
                      description: Kubernetes service name
                      type: string
                    port:
                      description: Container port number
                      type: number
                    portName:
                      description: Container port name
                      type: string
                    targetPort:
                      description: Container target port name
                      x-kubernetes-int-or-string: true
                    portDiscovery:
                      description: Enable port dicovery
                      type: boolean
                    timeout:
                      description: HTTP or gRPC request timeout
                      type: string
                    meshName:
                      description: AppMesh mesh name
                      type: string
                    backends:
                      description: AppMesh backend array
                      type: array
                      items:
                        type: string
                    hosts:
                      description: The list of host names for this service
                      type: array
                      items:
                        type: string
                    delegation:
                      description: enable behaving as a delegate VirtualService
                      type: boolean
                    match:
                      description: URI match conditions
                      type: array
                      items:
                        properties:
                          authority:
                            oneOf:
                              - not:
                                  anyOf:
                                    - required:
                                        - exact
                                    - required:
                                        - prefix
                                    - required:
                                        - regex
                              - required:
                                  - exact
                              - required:
                                  - prefix
                              - required:
                                  - regex
                            properties:
                              exact:
                                format: string
                                type: string
                              prefix:
                                format: string
                                type: string
                              regex:
                                description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                format: string
                                type: string
                            type: object
                          gateways:
                            description:
                              Names of gateways where the rule should be
                              applied.
                            items:
                              format: string
                              type: string
                            type: array
                          headers:
                            additionalProperties:
                              oneOf:
                                - not:
                                    anyOf:
                                      - required:
                                          - exact
                                      - required:
                                          - prefix
                                      - required:
                                          - regex
                                - required:
                                    - exact
                                - required:
                                    - prefix
                                - required:
                                    - regex
                              properties:
                                exact:
                                  format: string
                                  type: string
                                prefix:
                                  format: string
                                  type: string
                                regex:
                                  description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                  format: string
                                  type: string
                              type: object
                            type: object
                          ignoreUriCase:
                            description:
                              Flag to specify whether the URI matching should
                              be case-insensitive.
                            type: boolean
                          method:
                            oneOf:
                              - not:
                                  anyOf:
                                    - required:
                                        - exact
                                    - required:
                                        - prefix
                                    - required:
                                        - regex
                              - required:
                                  - exact
                              - required:
                                  - prefix
                              - required:
                                  - regex
                            properties:
                              exact:
                                format: string
                                type: string
                              prefix:
                                format: string
                                type: string
                              regex:
                                description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                format: string
                                type: string
                            type: object
                          name:
                            description: The name assigned to a match.
                            format: string
                            type: string
                          port:
                            description:
                              Specifies the ports on the host that is being
                              addressed.
                            type: integer
                          queryParams:
                            additionalProperties:
                              oneOf:
                                - not:
                                    anyOf:
                                      - required:
                                          - exact
                                      - required:
                                          - prefix
                                      - required:
                                          - regex
                                - required:
                                    - exact
                                - required:
                                    - prefix
                                - required:
                                    - regex
                              properties:
                                exact:
                                  format: string
                                  type: string
                                prefix:
                                  format: string
                                  type: string
                                regex:
                                  description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                  format: string
                                  type: string
                              type: object
                            description: Query parameters for matching.
                            type: object
                          scheme:
                            oneOf:
                              - not:
                                  anyOf:
                                    - required:
                                        - exact
                                    - required:
                                        - prefix
                                    - required:
                                        - regex
                              - required:
                                  - exact
                              - required:
                                  - prefix
                              - required:
                                  - regex
                            properties:
                              exact:
                                format: string
                                type: string
                              prefix:
                                format: string
                                type: string
                              regex:
                                description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                format: string
                                type: string
                            type: object
                          sourceLabels:
                            additionalProperties:
                              format: string
                              type: string
                            type: object
                          sourceNamespace:
                            description:
                              Source namespace constraining the applicability
                              of a rule to workloads in that namespace.
                            format: string
                            type: string
                          uri:
                            oneOf:
                              - not:
                                  anyOf:
                                    - required:
                                        - exact
                                    - required:
                                        - prefix
                                    - required:
                                        - regex
                              - required:
                                  - exact
                              - required:
                                  - prefix
                              - required:
                                  - regex
                            properties:
                              exact:
                                format: string
                                type: string
                              prefix:
                                format: string
                                type: string
                              regex:
                                description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                format: string
                                type: string
                            type: object
                          withoutHeaders:
                            additionalProperties:
                              oneOf:
                                - not:
                                    anyOf:
                                      - required:
                                          - exact
                                      - required:
                                          - prefix
                                      - required:
                                          - regex
                                - required:
                                    - exact
                                - required:
                                    - prefix
                                - required:
                                    - regex
                              properties:
                                exact:
                                  format: string
                                  type: string
                                prefix:
                                  format: string
                                  type: string
                                regex:
                                  description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
                                  format: string
                                  type: string
                              type: object
                            description:
                              withoutHeader has the same syntax with the
                              header, but has opposite meaning.
                            type: object
                        type: object
                    retries:
                      description: Retry policy for HTTP requests
                      type: object
                      properties:
                        attempts:
                          description: Number of retries for a given request
                          format: int32
                          type: integer
                        perTryTimeout:
                          description: Timeout per retry attempt for a given request
                          type: string
                        retryOn:
                          description: Specifies the conditions under which retry takes place
                          format: string
                          type: string
                    rewrite:
                      description: Rewrite HTTP URIs
                      type: object
                      properties:
                        uri:
                          format: string
                          type: string
                    headers:
                      description: Headers operations
                      type: object
                      properties:
                        request:
                          properties:
                            add:
                              additionalProperties:
                                format: string
                                type: string
                              type: object
                            remove:
                              items:
                                format: string
                                type: string
                              type: array
                            set:
                              additionalProperties:
                                format: string
                                type: string
                              type: object
                          type: object
                        response:
                          properties:
                            add:
                              additionalProperties:
                                format: string
                                type: string
                              type: object
                            remove:
                              items:
                                format: string
                                type: string
                              type: array
                            set:
                              additionalProperties:
                                format: string
                                type: string
                              type: object
                          type: object
                    gateways:
                      description: The list of Istio gateway for this virtual service
                      type: array
                      items:
                        type: string
                    gatewayRefs:
                      description: The list of parent Gateways for a HTTPRoute
                      maxItems: 32
                      type: array
                      items:
                        required:
                        - name
                        type: object
                        properties:
                          group:
                            default: gateway.networking.k8s.io
                            maxLength: 253
                            pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                            type: string
                          kind:
                            default: Gateway
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
                            type: string
                          name:
                            maxLength: 253
                            minLength: 1
                            type: string
                          namespace:
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                            type: string
                          sectionName:
                            maxLength: 253
                            minLength: 1
                            pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                            type: string
                    corsPolicy:
                      description: Istio Cross-Origin Resource Sharing policy (CORS)
                      type: object
                      properties:
                        allowCredentials:
                          type: boolean
                        allowHeaders:
                          items:
                            format: string
                            type: string
                          type: array
                        allowMethods:
                          description: List of HTTP methods allowed to access the resource
                          items:
                            format: string
                            type: string
                          type: array
                        allowOrigin:
                          description: The list of origins that are allowed to perform
                            CORS requests.
                          items:
                            format: string
                            type: string
                          type: array
                        allowOrigins:
                          description: String patterns that match allowed origins
                          type: array
                          items:
                            type: object
                            oneOf:
                              - required:
                                  - exact
                              - required:
                                  - prefix
                              - required:
                                  - regex
                            properties:
                              exact:
                                format: string
                                type: string
                              prefix:
                                format: string
                                type: string
                              regex:
                                format: string
                                type: string
                        exposeHeaders:
                          items:
                            format: string
                            type: string
                          type: array
                        maxAge:
                          type: string
                    trafficPolicy:
                      description: Istio traffic policy
                      type: object
                      properties:
                        connectionPool:
                          type: object
                          properties:
                            http:
                              description: HTTP connection pool settings.
                              type: object
                              properties:
                                h2UpgradePolicy:
                                  description: Specify if http1.1 connection should
                                    be upgraded to http2 for the associated destination.
                                  enum:
                                    - DEFAULT
                                    - DO_NOT_UPGRADE
                                    - UPGRADE
                                  type: string
                                http1MaxPendingRequests:
                                  description: Maximum number of pending HTTP requests
                                    to a destination.
                                  format: int32
                                  type: integer
                                http2MaxRequests:
                                  description: Maximum number of requests to a backend.
                                  format: int32
                                  type: integer
                                idleTimeout:
                                  description: The idle timeout for upstream connection
                                    pool connections.
                                  type: string
                                maxRequestsPerConnection:
                                  description: Maximum number of requests per connection
                                    to a backend.
                                  format: int32
                                  type: integer
                                maxRetries:
                                  format: int32
                                  type: integer
                        loadBalancer:
                          description: Settings controlling the load balancer algorithms.
                          type: object
                          oneOf:
                            - required:
                                - simple
                            - properties:
                                consistentHash:
                                  oneOf:
                                    - required:
                                        - httpHeaderName
                                    - required:
                                        - httpCookie
                                    - required:
                                        - useSourceIp
                                    - required:
                                        - httpQueryParameterName
                              required:
                                - consistentHash
                          properties:
                            consistentHash:
                              properties:
                                httpCookie:
                                  description: Hash based on HTTP cookie.
                                  properties:
                                    name:
                                      description: Name of the cookie.
                                      format: string
                                      type: string
                                    path:
                                      description: Path to set for the cookie.
                                      format: string
                                      type: string
                                    ttl:
                                      description: Lifetime of the cookie.
                                      type: string
                                  type: object
                                httpHeaderName:
                                  description: Hash based on a specific HTTP header.
                                  format: string
                                  type: string
                                httpQueryParameterName:
                                  description: Hash based on a specific HTTP query parameter.
                                  format: string
                                  type: string
                                minimumRingSize:
                                  type: integer
                                useSourceIp:
                                  description: Hash based on the source IP address.
                                  type: boolean
                              type: object
                            localityLbSetting:
                              properties:
                                distribute:
                                  description: 'Optional: only one of distribute or
                                    failover can be set.'
                                  items:
                                    properties:
                                      from:
                                        description: Originating locality, '/' separated,
                                          e.g.
                                        format: string
                                        type: string
                                      to:
                                        additionalProperties:
                                          type: integer
                                        description: Map of upstream localities to traffic
                                          distribution weights.
                                        type: object
                                    type: object
                                  type: array
                                enabled:
                                  description: enable locality load balancing, this
                                    is DestinationRule-level and will override mesh
                                    wide settings in entirety.
                                  type: boolean
                                failover:
                                  description: 'Optional: only failover or distribute
                                    can be set.'
                                  items:
                                    properties:
                                      from:
                                        description: Originating region.
                                        format: string
                                        type: string
                                      to:
                                        format: string
                                        type: string
                                    type: object
                                  type: array
                              type: object
                            simple:
                              enum:
                                - ROUND_ROBIN
                                - LEAST_CONN
                                - RANDOM
                                - PASSTHROUGH
                              type: string
                        outlierDetection:
                          description: Settings controlling eviction of unhealthy hosts from the load balancing pool.
                          type: object
                          properties:
                            baseEjectionTime:
                              description: Minimum ejection duration.
                              type: string
                            consecutive5xxErrors:
                              description: Number of 5xx errors before a host is ejected
                                from the connection pool.
                              type: integer
                            consecutiveErrors:
                              format: int32
                              type: integer
                            consecutiveGatewayErrors:
                              description: Number of gateway errors before a host is
                                ejected from the connection pool.
                              format: int32
                              type: integer
                            interval:
                              description: Time interval between ejection sweep analysis.
                              type: string
                            maxEjectionPercent:
                              format: int32
                              type: integer
                            minHealthPercent:
                              format: int32
                              type: integer
                        tls:
                          description: Istio TLS related settings for connections to the upstream service
                          type: object
                          properties:
                            caCertificates:
                              format: string
                              type: string
                            clientCertificate:
                              description: REQUIRED if mode is `MUTUAL`.
                              format: string
                              type: string
                            mode:
                              enum:
                                - DISABLE
                                - SIMPLE
                                - MUTUAL
                                - ISTIO_MUTUAL
                              type: string
                            privateKey:
                              description: REQUIRED if mode is `MUTUAL`.
                              format: string
                              type: string
                            sni:
                              description: SNI string to present to the server
                                during TLS handshake.
                              format: string
                              type: string
                            subjectAltNames:
                              items:
                                format: string
                                type: string
                              type: array
                    apex:
                      description: Metadata to add to the apex service
                      type: object
                      properties:
                        labels:
                          type: object
                          additionalProperties:
                            type: string
                        annotations:
                          type: object
                          additionalProperties:
                            type: string
                    primary:
                      description: Metadata to add to the primary service
                      type: object
                      properties:
                        labels:
                          type: object
                          additionalProperties:
                            type: string
                        annotations:
                          type: object
                          additionalProperties:
                            type: string
                    canary:
                      description: Metadata to add to the canary service
                      type: object
                      properties:
                        labels:
                          type: object
                          additionalProperties:
                            type: string
                        annotations:
                          type: object
                          additionalProperties:
                            type: string
                skipAnalysis:
                  description: Skip analysis and promote canary
                  type: boolean
                revertOnDeletion:
                  description: Revert mutated resources to original spec on deletion
                  type: boolean
                analysis:
                  description: Canary analysis for this canary
                  type: object
                  oneOf:
                    - required: ["interval", "threshold", "iterations"]
                    - required: ["interval", "threshold", "stepWeight"]
                    - required: ["interval", "threshold", "stepWeights"]
                  properties:
                    interval:
                      description: Schedule interval for this canary
                      type: string
                      pattern: "^[0-9]+(m|s)"
                    iterations:
                      description: Number of checks to run for A/B Testing and Blue/Green
                      type: number
                    threshold:
                      description: Max number of failed checks before rollback
                      type: number
                    maxWeight:
                      description: Max traffic weight routed to canary
                      type: number
                    stepWeight:
                      description: Incremental traffic step weight for the analysis phase
                      type: number
                    stepWeights:
                      description: Incremental traffic step weights for the analysis phase
                      type: array
                      items:
                        type: number
                    stepWeightPromotion:
                      description: Incremental traffic step weight for the promotion phase
                      type: number
                    mirror:
                      description: Mirror traffic to canary
                      type: boolean
                    mirrorWeight:
                      description: Weight of traffic to be mirrored
                      type: number
                    primaryReadyThreshold:
                      description: Percentage of pods that need to be available to consider primary as ready
                      type: number
                    canaryReadyThreshold:
                      description: Percentage of pods that need to be available to consider canary as ready
                      type: number
                    match:
                      description: A/B testing match conditions
                      type: array
                      items:
                        type: object
                        properties:
                          headers:
                            type: object
                            additionalProperties:
                              oneOf:
                                - required: ["exact"]
                                - required: ["prefix"]
                                - required: ["suffix"]
                                - required: ["regex"]
                              type: object
                              properties:
                                exact:
                                  format: string
                                  type: string
                                prefix:
                                  format: string
                                  type: string
                                suffix:
                                  format: string
                                  type: string
                                regex:
                                  description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax)
                                  format: string
                                  type: string
                          sourceLabels:
                            description: Applicable only when the 'mesh' gateway is included in the service.gateways list
                            type: object
                            additionalProperties:
                              format: string
                              type: string
                    metrics:
                      description: Metric check list for this canary
                      type: array
                      items:
                        type: object
                        required: ["name"]
                        properties:
                          name:
                            description: Name of the metric
                            type: string
                          interval:
                            description: Interval of the query
                            type: string
                            pattern: "^[0-9]+(m|s)"
                          threshold:
                            description: Max value accepted for this metric
                            type: number
                          thresholdRange:
                            description: Range accepted for this metric
                            type: object
                            properties:
                              min:
                                description: Min value accepted for this metric
                                type: number
                              max:
                                description: Max value accepted for this metric
                                type: number
                          query:
                            description: Prometheus query
                            type: string
                          templateRef:
                            description: Metric template reference
                            type: object
                            required: ["name"]
                            properties:
                              name:
                                description: Name of this metric template
                                type: string
                              namespace:
                                description: Namespace of this metric template
                                type: string
                    alerts:
                      description: Alert list for this canary analysis
                      type: array
                      items:
                        type: object
                        required:
                          - providerRef
                          - name
                        properties:
                          name:
                            description: Name of the this alert
                            type: string
                          severity:
                            description: Severity level can be info, warn, error (default info)
                            type: string
                            enum:
                              - ""
                              - info
                              - warn
                              - error
                          providerRef:
                            description: Alert provider reference
                            type: object
                            required: ["name"]
                            properties:
                              name:
                                description: Name of the alert provider
                                type: string
                              namespace:
                                description: Namespace of the alert provider
                                type: string
                    webhooks:
                      description: Webhook list for this canary
                      type: array
                      items:
                        type: object
                        required: ["name", "url"]
                        properties:
                          name:
                            description: Name of the webhook
                            type: string
                          type:
                            description: Type of the webhook pre, post or during rollout
                            type: string
                            enum:
                              - ""
                              - confirm-rollout
                              - pre-rollout
                              - rollout
                              - confirm-promotion
                              - post-rollout
                              - event
                              - rollback
                              - confirm-traffic-increase
                          muteAlert:
                            description: Mute all alerts for the webhook
                            type: boolean
                          url:
                            description: URL address of this webhook
                            type: string
                            format: url
                          timeout:
                            description: Request timeout for this webhook
                            type: string
                            pattern: "^[0-9]+(m|s)"
                          metadata:
                            description: Metadata (key-value pairs) for this webhook
                            type: object
                            additionalProperties:
                              type: string
            status:
              description: CanaryStatus defines the observed state of a canary.
              type: object
              properties:
                phase:
                  description: Analysis phase of this canary
                  type: string
                  enum:
                    - ""
                    - Initializing
                    - Initialized
                    - Waiting
                    - Progressing
                    - WaitingPromotion
                    - Promoting
                    - Finalising
                    - Succeeded
                    - Failed
                    - Terminating
                    - Terminated
                trackedConfigs:
                  description: TrackedConfig of this canary
                  additionalProperties:
                    type: string
                  type: object
                canaryWeight:
                  description: Traffic weight routed to canary
                  type: number
                failedChecks:
                  description: Failed check count of the current canary analysis
                  type: number
                iterations:
                  description: Iteration count of the current canary analysis
                  type: number
                lastPromotedSpec:
                  description: LastPromotedSpec of this canary
                  type: string
                lastAppliedSpec:
                  description: LastAppliedSpec of this canary
                  type: string
                lastTransitionTime:
                  description: LastTransitionTime of this canary
                  format: date-time
                  type: string
                conditions:
                  description: Status conditions of this canary
                  type: array
                  items:
                    type: object
                    required: [ "type", "status", "reason" ]
                    properties:
                      lastTransitionTime:
                        description: LastTransitionTime of this condition
                        format: date-time
                        type: string
                      lastUpdateTime:
                        description: LastUpdateTime of this condition
                        format: date-time
                        type: string
                      message:
                        description: Message associated with this condition
                        type: string
                      reason:
                        description: Reason for the current status of this condition
                        type: string
                      status:
                        description: Status of this condition
                        type: string
                      type:
                        description: Type of this condition
                        type: string
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: metrictemplates.flagger.app
  annotations:
    helm.sh/resource-policy: keep
spec:
  group: flagger.app
  names:
    kind: MetricTemplate
    listKind: MetricTemplateList
    plural: metrictemplates
    singular: metrictemplate
    categories:
      - all
  scope: Namespaced
  versions:
    - name: v1beta1
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns:
        - name: Provider
          type: string
          jsonPath: .spec.provider.type
      schema:
        openAPIV3Schema:
          description: MetricTemplate is the Schema for the MetricTemplates API.
          type: object
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: MetricTemplateSpec defines the desired state of a MetricTemplate.
              type: object
              required:
                - provider
                - query
              properties:
                provider:
                  description: Provider of this metric template
                  type: object
                  required:
                    - type
                  properties:
                    type:
                      description: Type of this provider
                      type: string
                      enum:
                        - prometheus
                        - influxdb
                        - datadog
                        - stackdriver
                        - cloudwatch
                        - newrelic
                        - graphite
                        - dynatrace
                    address:
                      description: API address of this provider
                      type: string
                    secretRef:
                      description: Kubernetes secret reference containing the provider credentials
                      type: object
                      required:
                        - name
                      properties:
                        name:
                          description: Name of the Kubernetes secret
                          type: string
                    region:
                      description: Region of the provider
                      type: string
                    insecureSkipVerify:
                      description: Disable SSL certificate validation for the provider address
                      type: boolean
                query:
                  description: Query of this metric template
                  type: string
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: alertproviders.flagger.app
  annotations:
    helm.sh/resource-policy: keep
spec:
  group: flagger.app
  names:
    kind: AlertProvider
    listKind: AlertProviderList
    plural: alertproviders
    singular: alertprovider
    categories:
      - all
  scope: Namespaced
  versions:
    - name: v1beta1
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns:
        - name: Type
          type: string
          jsonPath: .spec.type
      schema:
        openAPIV3Schema:
          description: AlertProvider is the Schema for the AlertProvider API.
          type: object
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: AlertProviderSpec defines the desired state of a AlertProvider.
              type: object
              oneOf:
                - required:
                    - type
                    - address
                - required:
                    - type
                    - secretRef
              properties:
                type:
                  description: Type of this provider
                  type: string
                  enum:
                    - slack
                    - msteams
                    - discord
                    - rocket
                    - gchat
                channel:
                  description: Alert channel for this provider
                  type: string
                username:
                  description: Bot username for this provider
                  type: string
                address:
                  description: Hook URL address of this provider
                  type: string
                proxy:
                  description: Http/s proxy of this provider
                  type: string
                secretRef:
                  description: Kubernetes secret reference containing the provider address
                  type: object
                  required:
                    - name
                  properties:
                    name:
                      description: Name of the Kubernetes secret
                      type: string
