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

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

# The environment where Heron will be running
# The following values are valid:
# "aws" - Amazon Web Services
# "gke" - Google Kubernetes Engine
# "minikube" - Kubernetes on a single local node
# "baremetal" - On-premise cluster
platform: minikube

# Heron image to use
image: heron/heron:VERSION
kubectlImage: heron/kubectl:latest

# Heron image pull policy
imagePullPolicy: IfNotPresent

# Number of replicas for the job binary in bookkeeper
jobReplicas: 1

# amount of memory to provide for API server
apiServerMemory: 512M
heron:
  url: /api/v1/namespaces/{{ .Release.Namespace }}/services/{{ .Release.Name }}-ui:8889/proxy
# Topologies uploader
uploader:
  class: dlog # s3
  s3Bucket: ""
  s3PathPrefix: ""
  s3AccessKey: ""
  s3SecretKey: ""
  s3Region: ""

# Packing algorithms
packing: RoundRobin # ResourceCompliantRR, FirstFitDecreasing

# Number of replicas for storage bookies, memory and storage requirements
bookieReplicas: 3
bookieCpuMin: 100m
bookieCpuMax: 250m
bookieHeapMemory: 512M
bookieDirectMemory: 256M
bookieReadCacheSize: 32
bookieWriteCacheSize: 32
bookieJournalCapacity: 5G
bookieStorageCapacity: 15G

# Number of replicas for zookeeper
zkReplicas: 3

bookkeeper:
  image: apache/bookkeeper:4.7.3
  imagePullPolicy: IfNotPresent
  
  # set storageClassName to "none" to not use storageClassName
  storageClassName: "none"
  prometheus:
    enabled: false

zookeeper:
  enabled: true
  minAvailable: 1
  resources:
    requests:
      cpu: 500m
      memory: 2G
    limits:
      cpu: 1
      memory: 4G
  heap: 1G
  storage: 2G
  serverPort: 2888
  leaderElectionPort: 3888
  clientPort: 2181
  tickTimeMs: 2000
  initTicks: 10
  syncTicks: 5
  clientCnxns: 60
  snapRetain: 3
  purgeHours: 1
  probeInitialDelaySeconds: 15
  probeTimeoutSeconds: 5
  antiAffinity: "hard"
  logLevel: "INFO"
  security:
    enabled: false
    runAsUser: 1000
    fsGroup: 1000
  # set storageClassName to "none" to not use storageClassName
  storageClassName: "none"
