#  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:
      containers:
        - name: heron-tracker
          image: heron/heron:latest
          ports:
            - containerPort: 8888
              name: api-port
          command: ["sh", "-c"]
          args:
            - >-
              heron-tracker
              --type=zookeeper
              --name=kubernetes
              --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
