#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
---
config:
  core:
    parallelism: 4
    dag_concurrency: 2
    max_active_tasks_per_dag: 2
    worker_concurrency: 2
    dags_folder: "/home/airflow/.local/lib/python3.10/site-packages/osm_ngsa"
defaultAirflowRepository: opensourcemano/airflow
defaultAirflowTag: "17"
executor: LocalExecutor
extraEnv: |
  - name: AIRFLOW__API__AUTH_BACKENDS
    value: 'airflow.api.auth.backend.basic_auth'
  - name: AIRFLOW__LOGGING__LOGGING_LEVEL
    value: 'INFO'
  - name: OSMMON_DATABASE_COMMONKEY
    valueFrom:
      secretKeyRef:
        name: osm-secret
        key: OSM_DATABASE_COMMONKEY
# extraEnvFrom: |
#   - secretRef:
#       name: ngsa-secret
ingress:
  web:
    enabled: True
    hosts:
      - name: "localhost"
    ingressClassName: nginx
postgresql:
  image:
    repository: bitnamilegacy/postgresql
    tag: 11
# scheduler:
#   resources:
#     requests:
#       memory: 512Mi
#       cpu: 250m
#     limits:
#       memory: 1Gi
#       cpu: 500m
webserverSecretKeySecretName: airflow-webserver-secret
webserver:
  resources:
    requests:
      memory: 256Mi
      cpu: 250m
    limits:
      memory: 1Gi
      cpu: 500m
  service:
    type: ClusterIP
    ports:
      - name: airflow-ui
        port: "{{ .Values.ports.airflowUI }}"
        targetPort: "{{ .Values.ports.airflowUI }}"
workers:
  persistence:
    size: 2Gi
  replicas: 1
  resources:
    requests:
      memory: 512Mi
      cpu: 250m
    limits:
      memory: 1Gi
      cpu: 500m
  logGroomerSidecar:
    retentionDays: 7
    resources:
      limits:
        cpu: 100m
        memory: 128Mi
      requests:
        cpu: 100m
        memory: 128Mi
