#  Copyright (C) 2020 Nordix Foundation. All rights reserved.
#  ========================================================================
#  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.0'
services:
  policy-agent:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-policy-agent:2.1.0
    container_name: policy-agent
    networks:
      default:
        aliases:
          - policy-agent-container
    ports:
      - 8081:8081
      - 8433:8433
    volumes:
      - ./config/application_configuration.json:/opt/app/policy-agent/data/application_configuration.json:ro
    # For using own certs instead of the default ones (built into the container),
    # place them in config/ directory, update the application-policyagent.yaml file, and uncomment the following lines
    #  - ./config/keystore-policyagent.jks:/opt/app/policy-agent/etc/cert/keystore.jks:ro
    #  - ./config/truststore-policyagent.jks:/opt/app/policy-agent/etc/cert/truststore.jks:ro
    #  - ./config/application-policyagent.yaml:/opt/app/policy-agent/config/application.yaml:ro

  a1-sim-OSC:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/a1-simulator:2.0.0
    container_name: a1-sim-OSC
    networks:
      - default
    ports:
      - 30001:8085
      - 30002:8185
    environment:
      - A1_VERSION=OSC_2.1.0
      - REMOTE_HOSTS_LOGGING=1
      - ALLOW_HTTP=true

  a1-sim-STD:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/a1-simulator:2.0.0
    container_name: a1-sim-STD
    networks:
      - default
    ports:
      - 30003:8085
      - 30004:8185
    environment:
      - A1_VERSION=STD_1.1.3
      - REMOTE_HOSTS_LOGGING=1
      - ALLOW_HTTP=true

  policy-control-panel:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-controlpanel:2.0.0
    container_name: policy-control-panel
    networks:
      - default
    ports:
      - 8080:8080
      - 8082:8082

  db:
    image: mysql/mysql-server:5.6
    container_name: sdnc-db
    networks:
      - default
    ports:
      - "3306"
    environment:
      - MYSQL_ROOT_PASSWORD=openECOMP1.0
      - MYSQL_ROOT_HOST=%
    logging:
      driver:   "json-file"
      options:
        max-size: "30m"
        max-file: "5"

  a1-controller:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-a1-controller:2.1.0
    depends_on :
      - db
    container_name: a1-controller
    networks:
      - default
    entrypoint: ["/opt/onap/sdnc/bin/startODL.sh"]
    ports:
      - 8282:8181
      - 8443:8443
    links:
      - db:dbhost
      - db:sdnctldb01
      - db:sdnctldb02
    environment:
      - MYSQL_ROOT_PASSWORD=openECOMP1.0
      - SDNC_CONFIG_DIR=/opt/onap/sdnc/data/properties
    # For using own certs instead of the default ones (built into the container),
    # place them in config/ directory, update the https-props-a1controller.properties file, and uncomment the following lines
    #volumes:
    #  - ./config/keystore-a1controller.jks:/etc/ssl/certs/java/keystore.jks:ro
    #  - ./config/truststore-a1controller.jks:/etc/ssl/certs/java/truststore.jks:ro
    #  - ./config/https-props-a1controller.properties:/opt/onap/sdnc/data/properties/https-props.properties:ro
    logging:
      driver:   "json-file"
      options:
        max-size: "30m"
        max-file: "5"
