# Default values for Neo4j.
# This is a YAML-formatted file.
# Declare name/value pairs to be passed into your templates.
# name: value

name: "neo4j"

# Specs for the Neo4j docker image
image: "neo4j"
imageTag: "4.4.10-enterprise"
imagePullPolicy: "IfNotPresent"
# imagePullSecret: registry-secret
acceptLicenseAgreement: "no"
podDisruptionBudget: {}
  # minAvailable: 2
  # maxUnavailable: 1

## Node labels for pod assignment
## ref: https://kubernetes.io/docs/user-guide/node-selection/
nodeSelector: {}

## Tolerations for pod assignment
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
tolerations: []

## Affinity for pod assignment
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
affinity: {}

## Labels to be added to pods
podLabels: {}

## Annotations to be added to pods
podAnnotations: {}

# Use password authentication
authEnabled: true

## Specify password for neo4j user
## Defaults to a random 10-character alphanumeric string if not set and authEnabled is true
neo4jPassword: insur132

## Specify secret name containing the password for neo4j user
# existingPasswordSecret
## Specify the key in existingPasswordSecret, in which the password is contained
# existingPasswordSecretKey

# Specify cluster domain (used eg. as suffix in the eventual internal hostnames)
clusterDomain: "cluster.local"

# Specs for the images used for running tests against the Helm package
# https://github.com/mneedham/k8s-kubectl this is a general kubectl docker image
testImage: "gcr.io/neo4j-helm/tester"

# Whether or not to use APOC: https://neo4j.com/labs/apoc/
# If you do not want APOC, make the array empty []
plugins: "[\"apoc\"]"

# The default name of the Neo4j database to use.
# See https://neo4j.com/docs/operations-manual/current/manage-databases/introduction/#manage-databases-default
defaultDatabase: "neo4j"

# Cores
core:
  # configMap: "my-custom-configmap"
  envFrom: []

  resources: {}
  # limits:
  #   cpu: "100m"
  #   memory: 512Mi
  # requests:
  #   cpu: "100m"
  #   memory: 512Mi

  standalone: false
  numberOfServers: 3
  persistentVolume:
    ## whether or not persistence is enabled
    ##
    enabled: true

    ## core server data Persistent Volume mount root path
    ##
    mountPath: /data

    ## core server data Persistent Volume size
    ## default value is large because in most cloud providers disk IOPS are proportional to disk size. Small disks frequently encounter IOPS throttling which
    ## is extremely detrimental to neo4j performance.
    size: 1Ti

    ## core server data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ## storageClass: "-"

    ## Subdirectory of core server data Persistent Volume to mount
    ## Useful if the volume's root directory is not empty
    ##
    ## subPath: ""

  sidecarContainers: []
  ## Additional containers to be added to the Neo4j core pod.
  #  - name: my-sidecar
  #    image: nginx:latest

  initContainers: []
  ## init containers to run before the Neo4j core pod e.g. to install plugins
  ## They can also be used to restore from last available backup, to ensure that newly joining
  ## core members have less TX history to catch up on before joining the cluster.
  ## Note that this is specifically *not* needed for APOC, which is included by default.
  # - name: init-plugins
  #   image: "appropriate/curl:latest"
  #   imagePullPolicy: "IfNotPresent"
  #   volumeMounts:
  #   - name: plugins
  #     mountPath: /plugins
  #   command:
  #     - "/bin/sh"
  #     - "-c"
  #     - |
  #       curl -L https://somesite.com/path/to/plugin.jar -O
  #       cp plugin.jar /plugins/

  ## This service is intended for clients running in kubernetes to connect to
  ## the cluster.
  ## Default: ClusterIP (headless)
  service:
    type: ClusterIP
    annotations: {}
    labels: {}
    loadBalancerSourceRanges: []

  ## This creates a discovery Service for each member in the core set, and ties
  ## to the use of the Neo4j discovery type "K8S" with the configured selectors.
  ## Default: ClusterIP (headless)
  discoveryService:
    type: ClusterIP
    annotations: {}
    labels: {}
    loadBalancerSourceRanges: []
    # Controls how many services get created.  Usually want to over-provision so cores can
    # scale up for things like rolling upgrades.
    instances: [0, 1, 2, 3, 4, 5]
    standaloneOnly: [0]

  ## specify additional volumes to mount in the core container, this can be used
  ## to specify additional storage of material or to inject files from ConfigMaps
  ## into the running container
  additionalVolumes: []

  ## specify where the additional volumes are mounted in the core container
  additionalVolumeMounts: []
  terminationGracePeriodSeconds: 300

  restore:
    enabled: false
    image: gcr.io/neo4j-helm/restore
    imageTag: 4.4.10
    secretName: null
    database: neo4j,system
    cloudProvider: gcp
    bucket: gs://test-neo4j
    timestamp: "latest"
    forceOverwrite: true
    purgeOnComplete: true

# Read Replicas
readReplica:
  # configMap: "my-custom-configmap"
  envFrom: []

  resources: {}
  # limits:
  #   cpu: "100m"
  #   memory: 512Mi
  # requests:
  #   cpu: "100m"
  #   memory: 512Mi

  autoscaling:
    enabled: false
    targetAverageUtilization: 70
    minReplicas: 1
    maxReplicas: 3

  numberOfServers: 0
  persistentVolume:
    enabled: true
    mountPath: /data
    ## default value is large because in most cloud providers disk IOPS are proportional to disk size. Small disks frequently encounter IOPS throttling which
    ## is extremely detrimental to neo4j performance.
    size: 1Ti
    ## subPath: ""
    ## read replica data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ## storageClass: "-"

  sidecarContainers: []
  ## Additional containers to be added to the Neo4j replica pod.
  #  - name: my-sidecar
  #    image: nginx:latest

  initContainers: []
  ## init containers to run before the Neo4j replica pod e.g. to install custom plugins
  ## They can also be used to restore from last available backup, to ensure that newly joining
  ## core members have less TX history to catch up on before joining the cluster.
  ## Note that this is specifically *not* needed for APOC, which is included by default.
  # - name: init-plugins
  #   image: "appropriate/curl:latest"
  #   imagePullPolicy: "IfNotPresent"
  #   volumeMounts:
  #   - name: plugins
  #     mountPath: /plugins
  #   command:
  #     - "/bin/sh"
  #     - "-c"
  #     - |
  #       curl -L https://somesite.com/path/to/plugin.jar -O
  #       cp plugin.jar /plugins/

  ## This service is intended for clients running in kubernetes to connect to
  ## the cluster replica set.
  ## Default: ClusterIP (headless)
  service:
    type: ClusterIP
    annotations: {}
    labels: {}
    loadBalancerSourceRanges: []

  ## specify additional volumes to mount in the read replica container, this can
  ## be used to specify additional storage of material or to inject files from
  ## ConfigMaps into the running container
  additionalVolumes: []

  ## specify where the additional volumes are mounted in the read replica
  ## container
  additionalVolumeMounts: []
  terminationGracePeriodSeconds: 300

  restore:
    enabled: false
    image: gcr.io/neo4j-helm/restore
    imageTag: 4.1.0-1
    secretName: null
    database: neo4j,system
    cloudProvider: gcp
    bucket: gs://test-neo4j
    timestamp: "latest"
    forceOverwrite: true
    purgeOnComplete: true

# Readiness probes will send a kill signal to the container if
# it fails enough times.  It's therefore very important
# that initialDelaySeconds give the cluster time to form, because
# if readiness probes start immediately after container start,
# they may end up not forming quickly enough and getting killed.
# DEPENDENCY:  If you're running in standalone mode, the single machine
# starts much faster.  You could set initialDelaySeconds to something like
# 30 and it would be OK for a stand-alone machine, but not for a cluster.
readinessProbe:
  initialDelaySeconds: 120
  failureThreshold: 3
  timeoutSeconds: 2
  periodSeconds: 10
  tcpSocket:
    port: 7687 

livenessProbe:
  initialDelaySeconds: 300
  periodSeconds: 10
  failureThreshold: 3
  timeoutSeconds: 2
  tcpSocket:
    port: 7687

# Startup probes are used to know when a container application has started.
# If such a probe is configured, it disables liveness and readiness checks until it succeeds
startupProbe:
  failureThreshold: 2000
  periodSeconds: 25
  tcpSocket:
    port: 7687

## (OPTIONAL) Expose Neo4j metrics
# The structure of this object matches the Neo4j config syntax
# Found in chapter 13 of the operations manual:
# https://neo4j.com/docs/operations-manual/current/monitoring/metrics/expose/
metrics:
  graphite:
    enabled: false
    server: localhost:2003
    interval: 3s
    # This will be set to the app name later.
    # metrics.prefix=Neo4j_1
  prometheus:
    ## Publish metrics for polling as Prometheus endpoint
    enabled: false
    endpoint: localhost:2004
  csv:
    enabled: true
    interval: 3s
  jmx:
    enabled: true

dbms:
  memory:
    use_memrec: false
    heap:
      initial_size: ""
      max_size: ""
    pagecache:
      size: ""
    transaction:
      memory_allocation: ""
      # maximum size of an individual transaction
      max_size: ""
      # maximum size of all transactions combined
      global_max_size: ""


# Create Role and RoleBinding
rbac:
  create: true

serviceAccount:
  create: true
  annotations: {}
  # If empty, name will be generated from the chart's fullname
  name:

securityContext: {}
# Sets securityContext at the pod level.
# The following values for securityContext are recommended but may depend on your specific volume and filesystem settings
#  runAsNonRoot: true
#  runAsUser: 7474

containerSecurityContext: {}
# Sets securityContext at the container level.
# We recommend to only use this if (pod) securityContext cannot be used. For example certain security options can only be set at this level.
#   allowPrivilegeEscalation: false
