apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.3.0
  name: oneagents.dynatrace.com
spec:
  group: dynatrace.com
  names:
    categories:
    - dynatrace
    kind: OneAgent
    listKind: OneAgentList
    plural: oneagents
    singular: oneagent
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.apiUrl
      name: ApiUrl
      type: string
    - jsonPath: .status.tokens
      name: Tokens
      type: string
    - jsonPath: .status.version
      name: Version
      type: string
    - jsonPath: .status.phase
      name: Phase
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: For full-stack monitoring, including complete APM and infrastructure
          layer observability.
        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: OneAgentSpec defines the desired state of OneAgent
            properties:
              agentVersion:
                description: 'Optional: If specified, indicates the OneAgent version
                  to use Defaults to latest Example: {major.minor.release} - 1.200.0'
                type: string
              apiUrl:
                description: Location of the Dynatrace API to connect to, including
                  your specific environment ID
                type: string
              args:
                description: 'Optional: Arguments to the OneAgent installer'
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              customPullSecret:
                description: 'Optional: Pull secret for your private registry'
                type: string
              disableAgentUpdate:
                description: Disable automatic restarts of OneAgent pods in case a
                  new version is available
                type: boolean
              dnsPolicy:
                description: 'Optional: Sets DNS Policy for the OneAgent pods'
                type: string
              enableIstio:
                description: If enabled, Istio on the cluster will be configured automatically
                  to allow access to the Dynatrace environment
                type: boolean
              env:
                description: 'Optional: List of environment variables to set for the
                  installer'
                items:
                  description: EnvVar represents an environment variable present in
                    a Container.
                  properties:
                    name:
                      description: Name of the environment variable. Must be a C_IDENTIFIER.
                      type: string
                    value:
                      description: 'Variable references $(VAR_NAME) are expanded using
                        the previous defined environment variables in the container
                        and any service environment variables. If a variable cannot
                        be resolved, the reference in the input string will be unchanged.
                        The $(VAR_NAME) syntax can be escaped with a double $$, ie:
                        $$(VAR_NAME). Escaped references will never be expanded, regardless
                        of whether the variable exists or not. Defaults to "".'
                      type: string
                    valueFrom:
                      description: Source for the environment variable's value. Cannot
                        be used if value is not empty.
                      properties:
                        configMapKeyRef:
                          description: Selects a key of a ConfigMap.
                          properties:
                            key:
                              description: The key to select.
                              type: string
                            name:
                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                TODO: Add other useful fields. apiVersion, kind, uid?'
                              type: string
                            optional:
                              description: Specify whether the ConfigMap or its key
                                must be defined
                              type: boolean
                          required:
                          - key
                          type: object
                        fieldRef:
                          description: 'Selects a field of the pod: supports metadata.name,
                            metadata.namespace, `metadata.labels[''<KEY>'']`, `metadata.annotations[''<KEY>'']`,
                            spec.nodeName, spec.serviceAccountName, status.hostIP,
                            status.podIP, status.podIPs.'
                          properties:
                            apiVersion:
                              description: Version of the schema the FieldPath is
                                written in terms of, defaults to "v1".
                              type: string
                            fieldPath:
                              description: Path of the field to select in the specified
                                API version.
                              type: string
                          required:
                          - fieldPath
                          type: object
                        resourceFieldRef:
                          description: 'Selects a resource of the container: only
                            resources limits and requests (limits.cpu, limits.memory,
                            limits.ephemeral-storage, requests.cpu, requests.memory
                            and requests.ephemeral-storage) are currently supported.'
                          properties:
                            containerName:
                              description: 'Container name: required for volumes,
                                optional for env vars'
                              type: string
                            divisor:
                              anyOf:
                              - type: integer
                              - type: string
                              description: Specifies the output format of the exposed
                                resources, defaults to "1"
                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                              x-kubernetes-int-or-string: true
                            resource:
                              description: 'Required: resource to select'
                              type: string
                          required:
                          - resource
                          type: object
                        secretKeyRef:
                          description: Selects a key of a secret in the pod's namespace
                          properties:
                            key:
                              description: The key of the secret to select from.  Must
                                be a valid secret key.
                              type: string
                            name:
                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                TODO: Add other useful fields. apiVersion, kind, uid?'
                              type: string
                            optional:
                              description: Specify whether the Secret or its key must
                                be defined
                              type: boolean
                          required:
                          - key
                          type: object
                      type: object
                  required:
                  - name
                  type: object
                type: array
              image:
                description: 'Optional: the Dynatrace installer container image Defaults
                  to docker.io/dynatrace/oneagent:latest for Kubernetes and to registry.connect.redhat.com/dynatrace/oneagent
                  for OpenShift'
                type: string
              labels:
                additionalProperties:
                  type: string
                description: 'Optional: Adds additional labels for the OneAgent pods'
                type: object
              networkZone:
                description: 'Optional: Adds the OneAgent to the given NetworkZone'
                type: string
              nodeSelector:
                additionalProperties:
                  type: string
                description: Node selector to control the selection of nodes (optional)
                type: object
              priorityClassName:
                description: 'Optional: If specified, indicates the pod''s priority.
                  Name must be defined by creating a PriorityClass object with that
                  name. If not specified the setting will be removed from the DaemonSet.'
                type: string
              proxy:
                description: 'Optional: Set custom proxy settings either directly
                  or from a secret with the field ''proxy'''
                properties:
                  value:
                    type: string
                  valueFrom:
                    type: string
                type: object
              resources:
                description: 'Optional: define resources requests and limits for single
                  pods'
                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: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    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: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    type: object
                type: object
              serviceAccountName:
                description: 'Optional: set custom Service Account Name used with
                  OneAgent pods'
                type: string
              skipCertCheck:
                description: Disable certificate validation checks for installer download
                  and API communication
                type: boolean
              tokens:
                description: Credentials for the OneAgent to connect back to Dynatrace.
                type: string
              tolerations:
                description: 'Optional: set tolerations for the OneAgent pods'
                items:
                  description: The pod this Toleration is attached to tolerates any
                    taint that matches the triple <key,value,effect> using the matching
                    operator <operator>.
                  properties:
                    effect:
                      description: Effect indicates the taint effect to match. Empty
                        means match all taint effects. When specified, allowed values
                        are NoSchedule, PreferNoSchedule and NoExecute.
                      type: string
                    key:
                      description: Key is the taint key that the toleration applies
                        to. Empty means match all taint keys. If the key is empty,
                        operator must be Exists; this combination means to match all
                        values and all keys.
                      type: string
                    operator:
                      description: Operator represents a key's relationship to the
                        value. Valid operators are Exists and Equal. Defaults to Equal.
                        Exists is equivalent to wildcard for value, so that a pod
                        can tolerate all taints of a particular category.
                      type: string
                    tolerationSeconds:
                      description: TolerationSeconds represents the period of time
                        the toleration (which must be of effect NoExecute, otherwise
                        this field is ignored) tolerates the taint. By default, it
                        is not set, which means tolerate the taint forever (do not
                        evict). Zero and negative values will be treated as 0 (evict
                        immediately) by the system.
                      format: int64
                      type: integer
                    value:
                      description: Value is the taint value the toleration matches
                        to. If the operator is Exists, the value should be empty,
                        otherwise just a regular string.
                      type: string
                  type: object
                type: array
              trustedCAs:
                description: 'Optional: Adds custom RootCAs from a configmap'
                type: string
              useImmutableImage:
                description: Defines if you want to use the immutable image or the
                  installer
                type: boolean
              useUnprivilegedMode:
                description: 'Optional: Runs the OneAgent Pods as unprivileged (Early
                  Adopter)'
                type: boolean
              waitReadySeconds:
                description: 'Optional: Defines the time to wait until OneAgent pod
                  is ready after update - default 300 sec'
                minimum: 0
                type: integer
              webhookInjection:
                description: Work in progress Disables automatic injection into applications
                  OneAgentAPM together with the webhook will then do the injection
                type: boolean
            required:
            - apiUrl
            type: object
          status:
            description: OneAgentStatus defines the observed state of OneAgent
            properties:
              conditions:
                description: Conditions includes status about the current state of
                  the instance
                items:
                  description: "Condition contains details for one aspect of the current\
                    \ state of this API Resource. --- This struct is intended for\
                    \ direct use as an array at the field path .status.conditions.\
                    \  For example, type FooStatus struct{     // Represents the observations\
                    \ of a foo's current state.     // Known .status.conditions.type\
                    \ are: \"Available\", \"Progressing\", and \"Degraded\"     //\
                    \ +patchMergeKey=type     // +patchStrategy=merge     // +listType=map\
                    \     // +listMapKey=type     Conditions []metav1.Condition `json:\"\
                    conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"\
                    type\" protobuf:\"bytes,1,rep,name=conditions\"` \n     // other\
                    \ fields }"
                  properties:
                    lastTransitionTime:
                      description: lastTransitionTime is the last time the condition
                        transitioned from one status to another. This should be when
                        the underlying condition changed.  If that is not known, then
                        using the time when the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: message is a human readable message indicating
                        details about the transition. This may be an empty string.
                      maxLength: 32768
                      type: string
                    observedGeneration:
                      description: observedGeneration represents the .metadata.generation
                        that the condition was set based upon. For instance, if .metadata.generation
                        is currently 12, but the .status.conditions[x].observedGeneration
                        is 9, the condition is out of date with respect to the current
                        state of the instance.
                      format: int64
                      minimum: 0
                      type: integer
                    reason:
                      description: reason contains a programmatic identifier indicating
                        the reason for the condition's last transition. Producers
                        of specific condition types may define expected values and
                        meanings for this field, and whether the values are considered
                        a guaranteed API. The value should be a CamelCase string.
                        This field may not be empty.
                      maxLength: 1024
                      minLength: 1
                      pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      enum:
                      - 'True'
                      - 'False'
                      - Unknown
                      type: string
                    type:
                      description: type of condition in CamelCase or in foo.example.com/CamelCase.
                        --- Many .condition.type values are consistent across resources
                        like Available, but because arbitrary conditions can be useful
                        (see .node.status.conditions), the ability to deconflict is
                        important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                      maxLength: 316
                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                      type: string
                  required:
                  - lastTransitionTime
                  - message
                  - reason
                  - status
                  - type
                  type: object
                type: array
              environmentID:
                description: EnvironmentID contains the environment ID corresponding
                  to the API URL
                type: string
              imageHash:
                description: ImageHash contains the hash for the latest immutable
                  image seen.
                type: string
              imageVersion:
                description: ImageVersion contains the version for the latest immutable
                  image seen.
                type: string
              instances:
                additionalProperties:
                  properties:
                    ipAddress:
                      type: string
                    podName:
                      type: string
                    version:
                      type: string
                  type: object
                type: object
              lastAPITokenProbeTimestamp:
                description: LastAPITokenProbeTimestamp tracks when the last request
                  for the API token validity was sent
                format: date-time
                type: string
              lastImageVersionProbeTimestamp:
                description: LastImageVersionProbeTimestamp keeps track of the last
                  time the Operator looked at the image version
                format: date-time
                type: string
              lastPaaSTokenProbeTimestamp:
                description: LastPaaSTokenProbeTimestamp tracks when the last request
                  for the PaaS token validity was sent
                format: date-time
                type: string
              lastUpdateProbeTimestamp:
                description: LastUpdateProbeTimestamp defines the last timestamp when
                  the querying for updates have been done
                format: date-time
                type: string
              phase:
                description: Defines the current state (Running, Updating, Error,
                  ...)
                type: string
              tokens:
                description: Credentials used for the OneAgent to connect back to
                  Dynatrace.
                type: string
              updatedTimestamp:
                description: UpdatedTimestamp indicates when the instance was last
                  updated
                format: date-time
                type: string
              useImmutableImage:
                description: UseImmutableImage is set when an immutable image is currently
                  in use
                type: boolean
              version:
                description: Dynatrace version being used.
                type: string
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
