version: '2'

# XOS docker compose
# generated by platform-install/roles/cord-profile

networks:
{% for network in xos_docker_networks %}
  {{ network }}:
    external: true
{% endfor %}

services:
  xos_db:
    image: {{ deploy_docker_registry }}xosproject/xos-postgres:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
      - {{ network }}
{% endfor %}
    expose:
      - "5432"
    restart: unless-stopped

{% if use_redis %}
  xos_redis:
    image: {{ deploy_docker_registry }}redis:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped
{% endif %}

  xos_gui:
    image: {{ deploy_docker_registry }}xosproject/xos-gui:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    ports:
      - "4000:4000"
    links:
      - xos_ws:xos-ws
      - xos_chameleon:xos-chameleon
    depends_on:
      - xos_ws
      - xos_chameleon
    volumes:
      - {{ cord_profile_dir }}/style.config.js:/var/www/dist/style.config.js
      - {{ cord_profile_dir }}/app.config.js:/var/www/dist/app.config.js
    volumes_from:
      - gui_extensions_store
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

  xos_chameleon:
    image: {{ deploy_docker_registry }}xosproject/chameleon:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: python chameleon/chameleon/main.py -R 9101 -G xos-core:50055
    ports:
      - "9101:9101"
    links:
      - xos_core:xos-core
    depends_on:
      - xos_core
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

  gui_extensions_store:
    image: {{ deploy_docker_registry }}node:argon
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: /bin/true
    volumes:
      - /var/www/dist/extensions
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"

  xos_ws:
    image: {{ deploy_docker_registry }}xosproject/xos-ws:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: npm start -- --config gateway-config.yml
    ports:
      - "3000:3000"
    links:
      - xos_ui:xos
{% if use_redis %}
      - xos_redis:redis
{% endif %}
    depends_on:
      - xos_ui
{% if use_redis %}
      - xos_redis
{% endif %}
    volumes:
      - {{ cord_profile_dir }}/gateway-config.yml:/var/www/src/config/gateway-config.yml
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

  xos_ui:
    image: {{ deploy_docker_registry }}xosproject/xos-ui:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: python /opt/xos/manage.py runserver 0.0.0.0:9000 --insecure --makemigrations
    ports:
      - "9000:9000"
    links:
      - xos_db:xos_db
{% if use_redis %}
      - xos_redis:redis
{% endif %}
    depends_on:
      - xos_db
{% if use_redis %}
      - xos_redis
{% endif %}
    volumes:
      - {{ cord_profile_dir }}/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
      - {{ cord_profile_dir }}:/opt/cord_profile:ro
      - {{ cord_dir }}/orchestration/xos_libraries/ng-xos-lib:/opt/xos_libraries/ng-xos-lib:ro
      - {{ cord_profile_dir }}/im_cert_chain.pem:/usr/local/share/ca-certificates/local_certs.crt:ro
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

  xos_core:
    image: {{ deploy_docker_registry }}xosproject/xos-ui:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: bash -c "cd coreapi; bash ./start_coreapi.sh"
    ports:
      - "50051:50051"
      - "50055:50055"
    links:
      - xos_db:xos_db
{% if use_redis %}
      - xos_redis:redis
{% endif %}
    depends_on:
      - xos_db
{% if use_redis %}
      - xos_redis
{% endif %}
    volumes:
      - {{ cord_profile_dir }}/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
      - {{ cord_profile_dir }}:/opt/cord_profile:ro
      - {{ cord_dir }}/orchestration/xos_libraries/ng-xos-lib:/opt/xos_libraries/ng-xos-lib:ro
      - {{ cord_profile_dir }}/im_cert_chain.pem:/usr/local/share/ca-certificates/local_certs.crt:ro
      - /var/run/docker.sock:/var/run/docker.sock
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

{% for ext in enabled_gui_extensions %}
  gui-extension-{{ ext.name }}:
    image: {{ deploy_docker_registry }}xosproject/gui-extension-{{ ext.name }}:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
    command: npm run build
    volumes_from:
      - gui_extensions_store
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"

{% endfor %}

{% if not frontend_only %}
{% for svc in xos_services %}
{% if svc.synchronizer is defined and svc.synchronizer %}
  {{ svc.name }}-synchronizer:
    image: {{ deploy_docker_registry }}xosproject/{{ svc.name }}-synchronizer:{{ deploy_docker_tag }}
    networks:
{% for network in xos_docker_networks %}
     - {{ network }}
{% endfor %}
{% if use_redis %}
    links:
      - xos_redis:redis
    depends_on:
      - xos_redis
{% endif %}
    volumes:
      - {{ cord_profile_dir }}/node_key:/opt/cord_profile/node_key:ro
      - {{ cord_dir }}/build/platform-install/credentials/xosadmin@opencord.org:/opt/xos/services/{{ svc.name }}/credentials/xosadmin@opencord.org:ro
      - {{ cord_profile_dir }}/im_cert_chain.pem:/usr/local/share/ca-certificates/local_certs.crt:ro
{% if svc.keypair is defined %}
      - {{ cord_profile_dir }}/key_import/{{ svc.keypair }}:/opt/xos/services/{{ svc.name }}/keys/{{ svc.keypair }}:ro
{% endif %}
{% if svc.name == "openstack" %}
      - {{ cord_profile_dir }}/images:/opt/xos/images:ro
{% endif %}
    logging:
      driver: "json-file"
      options:
        max-size: "1000k"
        max-file: "5"
    restart: unless-stopped

{% endif %}
{% endfor %}
{% endif %}
