#  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.5'

networks:
  default:
    driver: bridge
    name: nonrtric-docker-net

services:
  a1-sim-OSC:
    image: "${A1_SIM_IMAGE_BASE}:${A1_SIM_IMAGE_TAG}"
    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: "${A1_SIM_IMAGE_BASE}:${A1_SIM_IMAGE_TAG}"
    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

  a1-sim-STD-v2:
    image: "${A1_SIM_IMAGE_BASE}:${A1_SIM_IMAGE_TAG}"
    container_name: a1-sim-STD-v2
    networks:
      - default
    ports:
      - 30005:8085
      - 30006:8185
    environment:
      - A1_VERSION=STD_2.0.0
      - REMOTE_HOSTS_LOGGING=1
      - ALLOW_HTTP=true
