#
# ===========LICENSE_START====================================================
#  Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
#  Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
#  Modification Copyright 2021-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=====================================================
#
version: '2'
services:
   mariadb:
      image: nexus3.onap.org:10001/mariadb:${POLICY_MARIADB_VER}
      container_name: mariadb
      hostname: mariadb
      command: ['--lower-case-table-names=1', '--wait_timeout=28800', '--default-authentication-plugin=mysql_native_password']
      env_file: ./config/db/db.conf
      volumes:
         - ./config/db:/docker-entrypoint-initdb.d:ro
         - ./config/clamp/policy-clamp-create-tables.sql:/tmp/policy-clamp-create-tables.sql
      ports:
       - "3306:3306"
   policy-db-migrator:
      image: ${CONTAINER_LOCATION}onap/policy-db-migrator:${POLICY_DOCKER_VERSION}
      container_name: policy-db-migrator
      hostname: policy-db-migrator
      depends_on:
       - mariadb
      expose:
       - 6824
      env_file: ./config/db/db.conf
      environment:
        SQL_DB: policyadmin
        SQL_HOST: mariadb
      volumes:
         - ./config/db-migrator/init.sh:/opt/app/policy/bin/db_migrator_policy_init.sh: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/bin/db_migrator_policy_init.sh',
                'mariadb', '3306'
               ]
   policy-db-migrator-clamp:
     image: ${CONTAINER_LOCATION}onap/policy-db-migrator:${POLICY_DOCKER_VERSION}
     container_name: policy-db-migrator-clamp
     hostname: policy-db-migrator-clamp
     depends_on:
       - mariadb
     expose:
       - 6824
     env_file: ./config/db/db.conf
     environment:
       SQL_DB: clampacm
       SQL_HOST: mariadb
     volumes:
       - ./config/db-migrator/init.sh:/opt/app/policy/bin/db_migrator_policy_init.sh: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/bin/db_migrator_policy_init.sh',
       'mariadb', '3306'
     ]
   simulator:
      image: ${CONTAINER_LOCATION}onap/policy-models-simulator:${POLICY_MODELS_VERSION}
      container_name: simulator
      hostname: simulator
      networks:
          default:
              aliases:
                  - aai-sim
                  - grpc-sim
                  - sdnc-sim
                  - so-sim
                  - vfc-sim
      volumes:
       - ./config/sim-all:/opt/app/policy/simulators/etc/mounted:ro
       - ./config/sim-all/logback.xml:/opt/app/policy/simulators/etc/mounted/logback.xml:ro
      expose:
       - 6666
       - 6668
       - 6669
       - 6670
       - 6680
      ports:
       - ${SIMULATOR_PORT}:6666
   api:
      image: ${CONTAINER_LOCATION}onap/policy-api:${POLICY_API_VERSION}
      container_name: policy-api
      depends_on:
       - policy-db-migrator
      hostname: policy-api
      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',
        'mariadb', '3306',
        'policy-db-migrator', '6824'
        ]
   pap:
      image: ${CONTAINER_LOCATION}onap/policy-pap:${POLICY_PAP_VERSION}
      container_name: policy-pap
      depends_on:
       - mariadb
       - kafka
       - api
      hostname: policy-pap
      ports:
       - ${PAP_PORT}:6969
      volumes:
       - ./config/pap/papParameters.yaml:/opt/app/policy/pap/etc/papParameters.yaml:ro
       - ./config/${PROJECT}/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',
        'mariadb', '3306',
        'kafka', '9092',
        'api', '6969'
        ]
   xacml-pdp:
      image: ${CONTAINER_LOCATION}onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION}
      container_name: policy-xacml-pdp
      depends_on:
       - mariadb
       - kafka
       - pap
      hostname: policy-xacml-pdp
      ports:
       - ${XACML_PORT}:6969
       - "30999:3904"
      volumes:
       - ./config/xacml-pdp/defaultConfig.json:/opt/app/policy/pdpx/etc/defaultConfig.json:ro
       - ./config/xacml-pdp/logback.xml:/opt/app/policy/pdpx/etc/logback.xml:ro
       - ./wait_for_port.sh:/opt/app/policy/pdpx/bin/wait_for_port.sh:ro
      entrypoint: ./wait_for_port.sh
      command: [
        '-c', './policy-pdpx.sh',
        'mariadb', '3306',
        'kafka', '9092',
        'pap', '6969'
        ]
   drools-pdp:
      image: ${CONTAINER_LOCATION}onap/policy-drools:${POLICY_DROOLS_PDP_VERSION}
      container_name: drools
      depends_on:
       - mariadb
       - kafka
       - pap
      hostname: drools
      ports:
       - ${DROOLS_PORT}:6969
       - ${DROOLS_TELEMETRY_PORT}:9696
      volumes:
       - ./config/drools-pdp/custom:/tmp/policy-install/config:ro
       - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
      env_file:
        - ./config/drools-pdp/env/base.conf
      entrypoint: /opt/app/policy/bin/wait_for_port.sh
      command: [
        '-c', '/opt/app/policy/bin/pdpd-entrypoint.sh boot',
        'mariadb', '3306',
        'kafka', '9092'
        ]
   drools-applications:
      image: ${CONTAINER_LOCATION}onap/policy-pdpd-cl:${POLICY_DROOLS_APPS_VERSION}
      container_name: drools-apps
      depends_on:
       - mariadb
       - simulator
       - kafka
       - pap
       - xacml-pdp
      hostname: drools-apps
      ports:
       - ${DROOLS_APPS_PORT}:6969
       - ${DROOLS_APPS_TELEMETRY_PORT}:9696
      volumes:
       - ./config/drools-applications/custom:/tmp/policy-install/config:ro
       - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro
      env_file:
        - ./config/drools-applications/env/base.conf
        - ./config/drools-applications/env/feature-healthcheck.conf
        - ./config/drools-applications/env/feature-pooling-messages.conf
      entrypoint: /opt/app/policy/bin/wait_for_port.sh
      command: [
        '-c', '/opt/app/policy/bin/pdpd-cl-entrypoint.sh boot',
        'mariadb', '3306',
        'kafka', '9092',
        'pap', '6969',
        'aai-sim', '6666',
        'sdnc-sim', '6668',
        'so-sim', '6669',
        'vfc-sim', '6670'
        ]
   apex-pdp:
      image: ${CONTAINER_LOCATION}onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION}
      container_name: policy-apex-pdp
      depends_on:
       - mariadb
       - simulator
       - kafka
       - pap
      hostname: policy-apex-pdp
      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',
        'mariadb', '3306',
        'kafka', '9092',
        'pap', '6969'
        ]
   distribution:
      image: ${CONTAINER_LOCATION}onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION}
      container_name: policy-distribution
      depends_on:
       - mariadb
       - api
       - pap
       - apex-pdp
      hostname: policy-distribution
      ports:
       - ${DIST_PORT}:6969
      volumes:
       - ./config/distribution/defaultConfig.json:/opt/app/policy/distribution/etc/defaultConfig.json:ro
       - /tmp/distribution/:/opt/app/policy/distribution/etc/temp/:ro
       - ./config/distribution/logback.xml:/opt/app/policy/distribution/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-dist.sh',
        'mariadb', '3306',
        'kafka', '9092',
        'pap', '6969',
        'apex-pdp', '6969'
        ]
   policy-clamp-runtime-acm:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-runtime-acm:${POLICY_CLAMP_VERSION}
      container_name: policy-clamp-runtime-acm
      depends_on:
       - policy-db-migrator-clamp
       - kafka
       - policy-clamp-ac-http-ppnt
       - policy-clamp-ac-k8s-ppnt
       - policy-clamp-ac-pf-ppnt
       - policy-clamp-ac-sim-ppnt
       - apex-pdp
      hostname: policy-clamp-runtime-acm
      ports:
       - ${ACM_PORT}:6969
      volumes:
       - ./config/clamp/AcRuntimeParameters.yaml:/opt/app/policy/clamp/etc/AcRuntimeParameters.yaml
       - ./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', './acm-runtime.sh',
        'mariadb', '3306',
        'kafka', '9092',
        'policy-clamp-ac-http-ppnt', '6969',
        'policy-clamp-ac-k8s-ppnt', '6969',
        'policy-clamp-ac-pf-ppnt', '6969',
        'apex-pdp', '6969'
        ]

   policy-clamp-ac-http-ppnt:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-http-ppnt:${POLICY_CLAMP_PPNT_VERSION}
      container_name: policy-clamp-ac-http-ppnt
      depends_on:
       - kafka
      hostname: policy-clamp-ac-http-ppnt
      ports:
       - "30290:6969"
      volumes:
       - ./config/clamp/HttpParticipantParameters.yaml:/opt/app/policy/clamp/etc/HttpParticipantParameters.yaml
       - ./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:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-k8s-ppnt:${POLICY_CLAMP_PPNT_VERSION}
      container_name: policy-clamp-ac-k8s-ppnt
      depends_on:
       - kafka
      hostname: policy-clamp-ac-k8s-ppnt
      ports:
       - "30295:6969"
      volumes:
       - ./config/clamp/KubernetesParticipantParameters.yaml:/opt/app/policy/clamp/etc/KubernetesParticipantParameters.yaml
       - ./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:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-pf-ppnt:${POLICY_CLAMP_PPNT_VERSION}
      container_name: policy-clamp-ac-pf-ppnt
      depends_on:
       - kafka
       - api
      hostname: policy-clamp-ac-pf-ppnt
      ports:
       - ${POLICY_PARTICIPANT_PORT}:6969
      volumes:
       - ./config/clamp/PolicyParticipantParameters.yaml:/opt/app/policy/clamp/etc/PolicyParticipantParameters.yaml:ro
       - ./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',
        'api', '6969'
        ]
   policy-clamp-ac-a1pms-ppnt:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-a1pms-ppnt:${POLICY_CLAMP_PPNT_VERSION}
      container_name: policy-clamp-ac-a1pms-ppnt
      depends_on:
       - kafka
      hostname: policy-clamp-ac-a1pms-ppnt
      ports:
       - "30296:6969"
      volumes:
       - ./config/clamp/A1pmsParticipantParameters.yaml:/opt/app/policy/clamp/etc/A1pmsParticipantParameters.yaml:ro
       - ./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', './a1pms-participant.sh',
        'kafka', '9092'
        ]
   policy-clamp-ac-kserve-ppnt:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-kserve-ppnt:${POLICY_CLAMP_PPNT_VERSION}
      container_name: policy-clamp-ac-kserve-ppnt
      depends_on:
       - kafka
      hostname: policy-clamp-ac-kserve-ppnt
      ports:
       - "30297:6969"
      volumes:
       - ./config/clamp/KserveParticipantParameters.yaml:/opt/app/policy/clamp/etc/KserveParticipantParameters.yaml:ro
       - ./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', './kserve-participant.sh',
        'kafka', '9092'
        ]
   policy-clamp-ac-sim-ppnt:
      image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-sim-ppnt:${POLICY_CLAMP_VERSION}
      container_name: policy-clamp-ac-sim-ppnt
      depends_on:
        - kafka
      hostname: policy-clamp-ac-sim-ppnt
      ports:
        - ${SIM_PARTICIPANT_PORT}:6969
      volumes:
        - ./config/clamp/SimulatorParticipantParameters.yaml:/opt/app/policy/clamp/etc/SimulatorParticipantParameters.yaml:ro
        - ./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', './sim-participant.sh',
        'kafka', '9092'
      ]
   prometheus:
      image: nexus3.onap.org:10001/prom/prometheus:latest
      container_name: prometheus
      hostname: prometheus
      ports:
       - ${PROMETHEUS_PORT}:9090
      volumes:
       - ./metrics/prometheus.yml:/etc/prometheus/prometheus.yml
   grafana:
      image: nexus3.onap.org:10001/grafana/grafana:latest
      container_name: grafana
      depends_on:
       - prometheus
      hostname: grafana
      ports:
       - ${GRAFANA_PORT}:3000
      volumes:
       - ./metrics/dashboard.yaml:/etc/grafana/provisioning/dashboards/dashboard.yaml
       - ./metrics/datasource.yaml:/etc/grafana/provisioning/datasources/datasource.yaml
       - ./metrics/dashboards:/var/lib/grafana/dashboards

   zookeeper:
     image: confluentinc/cp-zookeeper:latest
     container_name: zookeeper
     environment:
       ZOOKEEPER_CLIENT_PORT: 2181
       ZOOKEEPER_TICK_TIME: 2000
     ports:
       - "2181:2181"

   kafka:
     image: confluentinc/cp-kafka:latest
     container_name: kafka
     depends_on:
       - zookeeper
     ports:
       - "29092:29092"
       - "9092:9092"
     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