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

## @param nameOverride String to partially override name template (will maintain the release name) Default: ""
nameOverride: ""

## @param clusterDomain Kubernetes Cluster Domain Default: "cluster.local"
clusterDomain: "cluster.local"

global:
  ## @param global.imagePullSecrets Global image pull secrets Default: {}
  imagePullSecrets: []
  projectId: null
  projectName: null

images:
  app:
    registry: qmigrator.azurecr.io
    image: qui
    tag: "ora2pg-3062-v4.0.0.3061"
    pullPolicy: IfNotPresent
  eng:
    registry: qmigrator.azurecr.io
    image: qapi
    tag: "ora2pg-3055-v4.0.0.1174"
    pullPolicy: IfNotPresent
  db:
    registry: qmigrator.azurecr.io
    image: postgres
    tag: "16"
    pullPolicy: IfNotPresent
  dbJob:
    registry: qmigrator.azurecr.io
    image: qpdb
    tag: common-v4.0.7.235
    pullPolicy: IfNotPresent
  msg:
    registry: qmigrator.azurecr.io
    image: eqalpha/keydb
    tag: "alpine_3.19_v6.3.4"
    pullPolicy: IfNotPresent
  asses:
    registry: qmigrator.azurecr.io
    image: qasmt
    tag: "oracle_postgres-3055-v4.0.0.2533"
    pullPolicy: IfNotPresent
  convs:
    registry: qmigrator.azurecr.io
    image: qconv
    tag: "oracle_postgres-3055-v4.0.0.2529"
    pullPolicy: IfNotPresent
  migrt:
    registry: qmigrator.azurecr.io
    image: qdmgr
    tag: "oracle_postgres-3055-v4.0.0.2520"
    pullPolicy: IfNotPresent
  airflow:
    registry: qmigrator.azurecr.io
    image: qair
    tag: "ora2pg-2.10.5-312"
    pullPolicy: IfNotPresent
    
## Required global project information to be created in secret
secret:
  create: true
  ## @param secret.secretName Name for project secret Default: "" (name: qmig-secret)
  secretName: ""
  ## @param secret.annotations Annotations for secrets Default: {}
  annotations: {}
  ## @param secret.labels Labels for secrets Default: {}
  labels: {}
  data:
    ## @param secret.data.POSTGRES_PASSWORD Admin Password for metadata DB Default: null
    POSTGRES_PASSWORD: null
    ## @param secret.data.REDIS_PASSWORD Admin Password for Cache Default: null
    REDIS_PASSWORD: null

## Required docker registry information to pull images from
imageCredentials:
  ## @param imageCredentials.create create docker pull secret Default: true
  create: true
  ## @param imageCredentials.secretName Name for docker secret Default: "" (name: qmig-docker)
  secretName: "" 
  ## @param imageCredentials.annotations Annotations for docker secret Default: {}
  annotations: {}
  ## @param imageCredentials.labels Labels for docker secret Default: {}
  labels: {}
  data:
    ## @param imageCredentials.data.registry Server/Registry host. Default: qmigrator.azurecr.io
    registry: qmigrator.azurecr.io
    ## @param imageCredentials.data.username Username for given docker host Default: null
    username: null
    ## @param imageCredentials.data.password Password for given docker host Default: null
    password: null

## QMigrator shares PersistentVolume & information about the volume folders used by Airflow too
## @param shared.persistentVolume.enabled If false, use emptyDir Default: true
## @param shared.persistentVolume.accessModes How should the volume be accessible in App Default: ReadWriteMany
## @param shared.persistentVolume.annotations Persistent Volume Claim annotations Default: {}
## @param shared.persistentVolume.labels Labels for docker persistentVolume Default: {}
## @param shared.persistentVolume.existingClaim Name of PVC created manually before volume Default: ""
## @param shared.persistentVolume.subPath Subdirectory of data Persistent Volume to mount Default: ""
## @param shared.persistentVolume.size Persistent Volume size Default: 4Gi
## @param shared.persistentVolume.storageClass Persistent Volume Storage Class Default: "" (Default from Kubernetes)
## @param shared.persistentVolume.volumeBindingMode Persistent Volume Binding Mode Default: "" (Default from Kubernetes)
shared:
  persistentVolume:
    enabled: true

    ## Must match those of existing PV or dynamic provisioner
    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
    accessModes:
      - ReadWriteMany

    ## data Persistent Volume Claim annotations
    annotations: {}
    ## data Persistent Volume Claim labels
    labels: {}

    ## Requires shared.persistentVolume.enabled: true
    ## If defined, PVC must be created manually before volume will be bound
    existingClaim: ""

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

    ## data Persistent Volume size
    size: 4Gi

    ## 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: ""

    ## data Persistent Volume Binding Mode
    ## If defined, volumeBindingMode: <volumeBindingMode>
    ## If undefined (the default) or set to null, no volumeBindingMode spec is
    ##   set, choosing the default mode.
    volumeBindingMode: ""

  ## Folder used on Airflow must be given to QMigrator for sharing files
  ## Subpath if defined in Airflow | Default is "" (Empty) the root of volume will be used
  ## @param shared.folderPath.extraSubpath subpath for Extra folder in a shared volume Default: "extra"
  ## @param shared.folderPath.dagsSubpath subpath for Dag's folder of airflow in a shared volume Default: "dags"
  ## @param shared.folderPath.logsSubpath subpath for logs folder of airflow in a shared volume Default: "logs"
  folderPath:
    extraSubpath: "extra"
    dagsSubpath: "dags"
    logsSubpath: "logs"

## Qmigrator Gateway API parameters
## ref: https://gateway-api.sigs.k8s.io/api-types/gateway/
gateway:
  name: ""
  ## @param gateway.enabled Enable create gateway Default: false
  enabled: false
  ## @param gateway.className GatewayClass that will be used to implement the gateway Default: "nginx"
  gatewayClassName: "nginx"
  ## @param gateway.annotations Additional annotations for the gateway resource Default: {}
  annotations: {}
  ## @param gateway.labels Add labels for the gateway Default: {}
  labels: {}
  ## @param gateway.listeners Add listerners for the gateway Default: - 
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    allowedRoutes:
      namespaces:
        from: Same

httpRoutes:
  name: ""
  ## @param httpRoutes.enabled Create the routes on gateway Default: false
  enabled: false
  ## @param httpRoutes.className GatewayClass name Default: "nginx"
  gatewayClassName: "nginx"
  ## @param httpRoutes.annotations Additional annotations for the httpRoutes Default: {}
  annotations: {}
  ## @param httpRoutes.labels Add labels for the httpRoutes Default: {}
  labels: {}
  ## @param httpRoutes.parentRefs define route parents to gateway Default: -
  parentRefs: []
  ## @param httpRoutes.hostnames hostnames in routes record Default: []
  hostnames: []
  ## @param httpRoutes.redirectHttp create redirect filter http to https Default: false
  redirectHttp: false

## Service account for QMigrator pods to use.
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
serviceAccount:
  ## @param serviceAccount.create Enable creation of ServiceAccount Default: true
  create: true
  ## @param serviceAccount.name The name of the ServiceAccount to use Default: "" (name: qmig-opr)
  ## If not set and create is true, a name is generated default
  name: ""
  ## @param serviceAccount.annotations Additional custom annotations for the ServiceAccount Default: {}
  annotations: {}

  ## @param serviceAccount.labels Labels for ServiceAccount Default: {}
  labels: {}

## Enable RBAC (default on most clusters these days)
## Role Based Access
## Ref: https://kubernetes.io/docs/admin/authorization/rbac/
## @param rbac.create Create Role and RoleBinding Default: true
rbac:
  ## - if `false`, you must create a custom Role and RoleBinding for the ServiceAccount defined in `serviceAccount.name`
  create: true

## App component
## @param app.name Name for App component Default: "app"
## @param app.replicas Number of App Components replicas Default: 1
## @param app.imagePullSecrets App component pull secrets Default: {}
app:
  name: "app"
  replicas: 1
  imagePullSecrets: []
   
  ## Configure extra options for App component containers' liveness and readiness
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
  ## @param app.readinessProbe.enabled Enable readinessProbe on App Component containers Default: true
  readinessProbe:
    enabled: "true"

  ## Configure extra options for App component containers' liveness and readiness
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
  ## @param app.livenessProbe.enabled Enable livenessProbe on App Component containers Default: true
  livenessProbe:
    enabled: "true"

  ## @param app.annotations Add extra annotations to the App Component Default: {}
  annotations: {}
  ## @param app.podAnnotations Add extra Pod annotations to the App Component pods Default: {}
  podAnnotations: {}
  ## @param app.securityContexts.pod default security context for App Component pods Default: {}
  ## @param app.securityContexts.container default security context for App Component containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param app.tolerations Tolerations for App Component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param app.affinity Affinity for App Component pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param app.nodeSelector Node labels for App Component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param app.labels Labels for App Component Default: {}
  labels: {}

  ## App Component service parameters
  service:
    ## @param app.service.annotations Additional custom annotations for App Component service Default: {}
    annotations: {}
    ## @param app.service.type App Component service type Default: ClusterIP
    type: ClusterIP
    ## @param app.service.port App Component service HTTP port Default: 4200
    port: 4200
  
  ## @param app.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the App component pods Default: []
  extraVolumeMounts: []
  ## @param app.extraVolumes Optionally specify an extra list of additional volumes for all the App component pods Default: []
  extraVolumes: []
  
  ## @param app.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 100m
      memory: 200Mi
    limits:
      cpu: 200m
      memory: 400Mi

  ## Enable HorizontalPodAutoscaler for App Component pods
  ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
  ## @param app.autoscaling.enabled Whether to enable horizontal pod autoscaler Default: false
  ## @param app.autoscaling.minReplicas Configure a minimum amount of pods Default: 1
  ## @param app.autoscaling.maxReplicas Configure a maximum amount of pods Default: 2
  ## @param app.autoscaling.targetCPUUtilizationPercentage Define the CPU target to trigger the scaling actions (utilization percentage) Default: 80
  ## @param app.autoscaling.targetMemoryUtilizationPercentage Define the memory target to trigger the scaling actions (utilization percentage) Default: 80
  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 2
    targetCPUUtilizationPercentage: 80
    targetMemoryUtilizationPercentage: 80

  ## @param app.env Add extra environment variables for the App Component pods Default: []
  env: []

  ## @param app.envFrom Add extra environment variables from ConfigMaps or Secrets for the App Component pods Default: [] 
  envFrom: []

## Engine component
## @param eng.name Name for Engine component Default: "eng"
## @param eng.replicas Number of Engine component replicas Default: 1
## @param eng.imagePullSecrets Engine component pull secrets Default: {}
eng:
  name: "eng"
  replicas: 1

  imagePullSecrets: []

  ## Configure extra options for Engine component containers' liveness and readiness
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
  ## @param eng.readinessProbe.enabled Enable readinessProbe on Engine component containers Default: true
  readinessProbe:
    enabled: "true"

  ## Configure extra options for Engine component containers' liveness and readiness
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
  ## @param eng.livenessProbe.enabled Enable livenessProbe on Engine component containers Default: true
  livenessProbe:
    enabled: "true"

  ## @param eng.annotations Add extra annotations to the Engine component Default: {}
  annotations: {}
  ## @param eng.podAnnotations Add extra Pod annotations to the Engine component pods Default: {}
  podAnnotations: {}
  ## @param eng.securityContexts.pod default security context for Engine component pods Default: {}
  ## @param eng.securityContexts.container default security context for Engine component containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param eng.tolerations Tolerations for Engine component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param eng.affinity Affinity for Engine component pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param eng.nodeSelector Node labels for Engine component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param eng.labels Labels for Engine Component Default: {}
  labels: {}

  ## Engine component service parameters
  service:
    ## @param eng.service.annotations Additional custom annotations for Engine component service Default: {}
    annotations: {} 
    ## @param eng.service.type Engine component service type Default: ClusterIP
    type: ClusterIP
    ## @param eng.service.port Engine component service HTTP port Default: 8080
    port: 8080
 
  ## @param eng.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Engine component pods Default: []
  extraVolumeMounts: []
  ## @param eng.extraVolumes Optionally specify an extra list of additional volumes for all the Engine component pods Default: []
  extraVolumes: []

  ## @param eng.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 400m
      memory: 400Mi
    limits:
      cpu: 800m
      memory: 800Mi

  ## Enable HorizontalPodAutoscaler for Engine component pods
  ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
  ## @param eng.autoscaling.enabled Whether to enable horizontal pod autoscaler Default: false
  ## @param eng.autoscaling.minReplicas Configure a minimum amount of pods Default: 1
  ## @param eng.autoscaling.maxReplicas Configure a maximum amount of pods Default: 2
  ## @param eng.autoscaling.targetCPUUtilizationPercentage Define the CPU target to trigger the scaling actions (utilization percentage) Default: 80
  ## @param eng.autoscaling.targetMemoryUtilizationPercentage Define the memory target to trigger the scaling actions (utilization percentage) Default: 80
  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 2
    targetCPUUtilizationPercentage: 80
    targetMemoryUtilizationPercentage: 80

  ## @param eng.env Add extra environment variables for the Engine component pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env:
    - name: TZ
      value: "GMT"

  ## @param eng.envFrom Add extra environment variables from ConfigMaps or Secrets for the Engine Component pods Default: [] 
  envFrom: []

## Metadata DB component
## @param db.name Name for DB component Default: "db"
## @param db.replicas Number of DB component replicas Default: 1
## @param db.strategy Update strategy for DB component pods Default: "Recreate"
## @param db.imagePullSecrets DB component pull secrets Default: {}
db:
  ## @param db.enabled Provision the postgres deployment Default: true
  enabled: true
  ## @param db.dbConnection.hostname Provide the hostname if used external connection Default: true
  ## @param db.dbConnection.username username for connection to DB Default: "postgres"
  ## @param db.dbConnection.port port for connection to DB Default: "5432"
  dbConnection:
    hostname: ""
    username: "postgres"
    port: "5432"

  name: "db"
  replicas: 1
  strategy: "Recreate"

  imagePullSecrets: []

  ## @param db.command Command to override DB component containers Default: []
  command: []
  ## @param db.args Args to override DB component containers Default: []
  args: []

  ## @param db.dbshConfig.stringOverride Override shell script to be run on the initial time of DB Default: ""
  ## the full content of the `db-sh.sh` file (as a string)
  ##   stringOverride: |
  ##     #!/bin/bash
  ##     echo "Hello World"
  dbshConfig:
    stringOverride: ""

  ## @param db.annotations Add extra annotations to the DB component Default: {}
  annotations: {}
  ## @param db.podAnnotations Add extra Pod annotations to the DB component pods Default: {}
  podAnnotations: {}
  ## @param db.securityContexts.pod default security context for DB Component pods Default: {}
  ## @param db.securityContexts.container default security context for DB Component containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param db.tolerations Tolerations for DB component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param db.affinity Affinity for DB component pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param db.nodeSelector Node labels for DB component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param db.labels Labels for DB Component Default: {}
  labels: {}

  ## @param db.persistentVolume.enabled If false, use emptyDir Default: true
  ## @param db.persistentVolume.accessModes How should the volume accessible in App Default: ReadWriteOnce
  ## @param db.persistentVolume.annotations Persistent Volume Claim annotations Default: {}
  ## @param db.persistentVolume.existingClaim Name of PVC created manually before volume Default: ""
  ## @param db.persistentVolume.subPath Subdirectory of data Persistent Volume to mount Default: ""
  ## @param db.persistentVolume.size Persistent Volume size Default: 4Gi
  ## @param db.persistentVolume.storageClass Persistent Volume Storage Class Default: "" (Default from Kubernetes)
  ## @param db.persistentVolume.volumeBindingMode Persistent Volume Binding Mode Default: "" (Default from Kubernetes)
  persistentVolume:
    ## If false, use emptyDir
    enabled: true

    ## Must match those of existing PV or dynamic provisioner
    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
    accessModes:
      - ReadWriteOnce

    ## data Persistent Volume Claim annotations
    annotations: {}

    ## Requires db.persistentVolume.enabled: true
    ## If defined, PVC must be created manually before volume will be bound
    existingClaim: ""

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

    ## data Persistent Volume size
    size: 4Gi

    ## 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: ""

    ## data Persistent Volume Binding Mode
    ## If defined, volumeBindingMode: <volumeBindingMode>
    ## If undefined (the default) or set to null, no volumeBindingMode spec is
    ##   set, choosing the default mode.
    volumeBindingMode: ""

  ## DB component service parameters
  service:
    ## @param db.service.annotations Additional custom annotations for DB component service Default: {}
    annotations: {}
    ## @param db.service.type DB component service type Default: "ClusterIP"
    type: ClusterIP
    ## @param db.service.port DB component service HTTP port Default: 5432
    port: 5432

  ## @param db.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 200m
      memory: 500Mi
    limits:
      cpu: 400m
      memory: 1000Mi

  ## @param db.env Add extra environment variables for the DB component pods Default: [JDBC_PARAMS]
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env:
    - name: JDBC_PARAMS
      value: "sslfactory=org.postgresql.ssl.NonValidatingFactory"

  ## @param db.envFrom Add extra environment variables from ConfigMaps or Secrets for the DB Component pods Default: [] 
  envFrom: []

  ## @param db.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the DB component pods Default: []
  extraVolumeMounts: [] 
  ## @param db.extraVolumes Optionally specify an extra list of additional volumes for all the DB component pods Default: []
  extraVolumes: []

## Cache component
## @param msg.name Name for Cache component Default: "msg"
## @param msg.replicas Number of Cache component replicas Default: 1
## @param msg.strategy Update strategy for Cache component pods Default: "Recreate"
## @param msg.imagePullSecrets Cache component pull secrets Default: {}
msg:
  name: "msg"
  replicas: 1
  strategy: "Recreate"

  imagePullSecrets: []

  ## @param msg.args Args to override Cache component containers Default: []
  args: ["/etc/keydb/keydb.conf"]

  ## @param msg.keyDBConfig.stringOverride Override shell script to be run on the initial time of Cache Default: ""
  ## the full content of the `msg-keys.conf` file (as a string)
  ##   stringOverride: |
  ##     databases 16
  ##     port 6379
  keyDBConfig:
    stringOverride: ""
   
  ## @param msg.annotations Add extra annotations to the Cache component Default: {}
  annotations: {}
  ## @param msg.podAnnotations Add extra Pod annotations to the Cache component pods Default: {}
  podAnnotations: {}
  ## @param msg.securityContexts.pod default security context for Cache Component pods Default: {}
  ## @param msg.securityContexts.container default security context for Cache Component containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param msg.tolerations Tolerations for Cache component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param msg.affinity Affinity for Cache component pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param msg.nodeSelector Node labels for Cache component pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param msg.labels Labels for Cache Component Default: {}
  labels: {}

  ## PersistentVolume template for Cache component volume in QMigrator
  ## @param msg.persistentVolume.enabled If false, use emptyDir Default: true
  ## @param msg.persistentVolume.accessModes How should the volume be accessible in App Default: ReadWriteOnce
  ## @param msg.persistentVolume.annotations Persistent Volume Claim annotations Default: {}
  ## @param msg.persistentVolume.existingClaim Name of PVC created manually before volume Default: ""
  ## @param msg.persistentVolume.subPath Subdirectory of data Persistent Volume to mount Default: ""
  ## @param msg.persistentVolume.size Persistent Volume size Default: 4Gi
  ## @param msg.persistentVolume.storageClass Persistent Volume Storage Class Default: "" (Default from Kubernetes)
  ## @param msg.persistentVolume.volumeBindingMode Persistent Volume Binding Mode Default: "" (Default from Kubernetes)
  persistentVolume:
    ## If false, use emptyDir
    enabled: true

    ## Must match those of existing PV or dynamic provisioner
    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
    accessModes:
      - ReadWriteOnce

    ## data Persistent Volume Claim annotations
    annotations: {}

    ## Requires app.persistentVolume.enabled: true
    ## If defined, PVC must be created manually before volume will be bound
    existingClaim: ""

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

    ## data Persistent Volume size
    size: 4Gi

    ## 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: ""

    ## data Persistent Volume Binding Mode
    ## If defined, volumeBindingMode: <volumeBindingMode>
    ## If undefined (the default) or set to null, no volumeBindingMode spec is
    ##   set, choosing the default mode.
    volumeBindingMode: ""

  ## Cache component service parameters
  service:
    ## @param msg.service.annotations Additional custom annotations for Cache component service Default: {}
    annotations: {}
    ## @param msg.service.type Cache component service type Default: "ClusterIP"
    type: ClusterIP
    ## @param msg.service.port Cache component service HTTP port Default: 6379
    port: 6379

  ## @param msg.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 100m
      memory: 200Mi
    limits:
      cpu: 200m
      memory: 300Mi

  ## @param msg.master.enabled Run Cache component as master node Default: true
  master:
    enabled: "true"

  ## @param msg.auth.enabled Enabled authentication with password on Cache component Default: true
  ## provided in secret secret.data.REDIS_PASSWORD
  auth:
    enabled: true

  ## @param msg.env Add extra environment variables for the Cache component pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param msg.envFrom Add extra environment variables from ConfigMaps or Secrets for the Cache Component pods Default: [] 
  envFrom: []
 
  ## @param msg.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Cache component pods Default: []
  extraVolumeMounts: []
  ## @param msg.extraVolumes Optionally specify an extra list of additional volumes for all the Cache component pods Default: []
  extraVolumes: []


## Assessment
## @param asses.enabled Enable Assessment Default: true
## @param asses.imagePullSecrets Assessment pull secrets Default: {}
asses:
  enabled: true
  imagePullSecrets: []

  ## @param asses.annotations Add extra annotations to the Assessment Default: {}
  annotations: {}
  ## @param asses.podAnnotations Add extra Pod annotations to the Assessment pods Default: {}
  podAnnotations: {}
  ## @param asses.securityContexts.pod default security context for Assessment pods Default: {}
  ## @param asses.securityContexts.container default security context for Assessment containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param asses.tolerations Tolerations for Assessment pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param asses.affinity Affinity for Assessment pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param asses.nodeSelector Node labels for Assessment pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param asses.labels Labels for Assessment Default: {}
  labels: {}

  ## @param asses.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param asses.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param asses.successfulJobsHistoryLimit How many successful executions to track in history. Default: 3
  successfulJobsHistoryLimit: 2
  ## @param asses.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param asses.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: Forbid
  concurrencyPolicy: Forbid
  ## @param asses.restartPolicy Restart the container keeping the same Pod in Node Default: Never
  restartPolicy: Never
  ## @param asses.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param asses.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param asses.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param asses.env Add extra environment variables for the Assessment pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param asses.envFrom Add extra environment variables from ConfigMaps or Secrets for the Assessment pods Default: [] 
  envFrom: []

  ## @param asses.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Assessment pods Default: []
  extraVolumeMounts: []
  ## @param asses.extraVolumes Optionally specify an extra list of additional volumes for all the Assessment pods Default: []
  extraVolumes: []

## Conversion
## @param convs.enabled Enable Conversion Default: true
## @param convs.imagePullSecrets Conversion pull secrets Default: {}
convs:
  enabled: true
  imagePullSecrets: []

  ## @param convs.annotations Add extra annotations to the Conversion Default: {}
  annotations: {}
  ## @param convs.podAnnotations Add extra Pod annotations to the Conversion pods Default: {}
  podAnnotations: {}
  ## @param convs.securityContexts.pod default security context for Conversion pods Default: {}
  ## @param convs.securityContexts.container default security context for Conversion containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param convs.tolerations Tolerations for Conversion pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param convs.affinity Affinity for Conversion pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param convs.nodeSelector Node labels for Conversion pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param convs.labels Labels for Conversion Default: {}
  labels: {}

  ## @param convs.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param convs.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param convs.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param convs.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param convs.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: Forbid
  concurrencyPolicy: Forbid
  ## @param convs.restartPolicy Restart the container keeping the same Pod in Node Default: Never
  restartPolicy: Never
  ## @param convs.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param convs.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param convs.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param convs.env Add extra environment variables for the Conversion pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param convs.envFrom Add extra environment variables from ConfigMaps or Secrets for the Conversion pods Default: []
  envFrom: []

  ## @param convs.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Conversion pods Default: []
  extraVolumeMounts: []
  ## @param convs.extraVolumes Optionally specify an extra list of additional volumes for all the Conversion pods Default: []
  extraVolumes: []


## Migration
## @param migrt.enabled Enable Migration Default: true
## @param migrt.imagePullSecrets Migration pull secrets Default: {}
migrt:
  enabled: true

  imagePullSecrets: []

  ## @param migrt.annotations Add extra annotations to the Migration Default: {}
  annotations: {}
  ## @param migrt.podAnnotations Add extra Pod annotations to the Migration pods Default: {}
  podAnnotations: {}
  ## @param migrt.securityContexts.pod default security context for Migration pods Default: {}
  ## @param migrt.securityContexts.container default security context for Migration containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param migrt.tolerations Tolerations for Migration pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param migrt.affinity Affinity for Migration pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param migrt.nodeSelector Node labels for Migration pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param migrt.labels Labels for Migration Default: {}
  labels: {}

  ## @param migrt.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param migrt.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param migrt.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param migrt.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param migrt.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: "Forbid"
  concurrencyPolicy: Forbid
  ## @param migrt.restartPolicy Restart the container keeping the same Pod in Node Default: "Never"
  restartPolicy: Never
  ## @param migrt.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param migrt.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param migrt.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param migrt.env Add extra environment variables for the Migration pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param migrt.envFrom Add extra environment variables from ConfigMaps or Secrets for the Migration pods Default: []
  envFrom: []

  ## @param migrt.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Migration pods Default: []
  extraVolumeMounts: []
  ## @param migrt.extraVolumes Optionally specify an extra list of additional volumes for all the Migration pods Default: []
  extraVolumes: []


## Testing
## @param tests.enabled Enable Testing Default: false
## @param tests.image.registry Testing image registry Default: "qmigrator.azurecr.io"
## @param tests.image.image Testing image Default: "webtestotp"
## @param tests.image.tag Testing image tag/version Default: "971"
## @param tests.image.pullPolicy Testing pull policy Default: "IfNotPresent"
## @param tests.imagePullSecrets Testing pull secrets Default: {}
tests:
  enabled: false
  image:
    registry: qmigrator.azurecr.io
    image: webtestotp
    pullPolicy: IfNotPresent
    tag: "971"

  imagePullSecrets: []

  ## @param tests.annotations Add extra annotations to the Testing Default: {}
  annotations: {}
  ## @param tests.podAnnotations Add extra Pod annotations to the Testing pods Default: {}
  podAnnotations: {}
  ## @param tests.securityContexts.pod default security context for Testing pods Default: {}
  ## @param tests.securityContexts.container default security context for Testing containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param tests.tolerations Tolerations for Testing pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param tests.affinity Affinity for Testing pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param tests.nodeSelector Node labels for Testing pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param tests.labels Labels for Testing Default: {}
  labels: {}

  ## @param tests.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param tests.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param tests.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param tests.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param tests.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: "Forbid"
  concurrencyPolicy: Forbid
  ## @param tests.restartPolicy Restart the container keeping the same Pod in Node Default: "Never"
  restartPolicy: Never
  ## @param tests.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param tests.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param tests.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param tests.env Add extra environment variables for the Testing pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param tests.envFrom Add extra environment variables from ConfigMaps or Secrets for the Testing pods Default: [] 
  envFrom: []

  ## @param tests.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Testing pods Default: []
  extraVolumeMounts: []
  ## @param tests.extraVolumes Optionally specify an extra list of additional volumes for all the Testing pods Default: []
  extraVolumes: []


## Performance
## @param perfs.enabled Enable Performance Default: false
## @param perfs.image.registry Performance image repository Default: "qmigrator.azurecr.io"
## @param perfs.image.image Performance image Default: "webperfotp"
## @param perfs.image.tag Performance image tag/version Default: "985"
## @param perfs.image.pullPolicy Performance pull policy Default: "IfNotPresent"
## @param perfs.imagePullSecrets Performance pull secrets Default: {}
perfs:
  enabled: false
  image:
    registry: qmigrator.azurecr.io
    image: webperfotp
    pullPolicy: IfNotPresent
    tag: "985"

  imagePullSecrets: []

  ## @param perfs.annotations Add extra annotations to the Performance Default: {}
  annotations: {}
  ## @param perfs.podAnnotations Add extra Pod annotations to the Performance pods Default: {}
  podAnnotations: {}
  ## @param perfs.securityContexts.pod default security context for Performance pods Default: {}
  ## @param perfs.securityContexts.container default security context for Performance containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param perfs.tolerations Tolerations for Performance pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param perfs.affinity Affinity for Performance pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param perfs.nodeSelector Node labels for Performance pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param perfs.labels Labels for Performance Default: {}
  labels: {}

  ## @param perfs.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param perfs.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param perfs.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param perfs.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param perfs.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: Forbid
  concurrencyPolicy: Forbid
  ## @param perfs.restartPolicy Restart the container keeping the same Pod in Node Default: Never
  restartPolicy: Never
  ## @param perfs.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param perfs.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param perfs.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param perfs.env Add extra environment variables for the Performance pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param perfs.envFrom Add extra environment variables from ConfigMaps or Secrets for the Performance pods Default: [] 
  envFrom: []

  ## @param perfs.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Performance pods Default: []
  extraVolumeMounts: []
  ## @param perfs.extraVolumes Optionally specify an extra list of additional volumes for all the Performance pods Default: []
  extraVolumes: []

## Deployment
## @param deplo.enabled Enable Deployment Default: false
## @param deplo.image.registry Deployment image registry Default: "qmigrator.azurecr.io"
## @param deplo.image.image Deployment image Default: "webdeplotp"
## @param deplo.image.tag Deployment image tag/version Default: "102"
## @param deplo.image.pullPolicy Deployment pull policy Default: "IfNotPresent"
## @param deplo.imagePullSecrets Deployment pull secrets Default: {}
deplo:
  enabled: false
  image:
    registry: qmigrator.azurecr.io
    image: webdeplotp
    pullPolicy: IfNotPresent
    tag: "102"

  imagePullSecrets: []

  ## @param deplo.annotations Add extra annotations to the Deployment Default: {}
  annotations: {}
  ## @param deplo.podAnnotations Add extra Pod annotations to the Deployment pods Default: {}
  podAnnotations: {}
  ## @param deplo.securityContexts.pod default security context for Deployment pods Default: {}
  ## @param deplo.securityContexts.container default security context for Deployment containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param deplo.tolerations Tolerations for Deployment pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param deplo.affinity Affinity for Deployment pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param deplo.nodeSelector Node labels for Deployment pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param deplo.labels Labels for Deployment Default: {}
  labels: {}

  ## @param deplo.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param deplo.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param deplo.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param deplo.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param deplo.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: "Forbid"
  concurrencyPolicy: Forbid
  ## @param deplo.restartPolicy Restart the container keeping the same Pod in Node Default: "Never"
  restartPolicy: Never
  ## @param deplo.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param deplo.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param deplo.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param deplo.env Add extra environment variables for the Deployment pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []
  
  ## @param deplo.envFrom Add extra environment variables from ConfigMaps or Secrets for the Deployment pods Default: []
  envFrom: []

  ## @param deplo.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Deployment pods Default: []
  extraVolumeMounts: []
  ## @param deplo.extraVolumes Optionally specify an extra list of additional volumes for all the Deployment pods Default: []
  extraVolumes: []

## DBA
## @param wbdba.enabled Enable DBA Default: false
## @param wbdba.image.registry DBA image registry Default: "qmigrator.azurecr.io"
## @param wbdba.image.image DBA image Default: "webdbaotp"
## @param wbdba.image.tag DBA image tag/version Default: "18"
## @param wbdba.image.pullPolicy DBA pull policy Default: "IfNotPresent"
## @param wbdba.imagePullSecrets DBA pull secrets Default: {}
wbdba:
  enabled: false
  image:
    registry: qmigrator.azurecr.io
    image: webdbaotp
    pullPolicy: IfNotPresent
    tag: "18"

  imagePullSecrets: []

  ## @param wbdba.annotations Add extra annotations to the DBA Default: {}
  annotations: {}
  ## @param wbdba.podAnnotations Add extra Pod annotations to the DBA pods Default: {}
  podAnnotations: {}
  ## @param wbdba.securityContexts.pod default security context for DBA pods Default: {}
  ## @param wbdba.securityContexts.container default security context for DBA containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}
  ## @param wbdba.tolerations Tolerations for DBA pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param wbdba.affinity Affinity for DBA pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param wbdba.nodeSelector Node labels for DBA pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param wbdba.labels Labels for DBA Default: {}
  labels: {}

  ## @param wbdba.schedule Specifies the cron job schedule using the standard cron syntax Default: "*/10 * * * *"
  schedule: "*/10 * * * *"
  ## @param wbdba.failedJobsHistoryLimit How many failed executions to track in history. Default: 2
  failedJobsHistoryLimit: 2
  ## @param wbdba.successfulJobsHistoryLimit How many successful executions to track in history. Default: 2
  successfulJobsHistoryLimit: 2
  ## @param wbdba.startingDeadlineSeconds How many seconds a job is allowed to miss its scheduled start time before it is considered failed Default: 500
  startingDeadlineSeconds: 500
  ## @param wbdba.concurrencyPolicy Handle scenario when concurrent jobs are scheduled Default: "Forbid"
  concurrencyPolicy: Forbid
  ## @param wbdba.restartPolicy Restart the container keeping the same Pod in Node Default: "Never"
  restartPolicy: Never
  ## @param wbdba.ttlSecondsAfterFinished Clean up finished Jobs after the specific seconds Default: 600
  ttlSecondsAfterFinished: 600
  ## @param wbdba.backoffLimit Each pod failure is counted towards the specified limit Default: 0
  backoffLimit: 0
 
  ## @param wbdba.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 150m
      memory: 300Mi
    limits:
      cpu: 300m
      memory: 600Mi

  ## @param wbdba.env Add extra environment variables for the DBA pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param wbdba.envFrom Add extra environment variables from ConfigMaps or Secrets for the DBA pods Default: [] 
  envFrom: []

  ## @param wbdba.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the DBA pods Default: []
  extraVolumeMounts: []
  ## @param wbdba.extraVolumes Optionally specify an extra list of additional volumes for all the DBA pods Default: []
  extraVolumes: []

## Airflow
## @param airflow.enabled Enable Airflow Default: false
## @param airflow.name Name for Airflow Default: "airflow"
## @param airflow.uid User id for Airflow Default: "106665"
## @param airflow.gid group id for Airflow Default: "106966"
## @param airflow.imagePullSecrets Airflow pull secrets Default: {}
airflow:
  enabled: false
  name: "airflow"
  uid: 5000
  gid: 4000

  ## Enable RBAC (default on most clusters these days)
  ## Role Based Access
  ## Ref: https://kubernetes.io/docs/admin/authorization/rbac/
  ## @param airflow.rbac.create Create Role and RoleBinding Default: true
  rbac:
    ## - if `false`, you must create a custom Role and RoleBinding for the ServiceAccount defined in `serviceAccount.name`
    create: true

  imagePullSecrets: []

  ## @param airflow.baseUrl Base URL of Airflow Webserver Default: http://0.0.0.0:8080/airflow
  baseUrl: http://0.0.0.0:8080/airflow

  ## Config settings to go into the mounted airflow.cfg
  ## @param airflow.config Config settings to go into the mounted airflow.cfg Default:
  config:
    api:
      auth_backends: airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session
    celery:
      worker_concurrency: 16
    celery_kubernetes_executor:
      kubernetes_queue: kubernetes
    cli:
     endpoint_url: '{{ include "qmig.airflow.baseUrl" . }}'
    core: 
      colored_console_log: False
      dagbag_import_timeout: 30
      dags_folder: '{{ include "qmig.airflow.dags" . }}'
      executor: KubernetesExecutor
      load_examples: False
      remote_logging: False
      parallelism: 128
      default_pool_task_slot_count: 256
    database: 
      load_default_connections: False
    kubernetes: 
      airflow_configmap: '{{ include "qmig.airflow.config" . }}'
      airflow_local_settings_configmap: '{{ include "qmig.airflow.config" . }}'
      multi_namespace_mode: False
      namespace: '{{ .Release.Namespace }}'
      pod_template_file: '{{ include "qmig.airflow.template" . }}/pod_template_file.yaml'
      worker_container_repository: '{{ .Values.images.airflow.registry }}/{{ .Values.images.airflow.image }}'
      worker_container_tag: '{{ .Values.images.airflow.tag }}'
    kubernetes_executor: 
      multi_namespace_mode: False
      namespace: '{{ .Release.Namespace }}'
      pod_template_file: '{{ include "qmig.airflow.template" . }}/pod_template_file.yaml'
      worker_container_repository: '{{ .Values.images.airflow.registry }}/{{ .Values.images.airflow.image }}'
      worker_container_tag: '{{ .Values.images.airflow.tag }}'
    logging: 
      colored_console_log: False
      remote_logging: False
    metrics: 
      statsd_host: qmig-air-statsd
      statsd_on: False
      statsd_port: 9125
      statsd_prefix: airflow
    scheduler: 
      enable_health_check: True
      run_duration: 41460
      standalone_dag_processor: False
      statsd_host: qmig-air-statsd
      statsd_on: False
      statsd_port: 9125
      statsd_prefix: airflow
      max_tis_per_query: 0
    triggerer: 
      default_capacity: 1000
    webserver: 
      base_url: '{{ include "qmig.airflow.baseUrl" . }}'
      cookie_secure: False
      enable_proxy_fix: True
      expose_config: False
      rbac: True
      warn_deployment_exposure: False

  ## @param airflow.airflowLocalSettings file as a string (can be templated) Default: ~
  airflowLocalSettings: ~

  ## @param airflow.podTemplate is a templated string containing the contents of `pod_template_file.yaml` used for KubernetesExecutor workers Default: ~
  podTemplate: ~
  ## podTemplate: |
  ##   apiVersion: v1
  ##   kind: Pod
  ##   metadata:
  ##     name: placeholder-name
  ##     labels:
  ##       tier: airflow

  ## @param airflow.webserverConfig string (can be templated) will be mounted into the Airflow Webserver Default: ~
  ## as a custom webserver_config.py
  webserverConfig: ~
  ## webserverConfig: |
  ##   from airflow import configuration as conf
  ##   # The SQLAlchemy connection string.
  ##   SQLALCHEMY_DATABASE_URI = conf.get('data

  ## @param airflow.securityContexts.pod Detailed default security context for Airflow Pods Default: {}
  ## @param airflow.securityContexts.containers Detailed default security context for Airflow Container Default: {}
  securityContexts:
    pod: {}
    container: {}

  ## @param airflow.tolerations Tolerations for Airflow pods Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param airflow.affinity Affinity for Airflow pods (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param airflow.nodeSelector Node labels for Airflow pods Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param airflow.labels Labels for Airflow Default: {}
  labels: {}

  ## @param airflow.env Add extra environment variables for the Airflow pods Default: []
  ## Example:
  ## env:
  ## - name: ENV_NAME
  ##   value: ENV_VALUE
  env: []

  ## @param airflow.envFrom Add extra environment variables from ConfigMaps or Secrets for the Airflow pods Default: []
  envFrom: []

  ## @param airflow.extraVolumeMounts Optionally specify an extra list of additional volumeMounts for all the Airflow component pods Default: []
  extraVolumeMounts: []
  ## @param airflow.extraVolumes Optionally specify an extra list of additional volumes for all the Airflow component pods Default: []
  extraVolumes: []

  ## Required Airflow credentials for secret
  secret:
    create: true
    ## @param airflow.secret.secretName Name for project secret Default: "" (name: qmig-air-secret)
    secretName: ""
    data:
      ## @param airflow.secret.data.airflow_secret_key Random generated key for webserver Default: null
      airflow_secret_key: null
      ## @param airflow.secret.data.airflow_fernet_key Random generated key for airflow Default: null
      airflow_fernet_key: null
      ## @param airflow.secret.data.airflow_password Airflow login password Default: null
      airflow_password: null
      ## @param airflow.secret.data.connection Connection string for Airflow metadata DB Default: null
      ## postgresql://<stats user>:<password>@127.0.0.1:5432/database?<connection params>
      connection: null

  ## Airflow Webserver
  ## @param airflow.webserver.replicas Number of Airflow Webserver replicas Default: 1
  webserver:
    replicas: 1
    ## @param airflow.webserver.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.webserver.annotations Add extra annotations to the Airflow Webserver Default: {}
    annotations: {}
    ## @param airflow.webserver.podAnnotations Add extra Pod annotations to the Airflow Webserver pods Default: {}
    podAnnotations: {}
    ## @param airflow.webserver.securityContexts.pod default security context for Webserver pods Default: {}
    ## @param airflow.webserver.securityContexts.container default security context for Webserver containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      pod: {}
      container: {}

    ## @param airflow.webserver.tolerations Tolerations for Airflow webserver pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    tolerations: []
    ## @param airflow.webserver.affinity Affinity for Airflow webserver pods (evaluated as a template) Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
    affinity: {}
    ## @param airflow.webserver.nodeSelector Node labels for Airflow webserver pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
    nodeSelector: {}

    ## Configure extra options for Airflow containers' liveness, readiness, and startup
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
    ## @param airflow.webserver.livenessProbe livenessProbe on Airflow webserver
    ## @param airflow.webserver.readinessProbe readinessProbe on Airflow webserver
    ## @param airflow.webserver.startupProbe startupProbe on Airflow webserver
    livenessProbe: {}
    readinessProbe: {}
    startupProbe: {}

    ## @param airflow.webserver.command Command to use when running the Airflow webserver Default: {}
    command: ~
    ## @param airflow.webserver.args Args to use when running the Airflow webserver Default: ["bash", "-c", "exec airflow webserver"]
    args: ["bash", "-c", "exec airflow webserver --pid /tmp/webserver.pid"]

    ## @param airflow.webserver.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 400m
        memory: 600Mi
      limits:
        cpu: 800m
        memory: 1200Mi

    ## Airflow Webserver service parameters
    service:
      ## @param airflow.webserver.service.annotations Additional custom annotations for Airflow Webserver service Default: {}
      annotations: {}
      ## @param airflow.webserver.service.type Airflow Webserver service type Default: "ClusterIP"
      type: ClusterIP
      ## @param airflow.webserver.service.port Airflow Webserver service HTTP port Default: 8080
      port: 8080
  
  ## Airflow Scheduler
  ## @param airflow.scheduler.replicas Number of Airflow Scheduler replicas Default: 1
  scheduler:
    replicas: 1
    ## @param airflow.scheduler.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.scheduler.annotations Add extra annotations to the Airflow Scheduler Default: {}
    annotations: {}
    ## @param airflow.scheduler.podAnnotations Add extra Pod annotations to the Airflow Scheduler pods Default: {}
    podAnnotations: {}
    ## @param airflow.scheduler.securityContexts.pod default security context for Scheduler pods Default: {}
    ## @param airflow.scheduler.securityContexts.container default security context for Scheduler containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      pod: {}
      container: {}

    ## @param airflow.scheduler.tolerations Tolerations for Airflow scheduler pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    tolerations: []
    ## @param airflow.scheduler.affinity Affinity for Airflow scheduler pods (evaluated as a template) Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
    affinity: {}
    ## @param airflow.scheduler.nodeSelector Node labels for Airflow scheduler pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
    nodeSelector: {}

    ## Configure extra options for Airflow containers' liveness, readiness, and startup
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
    ## @param airflow.scheduler.livenessProbe livenessProbe on Airflow Scheduler
    ## @param airflow.scheduler.readinessProbe readinessProbe on Airflow Scheduler
    ## @param airflow.scheduler.startupProbe startupProbe on Airflow Scheduler
    livenessProbe: {}
    readinessProbe: {}
    startupProbe: {}

    ## @param airflow.scheduler.command Command to use when running the Airflow scheduler Default: ~
    command: ~
    ## @param airflow.scheduler.args Args to use when running the Airflow scheduler Default: ["bash", "-c", "exec airflow scheduler"]
    args: ["bash", "-c", "exec airflow scheduler"]

    ## @param airflow.scheduler.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 400m
        memory: 700Mi
      limits:
        cpu: 800m
        memory: 1400Mi

  ## Airflow Worker
  worker:
    ## @param airflow.worker.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.worker.annotations Add extra annotations to the Airflow Worker Default: {}
    annotations: {}
    ## @param airflow.worker.podAnnotations Add extra Pod annotations to the Airflow Worker pods Default: {}
    podAnnotations: {}
    ## @param airflow.worker.securityContexts.pod default security context for Worker pods Default: {}
    ## @param airflow.worker.securityContexts.container default security context for Worker containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      pod: {}
      container: {}

    ## @param airflow.worker.tolerations Tolerations for Airflow worker pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    tolerations: []
    ## @param airflow.worker.affinity Affinity for Airflow worker pods (evaluated as a template) Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
    affinity: {}
    ## @param airflow.worker.nodeSelector Node labels for Airflow worker pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
    nodeSelector: {}
    
    ## @param airflow.worker.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 400m
        memory: 700Mi
      limits:
        cpu: 800m
        memory: 1400Mi

  ## Airflow WaitForMigrations
  waitForMigrations:
    ## @param airflow.waitForMigrations.enabled Whether to create an init container to wait for db migrations Default: true
    enabled: true
    ## @param airflow.waitForMigrations.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.waitForMigrations.annotations Add extra annotations to the waitForMigrations Default: {}
    annotations: {}
    ## @param airflow.waitForMigrations.podAnnotations Add extra Pod annotations to the waitForMigrations pods Default: {}
    podAnnotations: {}
    ## @param airflow.waitForMigrations.securityContexts.container default security context for waitForMigrations containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      container: {}

    ## @param airflow.waitForMigrations.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 100m
        memory: 250Mi
      limits:
        cpu: 300m
        memory: 500Mi

  ## Airflow create user job settings
  createUserJob:
    ## @param airflow.createUserJob.enabled Whether to create airflow user creation job Default: true
    enabled: true
    ## @param airflow.createUserJob.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.createUserJob.annotations Add extra annotations to the createUserJob Default: {}
    annotations: {}
    ## @param airflow.createUserJob.podAnnotations Add extra Pod annotations to the createUserJob pods Default: {}
    podAnnotations: {}
    ## @param airflow.createUserJob.useHelmHooks Helm hook for job pod Default: true
    useHelmHooks: true
    ## @param airflow.createUserJob.securityContexts.pod default security context for createUserJob pods Default: {}
    ## @param airflow.createUserJob.securityContexts.container default security context for createUserJob containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      pod: {}
      container: {}

    ## @param airflow.createUserJob.tolerations Tolerations for Airflow createUserJob pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    tolerations: []
    ## @param airflow.createUserJob.affinity Affinity for Airflow createUserJob pods (evaluated as a template) Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
    affinity: {}
    ## @param airflow.createUserJob.nodeSelector Node labels for Airflow createUserJob pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
    nodeSelector: {}

    ## @param airflow.createUserJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 100m
        memory: 250Mi
      limits:
        cpu: 300m
        memory: 500Mi
  
  # Airflow database migration job settings
  migrateDatabaseJob:
    ## @param airflow.migrateDatabaseJob.enabled Whether to create an init container to wait for db migrations Default: true
    enabled: true
    ## @param airflow.migrateDatabaseJob.safeToEvict This setting tells Kubernetes that its ok to evict Default: true
    safeToEvict: true
    ## @param airflow.migrateDatabaseJob.annotations Add extra annotations to the migrateDatabaseJob Default: {}
    annotations: {}
    ## @param airflow.migrateDatabaseJob.podAnnotations Add extra Pod annotations to the migrateDatabaseJob pod Default: {}
    podAnnotations: {}
    ## @param airflow.migrateDatabaseJob.useHelmHooks Helm hook for job pod Default: true
    useHelmHooks: true
    ## @param airflow.migrateDatabaseJob.securityContexts.pod default security context for migrateDatabaseJob pod Default: {}
    ## @param airflow.migrateDatabaseJob.securityContexts.container default security context for migrateDatabaseJob containers Default: {}
    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
    securityContexts:
      pod: {}
      container: {}
    
    ## @param airflow.migrateDatabaseJob.tolerations Tolerations for Airflow migrateDatabaseJob pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    tolerations: []
    ## @param airflow.migrateDatabaseJob.affinity Affinity for Airflow migrateDatabaseJob pods (evaluated as a template) Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
    affinity: {}
    ## @param airflow.migrateDatabaseJob.nodeSelector Node labels for Airflow migrateDatabaseJob pods Default: {}
    ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
    nodeSelector: {}

    ## @param airflow.migrateDatabaseJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
    resources:
      requests:
        cpu: 100m
        memory: 250Mi
      limits:
        cpu: 300m
        memory: 500Mi

## Project DB migration job settings
dbJob:
  name: "db-job"

  ## @param dbJob.enabled Whether to enable the Airflow DB migration job Default: false
  enabled: true
  ## @param dbJob.safeToEvict This setting tells Kubernetes that it's ok to evict Default: true
  safeToEvict: true
  ## @param dbJob.annotations Add extra annotations to the dbJob Default: {}
  annotations: {}
  ## @param dbJob.podAnnotations Add extra Pod annotations to the dbJob pod Default: {}
  podAnnotations: {}
  ## @param dbJob.useHelmHooks Helm hook for job pod Default: false
  useHelmHooks: true
  ## @param dbJob.securityContexts.pod default security context for dbJob pod Default: {}
  ## @param dbJob.securityContexts.container default security context for dbJob containers Default: {}
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  securityContexts:
    pod: {}
    container: {}

  ## @param dbJob.tolerations Tolerations for dbJob pods assignment Default: []
  ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
  tolerations: []
  ## @param dbJob.affinity Affinity for dbJob pods assignment (evaluated as a template) Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
  affinity: {}
  ## @param dbJob.nodeSelector Node labels for dbJob pods assignment Default: {}
  ## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  nodeSelector: {}

  ## @param dbJob.labels Labels for dbJob Default: {}
  labels: {}

  ## @param dbJob.args Arguments to pass to the dbJob container Default: ['0']
  args: ['0']
  
  ## @param dbJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
  resources:
    requests:
      cpu: 100m
      memory: 250Mi
    limits:
      cpu: 300m
      memory: 500Mi

  ## Wait for Project DB to get ready
  waitForProjectDB:
    ## @param dbJob.waitForProjectDB.enabled Whether to enable the wait-for-DB init container Default: false
    enabled: true
   
    ## @param dbJob.waitForProjectDB.resources Set resources for the wait-for-DB container Default: {}
    resources:
      requests:
        cpu: 50m
        memory: 100Mi
      limits:
        cpu: 50m
        memory: 100Mi