#
# ===========LICENSE_START====================================================
#  Copyright (C) 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=====================================================
#

include:
  - compose.common.yml
  - compose.postgres.yml

services:
  api:
    image: ${CONTAINER_LOCATION}onap/policy-api:${POLICY_API_VERSION}
    container_name: policy-api
    hostname: policy-api
    depends_on:
      - policy-db-migrator
    ports:
      - ${API_PORT}:6969
    volumes:
      - ./config/api/apiParameters.yaml:/opt/app/policy/api/etc/apiParameters.yaml:ro
      - ./config/api/logback.xml:/opt/app/policy/api/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/api/bin/wait_for_port.sh:ro
    entrypoint: ./wait_for_port.sh
    command: [
      '-c', './policy-api.sh',
      'policy-db-migrator', '6824'
    ]

  pap:
    image: ${CONTAINER_LOCATION}onap/policy-pap:${POLICY_PAP_VERSION}
    container_name: policy-pap
    hostname: policy-pap
    depends_on:
      - api
      - kafka
    ports:
      - ${PAP_PORT}:6969
    volumes:
      - ./config/pap/papParameters.yaml:/opt/app/policy/pap/etc/papParameters.yaml:ro
      - ./config/clamp/groups.json:/opt/app/policy/pap/etc/mounted/groups.json:ro
      - ./config/pap/logback.xml:/opt/app/policy/pap/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/pap/bin/wait_for_port.sh:ro
    entrypoint: ./wait_for_port.sh
    command: [
      '-c', './policy-pap.sh',
      'api', '6969',
      'kafka', '9092'
    ]

  apex-pdp:
    image: ${CONTAINER_LOCATION}onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION}
    container_name: policy-apex-pdp
    hostname: policy-apex-pdp
    depends_on:
      - simulator
      - kafka
      - pap
    ports:
      - ${APEX_PORT}:6969
      - ${APEX_EVENTS_PORT}:23324
    volumes:
      - ./config/apex-pdp/OnapPfConfig.json:/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json:ro
      - ./config/apex-pdp/logback.xml:/opt/app/policy/apex-pdp/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
    entrypoint: /opt/app/policy/bin/wait_for_port.sh
    command: [
      '-c', '/opt/app/policy/apex-pdp/bin/apexOnapPf.sh -c /opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json',
      'kafka', '9092',
      'pap', '6969'
    ]

  policy-clamp-runtime-acm-replica:
    image: ${CONTAINER_LOCATION}onap/policy-clamp-runtime-acm:${POLICY_CLAMP_VERSION}
    hostname: policy-clamp-runtime-acm
    depends_on:
      - policy-db-migrator
      - apex-pdp
      - kafka
      - jaeger
      - policy-clamp-ac-http-ppnt-replica
      - policy-clamp-ac-k8s-ppnt-replica
      - policy-clamp-ac-pf-ppnt-replica
      - policy-clamp-ac-sim-ppnt
    expose:
      - 6969
    deploy:
      mode: replicated
      replicas: ${REPLICAS:-2}
    environment:
      OTEL_SERVICE_NAME: acm-r
      OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318
      # Tracing can be configured for grpc or http - default is http
      #OTEL_EXPORTER_OTLP_PROTOCOL: grpc
      #OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: grpc
      #OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4317
    volumes:
      - ./config/clamp/AcRuntimeParameters.yaml:/opt/app/policy/clamp/etc/AcRuntimeParameters.yaml
      - ./config/clamp/logback.xml:/opt/app/policy/clamp/etc/logback.xml:ro
      - ./config/clamp/acm-runtime.sh:/opt/app/policy/clamp/bin/acm-runtime.sh:rw
      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
    entrypoint: /opt/app/policy/bin/wait_for_port.sh
    command: [
      '-c', './acm-runtime.sh',
      'apex-pdp', '6969',
      'kafka', '9092',
      'policy-clamp-ac-http-ppnt', '6969',
      'policy-clamp-ac-k8s-ppnt', '6969',
      'policy-clamp-ac-pf-ppnt', '6969',
      'policy-clamp-ac-sim-ppnt', '6969'
    ]
  policy-clamp-ac-http-ppnt-replica:
    image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-http-ppnt:${POLICY_CLAMP_PPNT_VERSION}
    hostname: policy-clamp-ac-http-ppnt
    depends_on:
      - kafka
      - jaeger
    expose:
      - 6969
    deploy:
      mode: replicated
      replicas: ${REPLICAS:-2}
    environment:
      OTEL_SERVICE_NAME: http-ppnt
      OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318
    volumes:
      - ./config/clamp/HttpParticipantParameters.yaml:/opt/app/policy/clamp/etc/HttpParticipantParameters.yaml
      - ./config/clamp/http-participant.sh:/opt/app/policy/clamp/bin/http-participant.sh:rw
      - ./config/clamp/logback.xml:/opt/app/policy/clamp/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
    entrypoint: /opt/app/policy/bin/wait_for_port.sh
    command: [
      '-c', './http-participant.sh',
      'kafka', '9092'
    ]
  policy-clamp-ac-k8s-ppnt-replica:
    image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-k8s-ppnt:${POLICY_CLAMP_PPNT_VERSION}
    hostname: policy-clamp-ac-k8s-ppnt
    depends_on:
      - kafka
      - jaeger
    environment:
      OTEL_SERVICE_NAME: k8s-ppnt
      OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318
    expose:
      - 6969
    deploy:
      mode: replicated
      replicas: ${REPLICAS:-2}
    volumes:
      - ./config/clamp/KubernetesParticipantParameters.yaml:/opt/app/policy/clamp/etc/KubernetesParticipantParameters.yaml
      - ./config/clamp/kubernetes-participant.sh:/opt/app/policy/clamp/bin/kubernetes-participant.sh:rw
      - ./config/clamp/logback.xml:/opt/app/policy/clamp/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
    entrypoint: /opt/app/policy/bin/wait_for_port.sh
    command: [
      '-c', './kubernetes-participant.sh',
      'kafka', '9092'
    ]
  policy-clamp-ac-pf-ppnt-replica:
    image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-pf-ppnt:${POLICY_CLAMP_PPNT_VERSION}
    hostname: policy-clamp-ac-pf-ppnt
    depends_on:
      - kafka
      - jaeger
    expose:
      - 6969
    deploy:
      mode: replicated
      replicas: ${REPLICAS:-2}
    environment:
      OTEL_SERVICE_NAME: policy-ppnt
      OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: http/protobuf
      OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318
    volumes:
      - ./config/clamp/PolicyParticipantParameters.yaml:/opt/app/policy/clamp/etc/PolicyParticipantParameters.yaml:ro
      - ./config/clamp/policy-participant.sh:/opt/app/policy/clamp/bin/policy-participant.sh:rw
      - ./config/clamp/logback.xml:/opt/app/policy/clamp/etc/logback.xml:ro
      - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
    entrypoint: /opt/app/policy/bin/wait_for_port.sh
    command: [
      '-c', './policy-participant.sh',
      'kafka', '9092'
    ]
  nginx:
    image: ${CONTAINER_LOCATION}library/nginx:latest
    volumes:
      - ./config/nginx/nginx-acm.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - policy-clamp-runtime-acm-replica
    ports:
      - ${ACM_PORT}:${ACM_PORT}
