#  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.

##
## Deployment Pod for tracker and ui
##
apiVersion: apps/v1
kind: Deployment
metadata:
  name: heron-tracker
  namespace: default
spec:
  selector:
    matchLabels:
      app: heron-tracker
  template:
    metadata:
      labels:
        app: heron-tracker
    spec:
      terminationGracePeriodSeconds: 0
      tolerations:
        - key: "node.kubernetes.io/not-ready"
          operator: "Equal"
          effect: "NoExecute"
          tolerationSeconds: 10
        - key: "node.alpha.kubernetes.io/notReady"
          operator: "Equal"
          effect: "NoExecute"
          tolerationSeconds: 10
        - key: "node.alpha.kubernetes.io/unreachable"
          operator: "Equal"
          effect: "NoExecute"
          tolerationSeconds: 10
      containers:
        - name: heron-tracker
          image: heron/heron:latest
          ports:
            - containerPort: 8888
              name: api-port
          command: ["sh", "-c"]
          args:
            - >-
              heron-tracker
              --type=zookeeper
              --name=localzk
              --hostport=zookeeper:2181
              --rootpath="/heron"
          resources:
            requests:
              cpu: "100m"
              memory: "200M"
            limits:
              cpu: "400m"
              memory: "512M"
        - name: heron-ui
          image: heron/heron:latest
          ports:
            - containerPort: 8889
              name: app-port
          command: ["sh", "-c"]
          args:
            - >-
              heron-ui
              --port=8889
              --base_url=/api/v1/namespaces/default/services/heron-ui:8889/proxy
          resources:
            requests:
              cpu: "100m"
              memory: "200M"
            limits:
              cpu: "400m"
              memory: "512M"
---

##
## Service to expose the heron-ui
##
apiVersion: v1
kind: Service
metadata:
  name: heron-ui
spec:
  selector:
    app: heron-tracker
  ports:
    - protocol: TCP
      port: 8889
      targetPort: 8889

---
##
## Service to expose the heron-tracker
##
apiVersion: v1
kind: Service
metadata:
  name: heron-tracker
spec:
  selector:
    app: heron-tracker
  ports:
    - protocol: TCP
      port: 8888
      targetPort: 8888
