# Copyright 2017-present Open Networking Foundation
#
# Licensed 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.
version: '2'
services:
  #
  # Single-node zookeeper service
  #
  zookeeper:
    image: "${REGISTRY}wurstmeister/zookeeper:latest"
    ports:
    - 2181
    environment:
      SERVICE_2181_NAME: "zookeeper"
  #
  # Single-node kafka service
  #
  kafka:
    image: "${REGISTRY}wurstmeister/kafka:latest"
    ports:
     - 9092
    environment:
      KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_HOST_IP}
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_HEAP_OPTS: "-Xmx256M -Xms128M"
      SERVICE_9092_NAME: "kafka"
    depends_on:
    - vconsul
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  #
  # Single-node consul agent
  #
  vconsul:
    image: "${REGISTRY}consul:0.9.2"
    command: agent -server -bootstrap -client 0.0.0.0 -ui
    ports:
    - "8300:8300"
    - "8400:8400"
    - "8500:8500"
    - "8600:8600/udp"
    environment:
      #SERVICE_53_IGNORE: "yes"
      SERVICE_8300_IGNORE: "yes"
      SERVICE_8400_IGNORE: "yes"
      SERVICE_8500_NAME: "consul-rest"
  #
  # Registrator
  #
  registrator:
    image: "${REGISTRY}gliderlabs/registrator:latest"
    command: [
      "-ip=${DOCKER_HOST_IP}",
      "-retry-attempts", "100",
      "-cleanup",
      # "-internal",
      "consul://vconsul:8500"
    ]
    links:
    - vconsul
    volumes:
    - "/var/run/docker.sock:/tmp/docker.sock"

  #
  # Fluentd log server
  #
  fluentd:
    image: "${REGISTRY}fluent/fluentd:v0.12.42"
    ports:
    - "24224:24224"
    volumes:
    - "/tmp/fluentd:/fluentd/log"
    environment:
      SERVICE_24224_NAME: "fluentd-intake"

  #
  # Graphite-Grafana-statsd service instance
  # (demo place-holder for external KPI system)
  #
  grafana:
    image: "${REGISTRY}${REPOSITORY}voltha-grafana${TAG}"
    ports:
    - "8883:80"
    - "2003:2003"
    - "2004:2004"
    - "8126:8126"
    - "8125:8125/udp"
    environment:
      SERVICE_80_NAME:   "grafana-web-ui"
      SERVICE_2003_NAME: "carbon-plain-text-intake"
      SERVICE_2004_NAME: "carbon-pickle-intake"
      SERVICE_8126_NAME: "statsd-tcp-intake"
      SERVICE_8125_NAME: "statsd-udp-intake"
      GR_SERVER_ROOT_URL: "http://localhost:80/grafana/"

  #
  # Shovel (Kafka-graphite-gateway)
  #
  shovel:
    image: "${REGISTRY}${REPOSITORY}voltha-shovel${TAG}"
    command: [
      "/shovel/shovel/main.py",
      "--kafka=@kafka",
      "--consul=${DOCKER_HOST_IP}:8500",
      "--topic=voltha.kpis",
      "--host=${DOCKER_HOST_IP}"
    ]
    depends_on:
    - vconsul
    - kafka
    - grafana
    restart: unless-stopped

  #
  # Voltha server instance(s)
  #
  voltha:
    image: "${REGISTRY}${REPOSITORY}voltha-voltha${TAG}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
#      Use the fluentd driver to push logs to fluentd instead
#      driver: "fluentd"
#      options:
#        fluentd-address: ${DOCKER_HOST_IP}:24224
    command: [
      "/voltha/voltha/main.py",
      "-v",
      "--consul=${DOCKER_HOST_IP}:8500",
      "--rest-port=8880",
      "--grpc-port=50556",
      "--kafka=@kafka",
      "--instance-id-is-container-name",
      "--interface=eth1",
      "--backend=consul",
      "-v"
    ]
    ports:
    - 8880
    - 50556
    - 18880
    - "60001:60001"
    depends_on:
    - vconsul
    links:
    - vconsul
    environment:
      SERVICE_8880_NAME: "voltha-health"
      SERVICE_8880_CHECK_HTTP: "/health"
      SERVICE_8880_CHECK_INTERVAL: "5s"
      SERVICE_8880_CHECK_TIMEOUT: "1s"
      SERVICE_18880_NAME: "voltha-sim-rest"
      SERVICE_HOST_IP: "${DOCKER_HOST_IP}"
    volumes:
    - "/var/run/docker.sock:/tmp/docker.sock"
    networks:
    - default
    - ponmgmt

  envoy:
    image: "${REGISTRY}${REPOSITORY}voltha-envoy${TAG}"
    entrypoint:
      - /usr/local/bin/envoyd
      - -envoy-cfg-template
      - "/envoy/voltha-grpc-proxy.template.json"
      - -envoy-config
      - "/envoy/voltha-grpc-proxy.json"
      - -consul-svc-nme
      - "vconsul"
      - -kv-svc-name
      - "vconsul"
    ports:
      - "50555:50555"
      - "8882:8882"
      - "8443:8443"
      - "8001:8001"
    environment:
      SERVICE_50555_NAME: "voltha-grpc"
    volumes:
    - "/var/run/docker.sock:/tmp/docker.sock"
    networks:
    - default
    - ponmgmt
    links:
    - voltha:vcore
  #
  # Voltha cli container
  #
  cli:
    image: "${REGISTRY}${REPOSITORY}voltha-cli${TAG}"
    command: [
      "/cli/cli/setup.sh",
      "-L",
      "-C vconsul:8500",
      "-G"
    ]
    environment:
      DOCKER_HOST_IP: "${DOCKER_HOST_IP}"
    ports:
    - "5022:22"
    depends_on:
    - voltha

#############################################
# Item below this line will soon be removed.#
#############################################

  #
  # ofagent server instance
  #
  ofagent:
    image: "${REGISTRY}${REPOSITORY}voltha-ofagent${TAG}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
#      Use the fluentd driver to push logs to fluentd instead
#      driver: "fluentd"
#      options:
#        fluentd-address: ${DOCKER_HOST_IP}:24224
    command: [
      "/ofagent/ofagent/main.py",
      "-v",
      "--consul=${DOCKER_HOST_IP}:8500",
      "--controller=${DOCKER_HOST_IP}:6653",
      "--grpc-endpoint=@voltha-grpc",
      "--instance-id-is-container-name",
      "-v"
    ]
    depends_on:
    - vconsul
    - voltha
    links:
    - vconsul
    volumes:
    - "/var/run/docker.sock:/tmp/docker.sock"
    restart: unless-stopped

  #
  # Netconf server instance(s)
  #
  netconf:
    image: "${REGISTRY}${REPOSITORY}voltha-netconf${TAG}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
#      Use the fluentd driver to push logs to fluentd instead
#      driver: "fluentd"
#      options:
#        fluentd-address: ${DOCKER_HOST_IP}:24224
    privileged: true
    command: [
      "/netconf/netconf/main.py",
      "-v",
      "--consul=${DOCKER_HOST_IP}:8500",
      "--grpc-endpoint=@voltha-grpc",
      "--instance-id-is-container-name",
      "-v"
    ]
    ports:
    - "830:1830"
    depends_on:
    - vconsul
    - voltha
    links:
    - vconsul
    environment:
      SERVICE_1830_NAME: "netconf-server"
    volumes:
    - "/var/run/docker.sock:/tmp/docker.sock"

  #
  # Dashboard daemon
  #
  dashd:
    image: "${REGISTRY}${REPOSITORY}voltha-dashd${TAG}"
    command: [
      "/dashd/dashd/main.py",
      "--kafka=@kafka",
      "--consul=${DOCKER_HOST_IP}:8500",
      "--grafana_url=http://admin:admin@${DOCKER_HOST_IP}:8883/api",
      "--topic=voltha.kpis",
      "--docker_host=${DOCKER_HOST_IP}"
    ]
    depends_on:
    - vconsul
    - kafka
    - grafana
    restart: unless-stopped

  #
  # Nginx service consolidation
  #
  nginx:
    image: "${REGISTRY}${REPOSITORY}voltha-nginx${TAG}"
    ports:
    - "80:80"
    environment:
      CONSUL_ADDR: "${DOCKER_HOST_IP}:8500"
    command: [
      "/nginx_config/start_service.sh"
    ]
    depends_on:
    - vconsul
    - grafana
    - portainer
    restart: unless-stopped

  #
  # Docker ui
  #
  portainer:
    image: "${REGISTRY}${REPOSITORY}voltha-portainer${TAG}"
    ports:
    - "9000:9000"
    environment:
      CONSUL_ADDR: "${DOCKER_HOST_IP}:8500"
    restart: unless-stopped
    entrypoint: ["/portainer", "--logo", "/docker/images/logo_alt.png"]
    volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"

networks:
  default:
    driver: bridge
  ponmgmt:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: "ponmgmt"
