# ============LICENSE_START=======================================================
# Copyright (c) 2020 Pantheon.tech.
# Modifications Copyright (C) 2021 Bell Canada.
# Modifications Copyright (C) 2021-2022 Nordix 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.
# ============LICENSE_END=========================================================

version: "3.7"

services:
  ### Services cps-service, cps-ncmp, zookeeper and kafka are commented below, these
  ### services can be un-commented and used on need to use basis. Only minimal
  ### services will run (dbpostgresql, cps-and-ncmp and ncmp-dmi-plugin) by default.

  #cps-standalone:
  #  container_name: cps-service
  #  image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-service:${VERSION:-latest}
  #  ports:
  #    - "8881:8080"
  #    - "8887:8081"
  #  environment:
  #    CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
  #    CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
  #    DB_HOST: dbpostgresql
  #    DB_USERNAME: ${DB_USERNAME:-cps}
  #    DB_PASSWORD: ${DB_PASSWORD:-cps}
  #    #KAFKA_BOOTSTRAP_SERVER: kafka:9092
  #    #notification.data-updated.enabled: 'true'
  #    #NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
  #  restart: unless-stopped
  #  depends_on:
  #    - dbpostgresql

  #ncmp-standalone:
  #  container_name: cps-ncmp
  #  image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-ncmp:${VERSION:-latest}
  #  ports:
  #    - "8882:8080"
  #    - "8887:8081"
  #  environment:
  #    CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
  #    CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
  #    DB_HOST: dbpostgresql
  #    DB_USERNAME: ${DB_USERNAME:-cps}
  #    DB_PASSWORD: ${DB_PASSWORD:-cps}
  #    DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
  #    DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
  #    #KAFKA_BOOTSTRAP_SERVER: kafka:9092
  #    #notification.data-updated.enabled: 'true'
  #    #NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
  #  restart: unless-stopped
  #  depends_on:
  #    - dbpostgresql

  #  zookeeper:
  #    image: confluentinc/cp-zookeeper:6.2.1
  #    environment:
  #      ZOOKEEPER_CLIENT_PORT: 2181
  #      ZOOKEEPER_TICK_TIME: 2000
  #    ports:
  #      - 22181:2181
  #
  #  kafka:
  #    image: confluentinc/cp-kafka:6.2.1
  #    depends_on:
  #      - zookeeper
  #    ports:
  #      - 29092:29092
  #    environment:
  #      KAFKA_BROKER_ID: 1
  #      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  #      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
  #      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
  #      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
  #      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  dbpostgresql:
    container_name: dbpostgresql
    image: postgres:13.2-alpine
    ports:
      - ${DB_PORT:-5432}:5432
    environment:
      POSTGRES_DB: cpsdb
      POSTGRES_USER: ${DB_USERNAME:-cps}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-cps}

  cps-and-ncmp:
    container_name: cps-and-ncmp
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest}
    ports:
      - ${CPS_CORE_PORT:-8883}:8080
      - ${CPS_CORE_MANAGEMENT_PORT:-8887}:8081
    environment:
      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      DB_HOST: ${DB_HOST:-dbpostgresql}
      DB_USERNAME: ${DB_USERNAME:-cps}
      DB_PASSWORD: ${DB_PASSWORD:-cps}
      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
      KAFKA_BOOTSTRAP_SERVER: kafka:9092
      notification.data-updated.enabled: 'true'
      NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
    restart: unless-stopped
    depends_on:
      - dbpostgresql

  ### if kafka is not required comment out zookeeper and kafka ###
  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.1
    container_name: zookeeper
    ports:
      - '2181:2181'
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: confluentinc/cp-kafka:6.2.1
    container_name: kafka
    ports:
      - "19092:19092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,CONNECTIONS_FROM_HOST://localhost:19092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  ### Comment out this section if dmi plugin is not required ###
  ncmp-dmi-plugin:
    container_name: ncmp-dmi-plugin
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/ncmp-dmi-plugin:${DMI_VERSION:-1.2.0-SNAPSHOT-latest}
    ports:
      - ${DMI_PORT:-8783}:8080
      - ${DMI_MANAGEMENT_PORT:-8787}:8081
    environment:
      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      CPS_CORE_HOST: ${CPS_CORE_HOST:-cps-and-ncmp}
      CPS_CORE_PORT: ${CPS_CORE_PORT:-8080}
      CPS_CORE_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_CORE_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      SDNC_HOST: ${SDNC_HOST:-sdnc}
      SDNC_PORT: ${SDNC_PORT:-8181}
      SDNC_USERNAME: ${SDNC_USERNAME:-admin}
      SDNC_PASSWORD: ${SDNC_PASSWORD:-Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U}
      DMI_SERVICE_URL: ${DMI_SERVICE_URL:-http://ncmp-dmi-plugin:8783}
      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
      KAFKA_BOOTSTRAP_SERVER: kafka:9092
      notification.data-updated.enabled: 'true'
      NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'
    restart: unless-stopped
