# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Default values for solr.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

nameOverride: ""
fullnameOverride: ""

# If you want to use autoScaling, do not set this field
replicas: null

global:
  imagePullSecrets: []
  clusterDomain: ""

# Use a serviceAccount for all pods created under this chart (Solr and ZK)
serviceAccount:
  # Specifies whether a ServiceAccount should be created
  create: false
  # The name of the ServiceAccount to use.
  # Required if create is false.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

  ## Annotations to be added to ServiceAccount
  annotations: {}

image:
  repository: "solr"
  tag: ""
  # Default pullPolicy is empty, which is Always for "latest" tags and IfNotPresent for all others.
  pullPolicy: ""
  imagePullSecret: ""

busyBoxImage: {}
  # repository: "busybox"
  # tag: "1.28.0-glibc"
  # pullPolicy: ""
  # imagePullSecret: ""

solrOptions:
  javaMemory: ""
  javaOpts: ""
  zkJavaOpts: ""
  logLevel: ""
  gcTune: ""
  solrModules: []
  additionalLibs: []

  # Enable authentication for the Solr Cloud
  # More information can be found at:
  # https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#authentication-and-authorization
  security: {}
    # authenticationType: Basic
    # basicAuthSecret: secret-name
    # probesRequireAuth: false
    # bootstrapSecurityJson:
    #   name: my-custom-security-json-secret
    #   key: security.json


# Specify how the SolrCloud should be addressable
# https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#addressability
addressability:
  podPort: 8983
  commonServicePort: null
  # kubeDomain is defaulted by global.clusterDomain if it's not provided
  kubeDomain: ""
  # Use external to provide endpoint(s) for your SolrCloud outside of Kubernetes
  external: {}
    # method: "Ingress"
    # domainName: "example.com"
    # additionalDomainNames: []
    # useExternalAddress: false
    # hideNodes: false
    # hideCommon: false
    # nodePortOverride: null
    # ingressTLSTermination:
    #   tlsSecret: ""
    #   useDefaultTLSSecret: false

# Specify how rolling updates should be managed for the Solr StatefulSet
# https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#update-strategy
updateStrategy:
  method: "Managed"
  # Options for the managed update method
  managed: {}
    # The number of Solr pods in a Solr Cloud that are allowed to be unavailable during the rolling restart.
    # More pods may become unavailable during the restart, however the Solr Operator will not kill pods if the limit has already been reached.
    # Either a static number, or a percentage representing the percentage of total pods requested for the statefulSet.
    # maxPodsUnavailable: "25%"

    # The number of replicas for each shard allowed to be unavailable during the restart.
    # Either a static number, or a percentage representing the percentage of the number of replicas for a shard.
    # Defaults to 1
    # maxShardReplicasUnavailable: 1
  # Cron schedule for automatically restarting the Solr Cloud
  # For available CRON syntaxes, check here: https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format
  restartSchedule: ""

# More information can be found at:
# https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#data-storage
dataStorage:
  # Either persistent or ephemeral
  type: "ephemeral"

  # Specify a capacity for your data storage.
  # This effects both ephemeral and persistent storage.
  capacity: "20Gi"

  # Options for ephemeral storage. Only used if type = "ephemeral"
  ephemeral: {}
    # emptyDir: {}
    # hostPath: {}

  # Options for persistent storage. Only used if type = "persistent"
  persistent:
    reclaimPolicy: "Retain"
    pvc:
      name: ""
      labels: {}
      annotations: {}
      storageClassName: ""

# How to control availability for Solr Nodes
availability:
  # Create PodDisruptionBudget(s) to ensure availability of Solr Nodes
  podDisruptionBudget:
    enabled: true
    method: ClusterWide

# Various settings to control scaling of Solr pods and replicas
scaling:
  vacatePodsOnScaleDown: true
  populatePodsOnScaleUp: true

# A list of BackupRepositories to connect your SolrCloud to
# See either for more information:
# - https://apache.github.io/solr-operator/docs/solr-backup
# - kubectl explain solrcloud.spec.backupRepositories
backupRepositories: []
  # - name: example-repo # Required
  #   gcs:
  #     bucket: example-bucket # Required
  #     gcsCredentialSecret: # Required (unless using GKE's 'Workplace Identity' feature)
  #       name: "gcsSecretName"
  #       key: "service-account-key.json"

zk:
  # A ZooKeeper Node to host all the information for this SolrCloud under
  chroot: ""
  # If true, this will add the "/<namespace>/<name>" to the end of the provided chroot, if any is provided.
  # This will let you deploy multiple Solr Clouds without having to manage the specific chroots yourself.
  uniqueChroot: false

  # Use an existing ZooKeeper cluster
  # Address available within the Kubernetes Cluster
  address: ""
  # Address available both within and outside the Kubernetes Cluster
  externalAddress: ""

  # If no "address" is provided, this defines the ZookeeperCluster created for this SolrCloud
  provided:
    replicas: 3
    labels: {}
    image: {}
      # repository: "pravega/zookeeper"
      # tag: ""
      # pullPolicy: IfNotPresent
      # imagePullSecret: ""
    zookeeperPodPolicy: {}
      # labels: {}
      # affinity: {}
      # tolerations: []
      # nodeSelector: {}
      # env: []
      # resources: {}
      # # Set ZK service account individually instead of the global "serviceAccount.name"
      # serviceAccountName: ""
      # topologySpreadConstraints: []
    # Override the default Zookeeper probes
    probes: {}
    # Add additional containers
    containers: {}
    initContainers: {}
    # Configure the PodDisruptionBudget created for ZK
    maxUnavailableReplicas: 1
    # Add custom volumes
    volumes: []
    volumeMounts: []

    # Customize the ZK services
    adminServerService: {}
    clientService: {}
    headlessService: {}

    # Storage defaults to the type of storage you use for Solr, which is ephemeral by default.
    # Explicitly set the storage type, only necessary when wishing to use an empty persistence or ephemeral object.
    storageType: ""
    persistence: {}
      # reclaimPolicy: "Retain"
      # spec: {}
    ephemeral: {}
      # emptydirvolumesource: {}

    # Zookeeper Config Options to set for the provided cluster
    config: {}

  # Use this section to inject ACL information for your zookeeper from a Kube secret in the same namespace as your SolrCloud
  acl: {}
    # secret: zk-acls
    # usernameKey: username
    # passwordKey: password

  # Use this section to inject ACL information for your zookeeper from a Kube secret in the same namespace as your SolrCloud
  readOnlyAcl: {}
    # secret: zk-acls
    # usernameKey: username
    # passwordKey: password

# Enable TLS between your SolrCloud nodes
# More information can be found at:
# https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#enable-tls-between-solr-pods
solrTLS: {}
  # pkcs12Secret:
  #   name: secret-name
  #   key: pkcs12-key
  # keyStorePasswordSecret:
  #   name: secret-name
  #   key: password-key
  # trustStoreSecret:
  #   name: secret-name
  #   key: truststore-key
  # trustStorePasswordSecret:
  #   name: secret-name
  #   key: password-key
  # clientAuth: None
  # verifyClientHostname: false
  # checkPeerName: false
  # restartOnTLSSecretUpdate: false
  # mountedTLSDir:
  #   path: /path/to/mounted/tls
  #   keystoreFile: "keystore.p12"
  #   keystorePasswordFile: ""
  #   keystorePassword: ""
  #   truststoreFile: "truststore.p12"
  #   truststorePasswordFile: ""
  #   truststorePassword: ""

solrClientTLS: {}
  # pkcs12Secret:
  #   name: secret-name
  #   key: pkcs12-key
  # keyStorePasswordSecret:
  #   name: secret-name
  #   key: password-key
  # trustStoreSecret:
  #   name: secret-name
  #   key: truststore-key
  # trustStorePasswordSecret:
  #   name: secret-name
  #   key: password-key
  # mountedTLSDir:
  #   path: /path/to/mounted/tls
  #   keystoreFile: "keystore.p12"
  #   keystorePasswordFile: ""
  #   keystorePassword: ""
  #   truststoreFile: "truststore.p12"
  #   truststorePasswordFile: ""
  #   truststorePassword: ""

# Customize the Solr Pod for your needs
podOptions:
  annotations: {}
  labels: {}

  # Add extra sidecar or init containers, e.g. for log or metrics forwarding
  sidecarContainers: []
  initContainers: []

  priorityClassName: ""
  envVars: []
  podSecurityContext: {}
  containerSecurityContext: {}
  terminationGracePeriodSeconds: null

  # Set Solr service account individually instead of the global "serviceAccount.name"
  serviceAccountName: ""

  shareProcessNamespace: false

  # Manage where the Solr pods are scheduled
  affinity: {}
  tolerations: []
  nodeSelector: {}
  # Documentation available at https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
  # If a labelSelector is not provided, it will be auto-populated by the Solr Operator to match the statefulSet labels
  topologySpreadConstraints: []
    # - maxSkew: 1
    #   topologyKey: zone
    #   whenUnsatisfiable: DoNotSchedule

  # Probes for the Solr pods
  livenessProbe: {}
  readinessProbe: {}
  startupProbe: {}
  
  # Lifecycle for the Solr container
  lifecycle: {}

  imagePullSecrets: []

  resources: {}
    # limits:
    #   cpu: "2"
    #   memory: 10G
    # requests:
    #   cpu: 500m
    #   memory: 4G

  # Resources for the init containers created by the Solr Operator
  defaultInitContainerResources: {}

  volumes: []
    # - name:
    #   defaultContainerMount: {}
    #   source: {}

statefulSetOptions:
  annotations: {}
  labels: {}

  # Specify a podManagementPolicy when you want control over how scale-ups and scale-downs occur
  # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
  # The default is: Parallel
  podManagementPolicy: ""

commonServiceOptions:
  annotations: {}
  labels: {}

headlessServiceOptions:
  annotations: {}
  labels: {}

nodeServiceOptions:
  annotations: {}
  labels: {}

ingressOptions:
  annotations: {}
  labels: {}
  ingressClassName: ""

configMapOptions:
  annotations: {}
  labels: {}

  # This is an extremely advanced option, do not use it without understanding the requirements of the solr.xml you provide.
  providedConfigMap: ""
