apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: clustercollectors.appdynamics.com
spec:
  group: appdynamics.com
  names:
    kind: Clustercollector
    listKind: ClustercollectorList
    plural: clustercollectors
    singular: clustercollector
  scope: Namespaced
  versions:
    - name: v1alpha1
      served: true
      storage: true
      subresources:
        status: {}
      schema:
        openAPIV3Schema:
          description: Clustercollector is the Schema for the clustercollectors API
          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/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/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: ClustercollectorSpec defines the desired state of Clustercollector
              properties:
                image:
                  type: string
                serviceAccountName:
                  type: string
                resources:
                  description: ResourceRequirements describes the compute resource requirements.
                  properties:
                    limits:
                      additionalProperties:
                        type: string
                      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:
                        type: string
                      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
                controllerUrl:
                  type: string
                account:
                  type: string
                clusterName:
                  type: string
                accessSecret:
                  type: string
                nsToMonitorRegex:
                  type: string
                nsToExcludeRegex:
                  type: string
                logLevel:
                  type: string
                clusterMonEnabled:
                  type: boolean
                kubeExporterAddress:
                  type: string
                kubeExporterPort:
                  format: int32
                  type: integer
                systemConfig:
                  properties:
                    collectorLibSocketUrl:
                      type: string
                    collectorLibPort:
                      type: string
                    httpClientTimeOut:
                      format: int32
                      type: integer
                    httpBasicAuthEnabled:
                      type: boolean
                    configChangeScanPeriod:
                      format: int32
                      type: integer
                    configStaleGracePeriod:
                      format: int32
                      type: integer
                    debugEnabled:
                      type: boolean
                    debugPort:
                      type: string
                    logLevel:
                      type: string
                    clientLibSendUrl:
                      type: string
                    clientLibRecvUrl:
                      type: string
                  type: object
                hostCollectorConfig:
                  properties:
                    name:
                      type: string
                    image:
                      type: string
                    serviceAccountName:
                      type: string
                    resources:
                      description: ResourceRequirements describes the compute resource requirements.
                      properties:
                        limits:
                          additionalProperties:
                            type: string
                          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:
                            type: string
                          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
                    containerMetricExporterAddr:
                      type: string
                    serverMetricExporterAddr:
                      type: string
                    logLevel:
                      type: string
                    containerCollectorPath:
                      type: string
                    serverCollectorPath:
                      type: string
                    containerCollectorDependency:
                      type: string
                    serverCollectorDependency:
                      type: string
                    containerMonEnabled:
                      type: string
                    serverMonEnabled:
                      type: string
                  type: object
              required:
                - controllerUrl
              type: object
            status:
              description: ClustercollectorStatus defines the observed state of Clustercollector
              properties:
                lastUpdateTime:
                  description: 'Important: Run "operator-sdk generate k8s" to regenerate
                                    code after modifying this file'
                  format: date-time
                  type: string
                state:
                  properties:
                    analyticsAgentImage:
                      type: string
                    appDDotNetAttachImage:
                      type: string
                    appDJavaAttachImage:
                      type: string
                    biqService:
                      type: string
                    defaultInstrumentationTech:
                      type: string
                    instrumentMatchString:
                      items:
                        type: string
                      type: array
                    instrumentRule:
                      items:
                        properties:
                          agentEnvVar:
                            type: string
                          appDAppLabel:
                            type: string
                          appDTierLabel:
                            type: string
                          appNameLiteral:
                            type: string
                          biQ:
                            type: string
                          containerName:
                            type: string
                          matchString:
                            items:
                              type: string
                            type: array
                          method:
                            type: string
                          namespaces:
                            items:
                              type: string
                            type: array
                          tech:
                            type: string
                          uniqueHostID:
                            type: string
                          version:
                            type: string
                        type: object
                      type: array
                    instrumentationMethod:
                      type: string
                    logLevel:
                      type: string
                    logLines:
                      type: integer
                    metricsSyncInterval:
                      type: integer
                    nodesToMonitor:
                      items:
                        type: string
                      type: array
                    nodesToMonitorExclude:
                      items:
                        type: string
                      type: array
                    nsToInstrument:
                      items:
                        type: string
                      type: array
                    nsToInstrumentExclude:
                      items:
                        type: string
                      type: array
                    nsToMonitor:
                      items:
                        type: string
                      type: array
                    nsToMonitorExclude:
                      items:
                        type: string
                      type: array
                    snapshotSyncInterval:
                      type: integer
                    version:
                      type: string
                  required:
                    - logLevel
                    - logLines
                    - metricsSyncInterval
                    - snapshotSyncInterval
                  type: object
              required:
                - lastUpdateTime
                - state
              type: object
          type: object