#  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: extensions/v1beta1
kind: Deployment
metadata:
  name: heron-tracker
  namespace: default
spec:
  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"
        - 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
---

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