# ============LICENSE_START=======================================================
# Copyright (C) 2021 Nordix Foundation.
# Modifications Copyright (C) 2021-2022 Bell Canada.
# ================================================================================
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
version: "3.7"

services:

  cps-temporal:
    container_name: cps-temporal
    image: ${CPS_TEMPORAL_DOCKER_REPO-nexus3.onap.org:10003/}onap/cps-temporal:${CPS_TEMPORAL_VERSION:-latest}
    ports:
      - '8082:8080'
      - '8081:8081'
    environment:
      DB_HOST: timescaledb
      DB_PORT: 5432
      DB_USERNAME: cpstemporal
      DB_PASSWORD: cpstemporal
      KAFKA_BOOTSTRAP_SERVER: kafka:9092
      APP_USERNAME: cpstemporal
      APP_PASSWORD: cpstemporal
    restart: unless-stopped
    depends_on:
      - timescaledb
      - kafka

  timescaledb:
    container_name: timescaledb
    image: timescale/timescaledb:2.5.1-pg14
    ports:
      - '5433:5432'
    environment:
      POSTGRES_DB: cpstemporaldb
      POSTGRES_USER: cpstemporal
      POSTGRES_PASSWORD: cpstemporal

  zookeeper:
    image: confluentinc/cp-zookeeper:6.1.1
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: confluentinc/cp-kafka:6.1.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

  cps-and-ncmp:
    container_name: cps-and-ncmp
    image: ${CPS_CORE_DOCKER_REPO-nexus3.onap.org:10003/}onap/cps-and-ncmp:${STABLE_CPS_CORE_VERSION:-latest}
    ports:
      - "8083:8080"
      - "8087: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

  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}
