#  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

# 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: 1
bookieCpuMin: 100m
bookieCpuMax: 250m
bookieHeapMemory: 256M
bookieDirectMemory: 128M
bookieReadCacheSize: 32
bookieWriteCacheSize: 32
bookieJournalCapacity: 1G
bookieStorageCapacity: 3G

# Number of replicas for zookeeper
zkReplicas: 1

bookkeeper:
  image: apache/bookkeeper:4.7.3
  imagePullPolicy: IfNotPresent

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
