# ============LICENSE_START=======================================================
# Copyright (c) 2020 Pantheon.tech.
# Modifications Copyright (C) 2021 Bell Canada.
# Modifications Copyright (C) 2021 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_USERNAME:-cpsuser}
  #    CPS_PASSWORD: ${CPS_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_USERNAME:-cpsuser}
  #    CPS_PASSWORD: ${CPS_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.1.1
  #    environment:
  #      ZOOKEEPER_CLIENT_PORT: 2181
  #      ZOOKEEPER_TICK_TIME: 2000
  #    ports:
  #      - 22181:2181
  #
  #  kafka:
  #    image: confluentinc/cp-kafka:6.1.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:
      - '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}
      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