#  Copyright (C) 2020 Nordix Foundation. All rights reserved.
#  ========================================================================
#  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.
#  ============LICENSE_END=================================================
#
version: '3.5'

networks:
  default:
    driver: bridge
    name: nonrtric-docker-net

services:
  policy-agent:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-policy-agent:2.2.0
    container_name: policy-agent
    networks:
      default:
        aliases:
          - policy-agent-container
    ports:
      - 8081:8081
      - 8433:8433
    volumes:
      - ./pms/application_configuration.json:/opt/app/policy-agent/data/application_configuration.json:ro
      - ./pms/application-policyagent.yaml:/opt/app/policy-agent/config/application.yaml:ro
    # For using own certs instead of the default ones (built into the container),
    # place them in pms/ directory, update the application-policyagent.yaml file, and uncomment the following lines
    #  - ./pms/keystore-policyagent.jks:/opt/app/policy-agent/etc/cert/keystore.jks:ro
    #  - ./pms/truststore-policyagent.jks:/opt/app/policy-agent/etc/cert/truststore.jks:ro
    #  - ./pms/application-policyagent.yaml:/opt/app/policy-agent/config/application.yaml:ro

  a1-sim-OSC:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/a1-simulator:2.1.0
    container_name: a1-sim-OSC
    networks:
      - default
    ports:
      - 30001:8085
      - 30002:8185
    environment:
      - A1_VERSION=OSC_2.1.0
      - REMOTE_HOSTS_LOGGING=1
      - ALLOW_HTTP=true

  a1-sim-STD:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/a1-simulator:2.1.0
    container_name: a1-sim-STD
    networks:
      - default
    ports:
      - 30003:8085
      - 30004:8185
    environment:
      - A1_VERSION=STD_1.1.3
      - REMOTE_HOSTS_LOGGING=1
      - ALLOW_HTTP=true

  policy-control-panel:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-controlpanel:2.2.0
    container_name: policy-control-panel
    networks:
      - default
    ports:
      - 8080:8080
      - 8082:8082

  zookeeper:
    image: nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
     ZOOKEEPER_REPLICAS: 1
     ZOOKEEPER_TICK_TIME: 2000
     ZOOKEEPER_SYNC_LIMIT: 5
     ZOOKEEPER_INIT_LIMIT: 10
     ZOOKEEPER_MAX_CLIENT_CNXNS: 200
     ZOOKEEPER_AUTOPURGE_SNAP_RETAIN_COUNT: 3
     ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: 24
     ZOOKEEPER_CLIENT_PORT: 2181
     KAFKA_OPTS: -Djava.security.auth.login.config=/etc/zookeeper/secrets/jaas/zk_server_jaas.conf -Dzookeeper.kerberos.removeHostFromPrincipal=true -Dzookeeper.kerberos.removeRealmFromPrincipal=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl
     ZOOKEEPER_SERVER_ID: 1
    volumes:
      -  ./zk/zk_server_jaas.conf:/etc/zookeeper/secrets/jaas/zk_server_jaas.conf
    networks:
      - default

  kafka:
   image: nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4
   container_name: kafka
   ports:
    - "9092:9092"
   environment:
    enableCadi: 'false'
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 40000
    KAFKA_ZOOKEEPER_SESSION_TIMEOUT_MS: 40000
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT
    KAFKA_ADVERTISED_LISTENERS: INTERNAL_PLAINTEXT://kafka:9092
    KAFKA_LISTENERS: INTERNAL_PLAINTEXT://0.0.0.0:9092
    KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL_PLAINTEXT
    KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE: 'false'
    KAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/secrets/jaas/zk_client_jaas.conf
    KAFKA_ZOOKEEPER_SET_ACL: 'true'
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    # Reduced the number of partitions only to avoid the timeout error for the first subscribe call in slow environment
    KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 1
   volumes:
     -  ./kafka/zk_client_jaas.conf:/etc/kafka/secrets/jaas/zk_client_jaas.conf
   networks:
      - default
   depends_on:
    - zookeeper

  dmaap:
    image: nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
    container_name: dmaap-mr
    ports:
      - "3904:3904"
      - "3905:3905"
    environment:
     enableCadi: 'false'
    volumes:
      - ./mr/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
      - ./mr/logback.xml:/appl/dmaapMR1/bundleconfig/etc/logback.xml
      - ./mr/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
    networks:
      - default
    depends_on:
      - zookeeper
      - kafka