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

services:

  ### docker-compose --profile dmi-service up -d -> run CPS services incl. dmi-plugin ###
  ### docker-compose --profile dmi-stub --profile monitoring up -d -> run CPS with stubbed dmi-plugin (for registration performance testing)
  ### docker-compose --profile dmi-stub --profile tracing up -d -> run CPS with stubbed dmi-plugin (for open telemetry tracing testing make ONAP_TRACING_ENABLED "true" later "http://localhost:16686" can be accessed from browser)
  ### to disable notifications make notification.enabled to false & comment out kafka/zookeeper services ###

  dbpostgresql:
    container_name: dbpostgresql
    image: postgres:14.1-alpine
    ports:
      - ${DB_PORT:-5432}:5432
    environment:
      POSTGRES_DB: cpsdb
      POSTGRES_USER: ${DB_USERNAME:-cps}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-cps}
    volumes:
      - ./postgres-init.sql:/docker-entrypoint-initdb.d/postgres-init.sql
    deploy:
      resources:
        reservations:
          cpus: '1'
          memory: 1G
        limits:
          cpus: '6'
          memory: 3G

  cps-and-ncmp:
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest}
    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:29092
      notification.enabled: 'true'
      ONAP_TRACING_ENABLED: 'false'
      ONAP_OTEL_SAMPLER_JAEGER_REMOTE_ENDPOINT: http://jaeger-service:14250
      ONAP_OTEL_EXPORTER_ENDPOINT: http://jaeger-service:4317
    restart: unless-stopped
    depends_on:
      - dbpostgresql
    deploy:
      replicas: 2
      resources:
        reservations:
          cpus: '2'
          memory: 2G
        limits:
          cpus: '3'
          memory: 3G

  nginx:
    container_name: nginx-loadbalancer
    image: nginx:latest
    ports:
      - ${CPS_CORE_PORT:-8883}:80
    depends_on:
      - cps-and-ncmp
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./proxy_params:/etc/nginx/proxy_params

  ### 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:
      - '9092:9092'
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,CONNECTIONS_FROM_HOST://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  ncmp-dmi-plugin:
    container_name: ncmp-dmi-plugin
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/ncmp-dmi-plugin:${DMI_VERSION:-1.6.0-SNAPSHOT-latest}
    ports:
      - ${DMI_PORT:-8783}:8080
    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_SERVICE_NAME: ${DMI_SERVICE_NAME:-dminame1}
      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
      KAFKA_BOOTSTRAP_SERVER: kafka:29092
    restart: unless-stopped
    profiles:
      - dmi-service

  ncmp-dmi-plugin-demo-and-csit-stub:
    container_name: ncmp-dmi-plugin-demo-and-csit-stub
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/dmi-plugin-demo-and-csit-stub:${DMI_DEMO_STUB_VERSION:-latest}
    ports:
      - ${DMI_DEMO_STUB_PORT:-8784}:8092
    environment:
      KAFKA_BOOTSTRAP_SERVER: kafka:29092
      NCMP_CONSUMER_GROUP_ID: ncmp-group
      NCMP_ASYNC_M2M_TOPIC: ncmp-async-m2m
      MODULE_REFERENCES_DELAY_MS: 100
      MODULE_RESOURCES_DELAY_MS: 1000
      READ_DATA_FOR_CM_HANDLE_DELAY_MS: 300
      WRITE_DATA_FOR_CM_HANDLE_DELAY_MS: 670
    restart: unless-stopped
    profiles:
      - dmi-stub
      - dmi-service

  policy-executor-stub:
    container_name: policy-executor-stub
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/policy-executor-stub:latest
    ports:
      - 8785:8080
    restart: unless-stopped
    profiles:
      - policy-executor-stub

  prometheus:
    container_name: prometheus-container
    image: prom/prometheus:latest
    ports:
      - 9090:9090
    restart: always
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    profiles:
      - monitoring

  grafana:
    image: grafana/grafana-oss:latest
    user: ""
    container_name: grafana-container
    depends_on:
      prometheus:
        condition: service_started
    ports:
      - 3000:3000
    volumes:
      - grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_DOMAIN:localhost
    profiles:
      - monitoring

  kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui:latest
    ports:
      - 8089:8080
    environment:
      DYNAMIC_CONFIG_ENABLED: 'true'
      KAFKA_CLUSTERS_0_NAME: 'cps-kafka-local'
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
    profiles:
      - monitoring

  jaeger-service:
    container_name: jaeger-service
    image: jaegertracing/all-in-one:latest
    ports:
      - 16686:16686
    restart: unless-stopped
    profiles:
      - tracing

volumes:
  grafana:
