# Copyright 2017 the original author or authors.
#
# 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.
#
#
# SWARM_MANAGER_COUNT - The number of managers in the swarm cluster. This is
#               used to limit the number of instances of some of the 
#               service instances for smaller clusters. 
#               [ NOTE - currently this parameter is handled via a Jinga2
#                 templating capability, because as of 17.09.0-ce Docker
#                 cannot use and environment variable for the `replicas`
#                 attribute on a container. ]
# REGISTRY    - The docker registry from which images should be pulled.
#               If specified if should end in a `/`. Defaults to empty.
# TAG         - The tag that should be used when referencing VOLTHA docker
#               images, defaults to `latest`.
# CONSUL_ROOT - The local path on which the consul/data and consul/config
#               directories should be created. Defaults to `/var/local`.
# VOLTHA_LOGS - The location into which `fluentd` should writes logs.
#               Defaults to `/var/log`.
# RADIUS_ROOT - The location in which the `data/clients.conf` and 
#               `data/users` configuration files can be found. Defaults
#               to `/var/local`.
# DOCKER_HOST_IP -
# ZK_TAG      - The tag that should be used when referencing the ZooKeeper
#               docker image. Defaults to `3.4.11`.
# KAFKA_TAG   - The tag that should be used when referencing the Kafka
#               docker image. Default to `1.0.0`.
# CONSUL_TAG  - The tag that should be used when referencing the Consul
#               docker image. Defaults to `0.9.2`.
# RADIUS_TAG  - The tag that should be used when referencing the FreeRADIUS
#               docker image. Defaults to `latest`.
version: "3"

services:
  zk1:
    image: "${REGISTRY}zookeeper:${ZK_TAG:-3.4.11}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    networks:
      - kafka-net
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888

  zk2:
    image: "${REGISTRY}zookeeper:${ZK_TAG:-3.4.11}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    networks:
      - kafka-net
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888

  zk3:
    image: "${REGISTRY}zookeeper:${ZK_TAG:-3.4.11}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    networks:
      - kafka-net
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888

  kafka:
    deploy:
      mode: global
    image: "${REGISTRY}wurstmeister/kafka:${KAFKA_TAG:-1.0.0}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    environment:
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
      KAFKA_HEAP_OPTS: -Xmx256M -Xms128M
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - kafka-net
      - voltha-net
    ports:
      - 9092:9092

  consul:
    image: ${REGISTRY}consul:${CONSUL_TAG:-0.9.2}
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3

    # Deploy to all docker manager nodes
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager
      restart_policy:
        condition: on-failure
    entrypoint:
      - consul
      - agent
      - -server
      - -bootstrap-expect={{ SWARM_MANAGER_COUNT | default(1) }}
      - -config-dir=/consul/config
      - -data-dir=/consul/data              # mandatory property
      - -client=0.0.0.0
      - -advertise={{ '{{' }} GetAllInterfaces | include "network" "172.29.20.0/29" | sort "size,address" | attr "address" {{ '}}' }}
      - -ui
      - -raft-protocol=3
      - -rejoin
      - -retry-join=172.29.20.2
      - -retry-join=172.29.20.3
      - -retry-join=172.29.20.4
      - -retry-join=172.29.20.5
      - -retry-join=172.29.20.6
      - -retry-join=172.29.20.7
    networks:
      - consul-net
      - voltha-net
    ports:
      - "8300:8300"
      - "8400:8400"
      - "8500:8500"
      - "8600:8600/udp"
{%- if CONSUL_ROOT is defined and CONSUL_ROOT %}
    volumes:
      - {{ CONSUL_ROOT }}/data:/consul/data
      - {{ CONSUL_ROOT }}/config:/consul/config
{%- endif %}

  fluentdactv:
    image: "${REGISTRY}voltha/fluentd:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    environment:
        FLUENTD_CONF: fluent-agg.conf
    networks:
      - voltha-net
    ports:
      - "24224"
{%- if VOLTHA_LOGS is defined and VOLTHA_LOGS %}
    volumes:
      - "{{ VOLTHA_LOGS }}:/fluentd/log"
{%- endif %}

  fluentdstby:
    image: "${REGISTRY}voltha/fluentd:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    environment:
        FLUENTD_CONF: fluent-agg.conf
    networks:
      - voltha-net
    ports:
      - "24224"
{%- if VOLTHA_LOGS is defined and VOLTHA_LOGS %}
    volumes:
      - "{{ VOLTHA_LOGS }}:/fluentd/log"
{%- endif %}

  # The Fluentd container is part of the data collection
  # infrastructure.
  fluentd:
    image: "${REGISTRY}voltha/fluentd:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      mode: replicated
      replicas: {{ SWARM_MANAGER_COUNT | default(1) }}
      restart_policy:
        condition: any
    environment:
        SERVICE_24224_NAME: "fluentd-intake"
        FLUENTD_CONF: fluent.conf
        WAIT_FOR: "fluentdactv:24224 fluentdstby:24224"
        WAIT_FOR_TIMEOUT: 0
    networks:
      - voltha-net
    ports:
      - "24224"

  # Free RADIUS can be used to test VOLTHA's authentication 
  # sequence, i.e., EAPOL from a device behind an OLT to 
  # RADIUS authentication on the back end systems. By default
  # no instances of Free RADIUS are deployed.
  freeradius:
    deploy:
      replicas: 0
    image: "${REGISTRY}marcelmaatkamp/freeradius:${RADIUS_TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    ports:
      - "1812:1812/udp"
      - "1813:1813"
      - "18120:18120"
  
{%- if RADIUS_ROOT is defined and RADIUS_ROOT %}  
    # CONFIG: When deploying a Free RADIUS instance client and user
    #      information will need to be configured for the service to
    #      operate correctly.
    #
    volumes:
      - {{ RADIUS_ROOT }}/data/clients.conf:/etc/raddb/clients.conf
      - {{ RADIUS_ROOT }}/data/users:/etc/raddb/users
{%- endif %}
    networks:
      - voltha-net

  # The cluster manager container calculates and servers ONOS cluster
  # meta data via HTTP so that ONOS instances can form an HA cluster.
  # The cluster manager must run on a manager node so that it can 
  # retrieve service information from manager nodes
  onos_cluster_manager:
    image: "${REGISTRY}voltha/unum:${TAG:-latest}"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    environment:
      PERIOD: "10s"
      LOG_LEVEL: "debug"
      ORCHESTRATION: "swarm://"
      LABELS: "org.voltha.onos.cluster:true"
      NETWORK: "org.voltha.onos.cluster:true"
    ports:
      - 5411:5411
    networks:
      - voltha-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  # ONOS is the SDN controller for the solution and handles AAA,
  # IGMP proxy, and L2 DHCP requests as well as manages flows
  # down to the virtual devices (MCAST + OLT flows).
  # Currently there is a single instance of ONOS as some of the
  # applications running under ONOS do not support HA.
  onos:
    deploy:
      replicas: 1
      labels:
        org.voltha.onos.cluster: "true"
    image: "${REGISTRY}voltha/onos:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    ports:
      - 8101:8101 # ssh
      - 6653:6653 # OF
      - 8181:8181 # UI
    environment:
      EXTRA_JAVA_OPTS: "-Donos.cluster.metadata.uri=http://onos_cluster_manager:5411/config/"
    networks:
      - voltha-net

  # The VCORE container is the core capabilities of VOLTHA including
  # interacting with device adapters
  vcore:
    image: "${REGISTRY}voltha/voltha:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: {{ SWARM_MANAGER_COUNT | default(1) }}
    entrypoint:
      - voltha/voltha/main.py
      - -v
      - --consul=consul:8500
      - --fluentd=fluentd:24224
      - --kafka=kafka
      - --rest-port=8880
      - --grpc-port=50556
      - --instance-id-is-container-name
      - --backend=consul
      - --inter-core-subnet=172.29.19.0/24
      - --pon-subnet=172.29.19.0/24
    networks:
      - voltha-net
    ports:
      - "8880:8880"
      - "18880:18880"
      - "50556:50556"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock

  # The OpenFlow Agent support the OpenFlow protocol communication
  # between ONOS and VOLTHA.
  ofagent:
    image: "${REGISTRY}voltha/ofagent:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: 1
    entrypoint:
      - /ofagent/ofagent/main.py
      - -v
      - --consul=consul:8500
      - --fluentd=fluentd:24224
      - --controller=onos:6653
      - --grpc-endpoint=vcore:50556
      - --instance-id-is-container-name
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    networks:
      - voltha-net

  # The VOLTHA container supports load balancing of request to
  # the VOLTHA components as well as surfaces a REST API and maps
  # the requests to GPRC
  voltha:
    image: "${REGISTRY}voltha/envoy:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: 1
    #environment:
    #  DOCKER_HOST_IP: "${DOCKER_HOST_IP}"
    entrypoint:
      - /usr/local/bin/envoyd
      - -envoy-cfg-template
      - "/envoy/voltha-grpc-proxy.template.json"
      - -envoy-config
      - "/envoy/voltha-grpc-proxy.json"
    networks:
      - voltha-net
    ports:
      - "50555:50555"
      - "8882:8882"
      - "8443:8443"
      - "8001:8001"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock

  # The CLI container provides an CLI to the VOLTHA capabilitiy 
  # that can be accessed via SSH.
  cli:
    image: "${REGISTRY}voltha/cli:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      replicas: {{ SWARM_MANAGER_COUNT | default(1) }}
    #environment:
    #  DOCKER_HOST_IP: "${DOCKER_HOST_IP}"
    entrypoint:
      - /cli/cli/setup.sh
      - -C consul:8500
      - -g voltha:50555
      - -s voltha:18880
      - -G
    networks:
      - voltha-net
    ports:
      - "5022:22"

  # The Netconf container provides an NETCONF API to be used
  # with VOLTHA and maps that to GRPC requests
  netconf:
    image: "${REGISTRY}voltha/netconf:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      mode: global
    environment:
      SERVICE_1830_NAME: "netconf-server"
    entrypoint:
      - /netconf/netconf/main.py
      - -v
      - --consul=consul:8500
      - --fluentd=fluentd:24224
      - --grpc-endpoint=voltha:50555
      - --instance-id-is-container-name
    networks:
      - voltha-net
    ports:
      - "830:1830"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock

  # The tools container provides a bash command shell to which
  # an operator can SSH that has the same network connectivity
  # as other VOLTHA containers and is thus a convenient 
  # troubleshooting tool
  tools:
    image: "${REGISTRY}voltha/tools:${TAG:-latest}"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: 3
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
    ports:
      - "4022:22"
    networks:
      - voltha-net
      - kafka-net

networks:
  consul-net:
    driver: overlay
    driver_opts:
      encrypted: "true"
    ipam:
      driver: default
      config:
        - subnet: 172.29.20.0/29

  voltha-net:
    driver: overlay
    driver_opts:
      encrypted: "true"
    ipam:
      driver: default
      config:
        - subnet: 172.29.19.0/24
    labels:
      org.voltha.onos.cluster: "true"

  kafka-net:
    driver: overlay
    driver_opts:
      encrypted: "true"
