---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.15.0
  name: meshtraces.kuma.io
spec:
  group: kuma.io
  names:
    categories:
    - kuma
    kind: MeshTrace
    listKind: MeshTraceList
    plural: meshtraces
    singular: meshtrace
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.targetRef.kind
      name: TargetRef Kind
      type: string
    - jsonPath: .spec.targetRef.name
      name: TargetRef Name
      type: string
    name: v1alpha1
    schema:
      openAPIV3Schema:
        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: Spec is the specification of the Kuma MeshTrace resource.
            properties:
              default:
                description: MeshTrace configuration.
                properties:
                  backends:
                    description: |-
                      A one element array of backend definition.
                      Envoy allows configuring only 1 backend, so the natural way of
                      representing that would be just one object. Unfortunately due to the
                      reasons explained in MADR 009-tracing-policy this has to be a one element
                      array for now.
                    items:
                      description: Only one of zipkin, datadog or openTelemetry can
                        be used.
                      properties:
                        datadog:
                          description: Datadog backend configuration.
                          properties:
                            splitService:
                              default: false
                              description: |-
                                Determines if datadog service name should be split based on traffic
                                direction and destination. For example, with `splitService: true` and a
                                `backend` service that communicates with a couple of databases, you would
                                get service names like `backend_INBOUND`, `backend_OUTBOUND_db1`, and
                                `backend_OUTBOUND_db2` in Datadog.
                              type: boolean
                            url:
                              description: |-
                                Address of Datadog collector, only host and port are allowed (no paths,
                                fragments etc.)
                              type: string
                          required:
                          - url
                          type: object
                        openTelemetry:
                          description: OpenTelemetry backend configuration.
                          properties:
                            endpoint:
                              description: Address of OpenTelemetry collector.
                              example: otel-collector:4317
                              minLength: 1
                              type: string
                          required:
                          - endpoint
                          type: object
                        type:
                          enum:
                          - Zipkin
                          - Datadog
                          - OpenTelemetry
                          type: string
                        zipkin:
                          description: Zipkin backend configuration.
                          properties:
                            apiVersion:
                              default: httpJson
                              description: |-
                                Version of the API.
                                https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/trace/v3/zipkin.proto#L66
                              enum:
                              - httpJson
                              - httpProto
                              type: string
                            sharedSpanContext:
                              default: true
                              description: |-
                                Determines whether client and server spans will share the same span
                                context.
                                https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/trace/v3/zipkin.proto#L63
                              type: boolean
                            traceId128bit:
                              default: false
                              description: Generate 128bit traces.
                              type: boolean
                            url:
                              description: Address of Zipkin collector.
                              type: string
                          required:
                          - url
                          type: object
                      required:
                      - type
                      type: object
                    maxItems: 1
                    type: array
                  sampling:
                    description: |-
                      Sampling configuration.
                      Sampling is the process by which a decision is made on whether to
                      process/export a span or not.
                    properties:
                      client:
                        anyOf:
                        - type: integer
                        - type: string
                        default: 100%
                        description: |-
                          Target percentage of requests that will be force traced if the
                          'x-client-trace-id' header is set. Mirror of client_sampling in Envoy
                          https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L127-L133
                          Either int or decimal represented as string.
                        x-kubernetes-int-or-string: true
                      overall:
                        anyOf:
                        - type: integer
                        - type: string
                        default: 100%
                        description: |-
                          Target percentage of requests will be traced
                          after all other sampling checks have been applied (client, force tracing,
                          random sampling). This field functions as an upper limit on the total
                          configured sampling rate. For instance, setting client_sampling to 100%
                          but overall_sampling to 1% will result in only 1% of client requests with
                          the appropriate headers to be force traced. Mirror of
                          overall_sampling in Envoy
                          https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L142-L150
                          Either int or decimal represented as string.
                        x-kubernetes-int-or-string: true
                      random:
                        anyOf:
                        - type: integer
                        - type: string
                        default: 100%
                        description: |-
                          Target percentage of requests that will be randomly selected for trace
                          generation, if not requested by the client or not forced.
                          Mirror of random_sampling in Envoy
                          https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L135-L140
                          Either int or decimal represented as string.
                        x-kubernetes-int-or-string: true
                    type: object
                  tags:
                    description: |-
                      Custom tags configuration. You can add custom tags to traces based on
                      headers or literal values.
                    items:
                      description: |-
                        Custom tags configuration.
                        Only one of literal or header can be used.
                      properties:
                        header:
                          description: Tag taken from a header.
                          properties:
                            default:
                              description: |-
                                Default value to use if header is missing.
                                If the default is missing and there is no value the tag will not be
                                included.
                              type: string
                            name:
                              description: Name of the header.
                              type: string
                          required:
                          - name
                          type: object
                        literal:
                          description: Tag taken from literal value.
                          type: string
                        name:
                          description: Name of the tag.
                          type: string
                      required:
                      - name
                      type: object
                    type: array
                type: object
              targetRef:
                description: |-
                  TargetRef is a reference to the resource the policy takes an effect on.
                  The resource could be either a real store object or virtual resource
                  defined inplace.
                properties:
                  kind:
                    description: Kind of the referenced resource
                    enum:
                    - Mesh
                    - MeshSubset
                    - MeshGateway
                    - MeshService
                    - MeshExternalService
                    - MeshServiceSubset
                    - MeshHTTPRoute
                    type: string
                  labels:
                    additionalProperties:
                      type: string
                    description: |-
                      Labels are used to select group of MeshServices that match labels. Either Labels or
                      Name and Namespace can be used.
                    type: object
                  mesh:
                    description: Mesh is reserved for future use to identify cross
                      mesh resources.
                    type: string
                  name:
                    description: |-
                      Name of the referenced resource. Can only be used with kinds: `MeshService`,
                      `MeshServiceSubset` and `MeshGatewayRoute`
                    type: string
                  namespace:
                    description: |-
                      Namespace specifies the namespace of target resource. If empty only resources in policy namespace
                      will be targeted.
                    type: string
                  proxyTypes:
                    description: |-
                      ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
                      all data plane types are targeted by the policy.
                    items:
                      enum:
                      - Sidecar
                      - Gateway
                      type: string
                    minItems: 1
                    type: array
                  sectionName:
                    description: |-
                      SectionName is used to target specific section of resource.
                      For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
                    type: string
                  tags:
                    additionalProperties:
                      type: string
                    description: |-
                      Tags used to select a subset of proxies by tags. Can only be used with kinds
                      `MeshSubset` and `MeshServiceSubset`
                    type: object
                type: object
            required:
            - targetRef
            type: object
        type: object
    served: true
    storage: true
    subresources: {}
