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

apiVersion: v1
kind: List
items:
  - apiVersion: v1
    kind: ConfigMap
    metadata:
      name: pinot-broker-config
      namespace: pinot-quickstart
    data:
      pinot-broker.conf: |-
        pinot.broker.client.queryPort=8099
        pinot.broker.routing.table.builder.class=random
        pinot.set.instance.id.to.hostname=true

  - apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: pinot-broker
      namespace: pinot-quickstart
    spec:
      selector:
        matchLabels:
          app: pinot-broker
      serviceName: pinot-broker
      replicas: 3
      updateStrategy:
        type: RollingUpdate
      podManagementPolicy: Parallel
      template:
        metadata:
          labels:
            app: pinot-broker
        spec:
          terminationGracePeriodSeconds: 30
          containers:
          - image: apachepinot/pinot:release-0.7.1
            imagePullPolicy: Always
            name: pinot-broker
            args: [
              "StartBroker",
              "-clusterName", "pinot-quickstart",
              "-zkAddress", "zookeeper:2181/pinot",
              "-configFileName", "/var/pinot/broker/config/pinot-broker.conf"
            ]
            ports:
              - containerPort: 8099
                protocol: TCP
            volumeMounts:
              - name: config
                mountPath: /var/pinot/broker/config
          restartPolicy: Always
          volumes:
            - name: config
              configMap:
                name: pinot-broker-config
          nodeSelector:
            cloud.google.com/gke-nodepool: default-pool
  - apiVersion: v1
    kind: Service
    metadata:
      name: pinot-broker
      namespace: pinot-quickstart
    spec:
      ports:
      # [podname].pinot-broker.pinot-quickstart.svc.cluster.local
      - port: 8099
      clusterIP: None
      selector:
        app: pinot-broker
