#  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

# 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:
  # set to `-` to set base_url to the default k8s proxy URL
  # set to `null` to remove the use of base_url
  url: "-"
# 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.11.0
  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"
