kind: CustomResourceDefinition
spec:
  group: spark.stackable.tech
  names:
    kind: SparkConnectServer
    plural: sparkconnectservers
    singular: sparkconnectserver
    categories: []
    shortNames:
      - sparkconnect
  scope: Namespaced
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          type: object
          title: SparkConnectServer
          required:
            - spec
          properties:
            spec:
              type: object
              required:
                - image
              properties:
                args:
                  type: array
                  items:
                    type: string
                  default: []
                  description: User provided command line arguments appended to the server entry
                    point.
                image:
                  type: object
                  anyOf:
                    - required:
                        - custom
                        - productVersion
                    - required:
                        - productVersion
                  properties:
                    repo:
                      type: string
                      nullable: true
                      description: Name of the docker repo, e.g. `oci.stackable.tech/sdp`
                    custom:
                      type: string
                      description: >-
                        Overwrite the docker image.

                        Specify the full docker image name, e.g.
                        `oci.stackable.tech/sdp/superset:1.4.1-stackable2.1.0`
                    pullPolicy:
                      enum:
                        - IfNotPresent
                        - Always
                        - Never
                      type: string
                      default: Always
                      description: "[Pull
                        policy](https://kubernetes.io/docs/concepts/containers/image\
                        s/#image-pull-policy) used when pulling the image."
                    pullSecrets:
                      type: array
                      items:
                        type: object
                        required:
                          - name
                        properties:
                          name:
                            type: string
                            description: "Name of the referent. This field is effectively required, but due
                              to backwards compatibility is allowed to be empty.
                              Instances of this type with an empty value here
                              are almost certainly wrong. More info:
                              https://kubernetes.io/docs/concepts/overview/work\
                              ing-with-objects/names/#names"
                        description: LocalObjectReference contains enough information to let you locate
                          the referenced object inside the same namespace.
                      nullable: true
                      description: "[Image pull
                        secrets](https://kubernetes.io/docs/concepts/containers\
                        /images/#specifying-imagepullsecrets-on-a-pod) to pull
                        images from a private registry."
                    productVersion:
                      type: string
                      description: Version of the product, e.g. `1.4.1`.
                    stackableVersion:
                      type: string
                      nullable: true
                      description: >-
                        Stackable version of the product, e.g. `23.4`, `23.4.1`
                        or `0.0.0-dev`.

                        If not specified, the operator will use its own version,
                        e.g. `23.4.1`.

                        When using a nightly operator or a pr version, it will
                        use the nightly `0.0.0-dev` image.
                  description: |-
                    Specify which image to use, the easiest way is to only configure the `productVersion`.
                    You can also configure a custom image registry to pull from, as well as completely custom
                    images.

                    Consult the [Product image selection documentation](https://docs.stackable.tech/home/25.11/concepts/product_image_selection)
                    for details.
                server:
                  type: object
                  default:
                    roleConfig:
                      listenerClass: cluster-internal
                  properties:
                    config:
                      type: object
                      default: {}
                      properties:
                        logging:
                          type: object
                          default:
                            containers: {}
                            enableVectorAgent: null
                          properties:
                            containers:
                              type: object
                              description: Log configuration per container.
                              additionalProperties:
                                type: object
                                anyOf:
                                  - required:
                                      - custom
                                  - {}
                                properties:
                                  file:
                                    type: object
                                    nullable: true
                                    properties:
                                      level:
                                        enum:
                                          - TRACE
                                          - DEBUG
                                          - INFO
                                          - WARN
                                          - ERROR
                                          - FATAL
                                          - NONE
                                        type: string
                                        nullable: true
                                        description: >-
                                          The log level threshold.

                                          Log events with a lower log level are
                                          discarded.
                                    description: Configuration for the file appender
                                  custom:
                                    type: object
                                    properties:
                                      configMap:
                                        type: string
                                        nullable: true
                                        description: ConfigMap containing the log configuration files
                                    description: Log configuration provided in a ConfigMap
                                  console:
                                    type: object
                                    nullable: true
                                    properties:
                                      level:
                                        enum:
                                          - TRACE
                                          - DEBUG
                                          - INFO
                                          - WARN
                                          - ERROR
                                          - FATAL
                                          - NONE
                                        type: string
                                        nullable: true
                                        description: >-
                                          The log level threshold.

                                          Log events with a lower log level are
                                          discarded.
                                    description: Configuration for the console appender
                                  loggers:
                                    type: object
                                    default: {}
                                    description: Configuration per logger
                                    additionalProperties:
                                      type: object
                                      properties:
                                        level:
                                          enum:
                                            - TRACE
                                            - DEBUG
                                            - INFO
                                            - WARN
                                            - ERROR
                                            - FATAL
                                            - NONE
                                          type: string
                                          nullable: true
                                          description: >-
                                            The log level threshold.

                                            Log events with a lower log level
                                            are discarded.
                                      description: Configuration of a logger
                                description: Log configuration of the container
                            enableVectorAgent:
                              type: boolean
                              nullable: true
                              description: Wether or not to deploy a container with the Vector log agent.
                          description: Logging configuration, learn more in the [logging concept
                            documentation](https://docs.stackable.tech/home/25.11/concepts/logging).
                        resources:
                          type: object
                          default:
                            cpu:
                              max: null
                              min: null
                            memory:
                              limit: null
                              runtimeLimits: {}
                            storage: {}
                          properties:
                            cpu:
                              type: object
                              default:
                                max: null
                                min: null
                              properties:
                                max:
                                  type: string
                                  nullable: true
                                  description: >-
                                    The maximum amount of CPU cores that can be
                                    requested by Pods.

                                    Equivalent to the `limit` for Pod resource
                                    configuration.

                                    Cores are specified either as a decimal
                                    point number or as milli units.

                                    For example:`1.5` will be 1.5 cores, also
                                    written as `1500m`.
                                min:
                                  type: string
                                  nullable: true
                                  description: >-
                                    The minimal amount of CPU cores that Pods
                                    need to run.

                                    Equivalent to the `request` for Pod resource
                                    configuration.

                                    Cores are specified either as a decimal
                                    point number or as milli units.

                                    For example:`1.5` will be 1.5 cores, also
                                    written as `1500m`.
                            memory:
                              type: object
                              properties:
                                limit:
                                  type: string
                                  nullable: true
                                  description: |-
                                    The maximum amount of memory that should be available to the Pod.
                                    Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/),
                                    which means these suffixes are supported: E, P, T, G, M, k.
                                    You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki.
                                    For example, the following represent roughly the same value:
                                    `128974848, 129e6, 129M,  128974848000m, 123Mi`
                                runtimeLimits:
                                  type: object
                                  description: Additional options that can be specified.
                            storage:
                              type: object
                          description: >-
                            Resource usage is configured here, this includes CPU
                            usage, memory usage and disk storage

                            usage, if this role needs any.
                        requestedSecretLifetime:
                          type: string
                          nullable: true
                          description: >-
                            Request secret (currently only autoTls certificates)
                            lifetime from the secret operator, e.g. `7d`, or
                            `30d`.

                            This can be shortened by the
                            `maxCertificateLifetime` setting on the SecretClass
                            issuing the TLS certificate.
                    roleConfig:
                      type: object
                      default:
                        listenerClass: cluster-internal
                      properties:
                        listenerClass:
                          type: string
                          default: cluster-internal
                          description: |-
                            This field controls which [ListenerClass](https://docs.stackable.tech/home/25.11/listener-operator/listenerclass.html)
                            is used to expose the Spark Connect services.
                      description: Global role config settings for the Spark Connect Server.
                    cliOverrides:
                      type: object
                      default: {}
                      additionalProperties:
                        type: string
                    envOverrides:
                      type: object
                      default: {}
                      description: |-
                        `envOverrides` configure environment variables to be set in the Pods.
                        It is a map from strings to strings - environment variables and the value to set.
                        Read the
                        [environment variable overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#env-overrides)
                        for more information and consult the operator specific usage guide to find out about
                        the product specific environment variables that are available.
                      additionalProperties:
                        type: string
                    podOverrides:
                      type: object
                      default: {}
                      description: |-
                        In the `podOverrides` property you can define a
                        [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
                        to override any property that can be set on a Kubernetes Pod.
                        Read the
                        [Pod overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#pod-overrides)
                        for more information.
                      x-kubernetes-preserve-unknown-fields: true
                    configOverrides:
                      type: object
                      default: {}
                      description: |-
                        The `configOverrides` can be used to configure properties in product config files
                        that are not exposed in the CRD. Read the
                        [config overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#config-overrides)
                        and consult the operator specific usage guide documentation for details on the
                        available config files and settings for the specific product.
                      additionalProperties:
                        type: object
                        additionalProperties:
                          type: string
                    jvmArgumentOverrides:
                      type: object
                      default:
                        add: []
                        remove: []
                        removeRegex: []
                      properties:
                        add:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments to be added
                        remove:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments to be removed by exact match
                        removeRegex:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments matching any of this regexes will be removed
                      description: |-
                        Allows overriding JVM arguments.
                        Please read on the [JVM argument overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#jvm-argument-overrides)
                        for details on the usage.
                  description: A Spark Connect server definition.
                executor:
                  type: object
                  nullable: true
                  properties:
                    config:
                      type: object
                      default: {}
                      properties:
                        logging:
                          type: object
                          default:
                            containers: {}
                            enableVectorAgent: null
                          properties:
                            containers:
                              type: object
                              description: Log configuration per container.
                              additionalProperties:
                                type: object
                                anyOf:
                                  - required:
                                      - custom
                                  - {}
                                properties:
                                  file:
                                    type: object
                                    nullable: true
                                    properties:
                                      level:
                                        enum:
                                          - TRACE
                                          - DEBUG
                                          - INFO
                                          - WARN
                                          - ERROR
                                          - FATAL
                                          - NONE
                                        type: string
                                        nullable: true
                                        description: >-
                                          The log level threshold.

                                          Log events with a lower log level are
                                          discarded.
                                    description: Configuration for the file appender
                                  custom:
                                    type: object
                                    properties:
                                      configMap:
                                        type: string
                                        nullable: true
                                        description: ConfigMap containing the log configuration files
                                    description: Log configuration provided in a ConfigMap
                                  console:
                                    type: object
                                    nullable: true
                                    properties:
                                      level:
                                        enum:
                                          - TRACE
                                          - DEBUG
                                          - INFO
                                          - WARN
                                          - ERROR
                                          - FATAL
                                          - NONE
                                        type: string
                                        nullable: true
                                        description: >-
                                          The log level threshold.

                                          Log events with a lower log level are
                                          discarded.
                                    description: Configuration for the console appender
                                  loggers:
                                    type: object
                                    default: {}
                                    description: Configuration per logger
                                    additionalProperties:
                                      type: object
                                      properties:
                                        level:
                                          enum:
                                            - TRACE
                                            - DEBUG
                                            - INFO
                                            - WARN
                                            - ERROR
                                            - FATAL
                                            - NONE
                                          type: string
                                          nullable: true
                                          description: >-
                                            The log level threshold.

                                            Log events with a lower log level
                                            are discarded.
                                      description: Configuration of a logger
                                description: Log configuration of the container
                            enableVectorAgent:
                              type: boolean
                              nullable: true
                              description: Wether or not to deploy a container with the Vector log agent.
                          description: Logging configuration, learn more in the [logging concept
                            documentation](https://docs.stackable.tech/home/25.11/concepts/logging).
                        affinity:
                          type: object
                          default:
                            podAffinity: null
                            nodeAffinity: null
                            nodeSelector: null
                            podAntiAffinity: null
                          properties:
                            podAffinity:
                              type: object
                              nullable: true
                              description: Same as the `spec.affinity.podAffinity` field on the Pod, see the
                                [Kubernetes
                                docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)
                              x-kubernetes-preserve-unknown-fields: true
                            nodeAffinity:
                              type: object
                              nullable: true
                              description: Same as the `spec.affinity.nodeAffinity` field on the Pod, see the
                                [Kubernetes
                                docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)
                              x-kubernetes-preserve-unknown-fields: true
                            nodeSelector:
                              type: object
                              nullable: true
                              description: Simple key-value pairs forming a nodeSelector, see the [Kubernetes
                                docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)
                              additionalProperties:
                                type: string
                            podAntiAffinity:
                              type: object
                              nullable: true
                              description: Same as the `spec.affinity.podAntiAffinity` field on the Pod, see
                                the [Kubernetes
                                docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)
                              x-kubernetes-preserve-unknown-fields: true
                          description: |-
                            These configuration settings control
                            [Pod placement](https://docs.stackable.tech/home/25.11/concepts/operations/pod_placement).
                        resources:
                          type: object
                          default:
                            cpu:
                              max: null
                              min: null
                            memory:
                              limit: null
                              runtimeLimits: {}
                            storage: {}
                          properties:
                            cpu:
                              type: object
                              default:
                                max: null
                                min: null
                              properties:
                                max:
                                  type: string
                                  nullable: true
                                  description: >-
                                    The maximum amount of CPU cores that can be
                                    requested by Pods.

                                    Equivalent to the `limit` for Pod resource
                                    configuration.

                                    Cores are specified either as a decimal
                                    point number or as milli units.

                                    For example:`1.5` will be 1.5 cores, also
                                    written as `1500m`.
                                min:
                                  type: string
                                  nullable: true
                                  description: >-
                                    The minimal amount of CPU cores that Pods
                                    need to run.

                                    Equivalent to the `request` for Pod resource
                                    configuration.

                                    Cores are specified either as a decimal
                                    point number or as milli units.

                                    For example:`1.5` will be 1.5 cores, also
                                    written as `1500m`.
                            memory:
                              type: object
                              properties:
                                limit:
                                  type: string
                                  nullable: true
                                  description: |-
                                    The maximum amount of memory that should be available to the Pod.
                                    Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/),
                                    which means these suffixes are supported: E, P, T, G, M, k.
                                    You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki.
                                    For example, the following represent roughly the same value:
                                    `128974848, 129e6, 129M,  128974848000m, 123Mi`
                                runtimeLimits:
                                  type: object
                                  description: Additional options that can be specified.
                            storage:
                              type: object
                          description: >-
                            Resource usage is configured here, this includes CPU
                            usage, memory usage and disk storage

                            usage, if this role needs any.
                        requestedSecretLifetime:
                          type: string
                          nullable: true
                          description: >-
                            Request secret (currently only autoTls certificates)
                            lifetime from the secret operator, e.g. `7d`, or
                            `30d`.

                            This can be shortened by the
                            `maxCertificateLifetime` setting on the SecretClass
                            issuing the TLS certificate.
                    cliOverrides:
                      type: object
                      default: {}
                      additionalProperties:
                        type: string
                    envOverrides:
                      type: object
                      default: {}
                      description: |-
                        `envOverrides` configure environment variables to be set in the Pods.
                        It is a map from strings to strings - environment variables and the value to set.
                        Read the
                        [environment variable overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#env-overrides)
                        for more information and consult the operator specific usage guide to find out about
                        the product specific environment variables that are available.
                      additionalProperties:
                        type: string
                    podOverrides:
                      type: object
                      default: {}
                      description: |-
                        In the `podOverrides` property you can define a
                        [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
                        to override any property that can be set on a Kubernetes Pod.
                        Read the
                        [Pod overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#pod-overrides)
                        for more information.
                      x-kubernetes-preserve-unknown-fields: true
                    configOverrides:
                      type: object
                      default: {}
                      description: |-
                        The `configOverrides` can be used to configure properties in product config files
                        that are not exposed in the CRD. Read the
                        [config overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#config-overrides)
                        and consult the operator specific usage guide documentation for details on the
                        available config files and settings for the specific product.
                      additionalProperties:
                        type: object
                        additionalProperties:
                          type: string
                    jvmArgumentOverrides:
                      type: object
                      default:
                        add: []
                        remove: []
                        removeRegex: []
                      properties:
                        add:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments to be added
                        remove:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments to be removed by exact match
                        removeRegex:
                          type: array
                          items:
                            type: string
                          default: []
                          description: JVM arguments matching any of this regexes will be removed
                      description: |-
                        Allows overriding JVM arguments.
                        Please read on the [JVM argument overrides documentation](https://docs.stackable.tech/home/25.11/concepts/overrides#jvm-argument-overrides)
                        for details on the usage.
                  description: Spark Connect executor properties.
                clusterOperation:
                  type: object
                  default:
                    stopped: false
                    reconciliationPaused: false
                  properties:
                    stopped:
                      type: boolean
                      default: false
                      description: >-
                        Flag to stop the cluster. This means all deployed
                        resources (e.g. Services, StatefulSets,

                        ConfigMaps) are kept but all deployed Pods (e.g.
                        replicas from a StatefulSet) are scaled to 0

                        and therefore stopped and removed.

                        If applied at the same time with `reconciliationPaused`,
                        the latter will pause reconciliation

                        and `stopped` will take no effect until
                        `reconciliationPaused` is set to false or removed.
                    reconciliationPaused:
                      type: boolean
                      default: false
                      description: >-
                        Flag to stop cluster reconciliation by the operator.
                        This means that all changes in the

                        custom resource spec are ignored until this flag is set
                        to false or removed. The operator

                        will however still watch the deployed resources at the
                        time and update the custom resource

                        status field.

                        If applied at the same time with `stopped`,
                        `reconciliationPaused` will take precedence over

                        `stopped` and stop the reconciliation immediately.
                  description: |-
                    [Cluster operations](https://docs.stackable.tech/home/25.11/concepts/operations/cluster_operations)
                    properties, allow stopping the product instance as well as pausing reconciliation.
                vectorAggregatorConfigMapName:
                  type: string
                  nullable: true
                  description: >-
                    Name of the Vector aggregator discovery ConfigMap.

                    It must contain the key `ADDRESS` with the address of the
                    Vector aggregator.
              description: |-
                An Apache Spark Connect server component. This resource is managed by the Stackable operator
                for Apache Spark. Find more information on how to use it in the
                [operator documentation](https://docs.stackable.tech/home/25.11/spark-k8s/usage-guide/connect-server).
            status:
              type: object
              nullable: true
              properties:
                conditions:
                  type: array
                  items:
                    type: object
                    required:
                      - status
                      - type
                    properties:
                      type:
                        enum:
                          - Available
                          - Degraded
                          - Progressing
                          - ReconciliationPaused
                          - Stopped
                        type: string
                        description: Type of deployment condition.
                      reason:
                        type: string
                        nullable: true
                        description: The reason for the condition's last transition.
                      status:
                        enum:
                          - "True"
                          - "False"
                          - Unknown
                        type: string
                        description: Status of the condition, one of True, False, Unknown.
                      message:
                        type: string
                        nullable: true
                        description: A human readable message indicating details about the transition.
                      lastTransitionTime:
                        type: string
                        format: date-time
                        nullable: true
                        description: Last time the condition transitioned from one status to another.
                  default: []
          description: Auto-generated derived type for SparkConnectServerSpec via
            `CustomResource`
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns: []
metadata:
  name: sparkconnectservers.spark.stackable.tech
  annotations:
    helm.sh/resource-policy: keep
apiVersion: apiextensions.k8s.io/v1
