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

## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
##
# global:
#   imageRegistry: myRegistryName
#   imagePullSecrets:
#     - myRegistryKeySecretName
#   storageClass: myStorageClass

## Invoice Ninja image version
## ref: https://github.com/invoiceninja/dockerfiles
##
image:
  registry: docker.io
  repository: invoiceninja/invoiceninja
  tag: 5.3.39
  ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
  ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
  ##
  pullPolicy: IfNotPresent
  ## Optionally specify an array of imagePullSecrets.
  ## Secrets must be manually created in the namespace.
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
  ##
  # pullSecrets:
  #   - myRegistryKeySecretName

## String to turn on debug mode in Invoice Ninja
##
debug: false

## A 32 character long Application Key
##
appKey: ""

## Override app URL
##
appURL: ""

## Email of user to create first run
## If not specified, default user email will be "admin@example.com"
##
userEmail: ""

## Password of user to create on first run
## If not specified, default user password will be "changeme!"
##
userPassword: ""

## Name of log channel to use
##
logChannel: ""

## Name of broadcast driver to use
##
broadcastDriver: ""

## Name of cache driver to use
##
cacheDriver: ""

## Name of session driver to use
##
sessionDriver: ""

## Name of queue connection to use
##
queueConnection: ""

## List of trusted proxies for Invoice Ninja to communicate with the nginx proxy
##
trustedProxies: "*"

## Use local or Phantom JS PDF generation
## Options are `snappdf` or `phantom`
##
pdfGenerator: snappdf

## Name of queue connection to use (use "log" for debug)
## Please check the ref below for any other env you may need to define
## ref: https://github.com/invoiceninja/invoiceninja/blob/v5-stable/config/mail.php
##
mailer: log

## Force HTTPS for all connections to Invoice Ninja
##
requireHttps: false

## Name of existing secret containing IN credentials
## NOTE: Must contain key `APP_KEY` and `IN_PASSWORD`
## NOTE: When it's set, the `appKey` and `userPassword` parameter is ignored
##
existingSecret:

## String to partially override fullname template (will maintain the release name)
##
# nameOverride:

## String to fully override fullname template
##
# fullnameOverride:

## Add labels to all the deployed resources
##
commonLabels: {}

## Add annotations to all the deployed resources
##
commonAnnotations: {}

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

## Pod Labels
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
##
podLabels: {}

## Pod annotations
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
##
podAnnotations: {}

## Pod affinity preset
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
## Allowed values: soft, hard
##
podAffinityPreset: ""

## Pod anti-affinity preset
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
## Allowed values: soft, hard
##
podAntiAffinityPreset: soft

## Node affinity preset
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
## Allowed values: soft, hard
##
nodeAffinityPreset:
  ## Node affinity type
  ## Allowed values: soft, hard
  ##
  type: ""
  ## Node label key to match
  ## E.g.
  ## key: "kubernetes.io/e2e-az-name"
  ##
  key: ""
  ## Node label values to match
  ## E.g.
  ## values:
  ##   - e2e-az1
  ##   - e2e-az2
  ##
  values: []

## Affinity for pod assignment. Evaluated as a template.
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
## Note: podAffinityPreset, podAntiAffinityPreset, and nodeAffinityPreset will be ignored when it's set
##
affinity: {}

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

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

## Configure Pods Security Context
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
##
podSecurityContext:
  fsGroup: 1500

## Configure Container Security Context (only main container)
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
##
containerSecurityContext:
  runAsNonRoot: true
  runAsUser: 1500
  # runAsGroup: 1500
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true

## Init containers parameters:
## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section.
##
volumePermissions:
  enabled: false
  image:
    registry: docker.io
    repository: bitnami/bitnami-shell
    tag: "10"
    pullPolicy: Always
    ## Optionally specify an array of imagePullSecrets.
    ## Secrets must be manually created in the namespace.
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
    ##
    # pullSecrets:
    #   - myRegistryKeySecretName
  resources: {}

## Number of replicas (requires ReadWriteMany PVC support)
##
replicaCount: 1

## Set up update strategy for Invoice Ninja installation. Set to Recreate if you use persistent volume that cannot be mounted by more than one pods to makesure the pods is destroyed first.
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
## Example:
## updateStrategy:
##  type: RollingUpdate
##  rollingUpdate:
##    maxSurge: 25%
##    maxUnavailable: 25%
##
updateStrategy:
  type: RollingUpdate

## Container ports
##
containerPorts:
  fastcgi: 9000

## An array to add extra env vars
## Example:
## extraEnvVars:
##   - name: FOO
##     value: "bar"
##
extraEnvVars: []

## ConfigMap with extra environment variables
##
extraEnvVarsCM:

## Secret with extra environment variables
##
extraEnvVarsSecret:

## Extra volume mounts to add to the container
##
extraVolumeMounts: []

## Configure extra options for liveness and readiness probes
## This applies to all the Invoice Ninja in the cluster
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
##
livenessProbe:
  enabled: true
  initialDelaySeconds: 120
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 6
  successThreshold: 1
readinessProbe:
  enabled: true
  initialDelaySeconds: 15
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 6
  successThreshold: 1
  port: fastcgi

resources:
  {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

## Inline http server (this is enabled only if nginx sub chart is disabled).
##
http:
  image:
    registry: docker.io
    repository: bitnami/nginx
    tag: 1.21.1-debian-10-r0
    ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
    ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
    ##
    pullPolicy: IfNotPresent
    ## Optionally specify an array of imagePullSecrets.
    ## Secrets must be manually created in the namespace.
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
    ##
    # pullSecrets:
    #   - myRegistryKeySecretName

  ## Container ports
  ##
  containerPorts:
    http: 8080
    https: 8443

  ## An array to add extra env vars
  ## Example:
  ## extraEnvVars:
  ##   - name: FOO
  ##     value: "bar"
  ##
  extraEnvVars: []

  ## ConfigMap with extra environment variables
  ##
  extraEnvVarsCM:

  ## Secret with extra environment variables
  ##
  extraEnvVarsSecret:

  ## Extra volume mounts to add to the container
  ##
  extraVolumeMounts: []

  ## Configure extra options for liveness and readiness probes
  ## This applies to all the web server in the cluster
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
  ##
  livenessProbe:
    enabled: true
    initialDelaySeconds: 10
    periodSeconds: 10
    timeoutSeconds: 5
    failureThreshold: 6
    successThreshold: 1
  readinessProbe:
    enabled: true
    initialDelaySeconds: 15
    periodSeconds: 10
    timeoutSeconds: 5
    failureThreshold: 6
    successThreshold: 1

  resources:
    {}
    # We usually recommend not to specify default resources and to leave this as a conscious
    # choice for the user. This also increases chances charts run on environments with little
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
    # limits:
    #   cpu: 100m
    #   memory: 128Mi
    # requests:
    #   cpu: 100m
    #   memory: 128Mi

## Extra volumes to add to the deployment
##
extraVolumes: []

## Kubernetes service type
## ref: https://kubernetes.io/docs/concepts/services-networking/service/
## Set this to NodePort, LoadBalancer or ClusterIP
##
service:
  ## Service type
  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
  ##
  type: ClusterIP
  ## Service ports
  ##
  port: 9000
  ## Specify the nodePort value for the LoadBalancer and NodePort service types.
  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
  ##
  nodePort: ""
  ## Service clusterIP.
  ##
  # clusterIP: None
  ## Specify the loadBalancerIP value for LoadBalancer service types.
  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer
  ##
  # loadBalancerIP:
  ## Specify the loadBalancerSourceRanges value for LoadBalancer service types.
  ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
  ##
  loadBalancerSourceRanges: []
  ## Enable client source IP preservation
  ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
  ##
  externalTrafficPolicy: Cluster
  ## Additional service annotations (evaluate as a template)
  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
  ##
  annotations: {}
  ## Service for http server
  ##
  http:
    ## Service type
    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
    ##
    type: ClusterIP
    ## Service ports
    ##
    ports:
      http: 8080
      https: 8443
    ## Specify the nodePort value for the LoadBalancer and NodePort service types.
    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
    ##
    nodePorts:
      http: ""
      https: ""
    ## Service clusterIP.
    ##
    # clusterIP: None
    ## Specify the loadBalancerIP value for LoadBalancer service types.
    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer
    ##
    # loadBalancerIP:
    ## Specify the loadBalancerSourceRanges value for LoadBalancer service types.
    ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
    ##
    loadBalancerSourceRanges: []
    ## Enable client source IP preservation
    ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
    ##
    externalTrafficPolicy: Cluster
    ## Additional service annotations (evaluate as a template)
    ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
    ##
    annotations: {}

## Configure the ingress resource to access IN (this is enabled only if nginx sub chart is disabled).
## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
##
ingress:
  ## Enable ingress
  ##
  enabled: true
  ## Add the corresponding annotations for cert-manager integration
  ##
  certManager: false
  ## Ingress path type
  ##
  pathType: ImplementationSpecific
  ## Force Ingress API version (automatically detected if not set)
  ##
  apiVersion:
  ## IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
  ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
  ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
  ##
  ingressClassName:
  ## Default host for the ingress record
  ##
  hostname: invoiceninja.local
  ## Default path for the ingress record
  ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
  ##
  path: /
  ## Additional custom annotations for the ingress record
  ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added
  ##
  annotations: {}
  ## Enable TLS configuration for the host defined at `ingress.hostname` parameter
  ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
  ## You can:
  ##   - Use the `ingress.secrets` parameter to create this TLS secret
  ##   - Relay on cert-manager to create it by setting `ingress.certManager=true`
  ##   - Relay on Helm to create self-signed certificates by setting `ingress.tls=true` and `ingress.certManager=false`
  ##
  tls: false
  ## An array with additional hostname(s) to be covered with the ingress record
  ## e.g:
  ## extraHosts:
  ##   - name: invoiceninja.local
  ##     path: /
  ##
  extraHosts: []
  ## An array with additional arbitrary paths that may need to be added to the ingress under the main host
  ## e.g:
  ## extraPaths:
  ## - path: /*
  ##   backend:
  ##     serviceName: ssl-redirect
  ##     servicePort: use-annotation
  ##
  extraPaths: []
  ## TLS configuration for additional hostname(s) to be covered with this ingress record
  ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
  ## e.g:
  ## extraTls:
  ## - hosts:
  ##     - invoiceninja.local
  ##   secretName: invoiceninja.local-tls
  ##
  extraTls: []
  ## Custom TLS certificates as secrets
  ## NOTE: 'key' and 'certificate' are expected in PEM format
  ## NOTE: 'name' should line up with a 'secretName' set further up
  ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
  ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
  ## It is also possible to create and manage the certificates outside of this helm chart
  ## Please see README.md for more information
  ## e.g:
  ## secrets:
  ##   - name: invoiceninja.local-tls
  ##     key: |-
  ##       -----BEGIN RSA PRIVATE KEY-----
  ##       ...
  ##       -----END RSA PRIVATE KEY-----
  ##     certificate: |-
  ##       -----BEGIN CERTIFICATE-----
  ##       ...
  ##       -----END CERTIFICATE-----
  ##
  secrets: []

## Enable persistence using Persistent Volume Claims
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
##
persistence:
  public:
    enabled: true
    ## Invoice Ninja 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: "-"
    ##
    ## If you want to reuse an existing claim, you can pass the name of the PVC using
    ## the existingClaim variable
    # existingClaim: your-claim
    accessMode: ReadWriteOnce
    size: 1Gi
    ## Custom dataSource
    ##
    dataSource: {}
  storage:
    ## Only required when using FILE cache or session driver
    enabled: false
    ## Invoice Ninja 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: "-"
    ##
    ## If you want to reuse an existing claim, you can pass the name of the PVC using
    ## the existingClaim variable
    # existingClaim: your-claim
    accessMode: ReadWriteMany
    size: 10Gi
    ## Custom dataSource
    ##
    dataSource: {}

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

## Redis chart configuration
## ref: https://github.com/bitnami/charts/blob/master/bitnami/redis/values.yaml
##
redis:
  enabled: true
  auth:
    sentinel: false
  sentinel:
    enabled: true
    quorum: 1
  replica:
    replicaCount: 1

## External Redis Configuration
##
## All of these values are only used when redis.enabled is set to false
##
externalRedis:
  ## Redis/Sentinel host
  ##
  host: ""
  ## Redis/Sentinel port number
  ##
  port: 6379
  ## Redis password
  ##
  password: ""
  ## Use existing secret (ignores previous password)
  ## must contain key `redis-password`
  ## NOTE: When it's set, the `externalRedis.password` parameter is ignored
  ##
  # existingSecret:
  ## Whether Redis Sentinel are used
  sentinel: false
  ## Redis databases
  ##
  databases:
    default: "0"
    cache: "1"

## MariaDB chart configuration
## ref: https://github.com/bitnami/charts/blob/master/bitnami/mariadb/values.yaml
##
mariadb:
  ## Whether to deploy a MariaDB server to satisfy the applications database requirements.
  ## To use an external database set this to false and configure the externaldb parameters
  ##
  enabled: true
  ## MariaDB Authentication parameters
  ##
  auth:
    ## MariaDB root password
    ##
    # rootPassword: changeit
    ## MariaDB custom user and database
    ##
    username: invoiceninja
    database: invoiceninja
    # password: changeit

## External Database Configuration
##
## All of these values are only used when mariadb.enabled is set to false
##
externalDatabase:
  ## Database host
  ##
  host: ""
  ## non-root Username for Invoice Ninja Database
  ##
  user: invoiceninja
  ## Database password
  ##
  password: ""
  ## Database name
  ##
  database: invoiceninja
  ## Database port number
  ##
  port: 3306
  ## Use existing secret (ignores previous password)
  ## must contain key `mariadb-password`
  ## NOTE: When it's set, the `externalDatabase.password` parameter is ignored
  ##
  # existingSecret:

## Nginx chart configuration
## ref: https://github.com/bitnami/charts/blob/master/bitnami/nginx/values.yaml
##
nginx:
  enabled: false
  service:
    ## Service type
    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
    ##
    type: ClusterIP
  ## Configure the ingress resource that allows you to access the Invoice Ninja
  ## ref: http://kubernetes.io/docs/user-guide/ingress/
  ##
  ingress:
    enabled: true
    hostname: invoiceninja.local
  ## Use the serverblock config map from Invoice Ninja
  ##
  existingServerBlockConfigmap: '{{ include "invoiceninja.nginx.serverBlockName" . }}'
  ## Use the public PVC created by Invoice Ninja
  ##
  staticSitePVC: '{{ include "invoiceninja.public.storageName" . }}'
