##
# Copyright 2019 ETSI
#
# 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.
##

########################################################################

FROM ubuntu:18.04 as INSTALL

RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
    DEBIAN_FRONTEND=noninteractive apt-get --yes install \
    gcc=4:7.4.* \
    python3=3.6.* \
    python3-dev=3.6.* \
    python3-setuptools=39.0.* \
    curl=7.58.* \
    genisoimage=9:1.1.* \
    netbase=5.* && \
    python3 -m easy_install pip==21.0.1

ARG PYTHON3_OSM_COMMON_URL
ARG PYTHON3_OSM_NG_RO_URL
ARG PYTHON3_OSM_RO_PLUGIN_URL
ARG PYTHON3_OSM_ROSDN_ARISTA_CLOUDVISION_URL
ARG PYTHON3_OSM_ROSDN_DPB_URL
ARG PYTHON3_OSM_ROSDN_DYNPAC_URL
ARG PYTHON3_OSM_ROSDN_FLOODLIGHTOF_URL
ARG PYTHON3_OSM_ROSDN_IETFL2VPN_URL
ARG PYTHON3_OSM_ROSDN_JUNIPER_CONTRAIL_URL
ARG PYTHON3_OSM_ROSDN_ODLOF_URL
ARG PYTHON3_OSM_ROSDN_ONOSOF_URL
ARG PYTHON3_OSM_ROSDN_ONOS_VPLS_URL
ARG PYTHON3_OSM_ROVIM_AWS_URL
ARG PYTHON3_OSM_ROVIM_AZURE_URL
ARG PYTHON3_OSM_ROVIM_FOS_URL
ARG PYTHON3_OSM_ROVIM_OPENNEBULA_URL
ARG PYTHON3_OSM_ROVIM_OPENSTACK_URL
ARG PYTHON3_OSM_ROVIM_OPENVIM_URL
ARG PYTHON3_OSM_ROVIM_VMWARE_URL

RUN for URL in \
    $PYTHON3_OSM_COMMON_URL \
    $PYTHON3_OSM_NG_RO_URL \
    $PYTHON3_OSM_RO_PLUGIN_URL \
    $PYTHON3_OSM_ROSDN_ARISTA_CLOUDVISION_URL \
    $PYTHON3_OSM_ROSDN_DPB_URL \
    $PYTHON3_OSM_ROSDN_DYNPAC_URL \
    $PYTHON3_OSM_ROSDN_FLOODLIGHTOF_URL \
    $PYTHON3_OSM_ROSDN_IETFL2VPN_URL \
    $PYTHON3_OSM_ROSDN_JUNIPER_CONTRAIL_URL \
    $PYTHON3_OSM_ROSDN_ODLOF_URL \
    $PYTHON3_OSM_ROSDN_ONOSOF_URL \
    $PYTHON3_OSM_ROSDN_ONOS_VPLS_URL \
    $PYTHON3_OSM_ROVIM_AWS_URL \
    $PYTHON3_OSM_ROVIM_AZURE_URL \
    $PYTHON3_OSM_ROVIM_FOS_URL \
    $PYTHON3_OSM_ROVIM_OPENNEBULA_URL \
    $PYTHON3_OSM_ROVIM_OPENSTACK_URL \
    $PYTHON3_OSM_ROVIM_OPENVIM_URL \
    $PYTHON3_OSM_ROVIM_VMWARE_URL ; do \
        curl -s $URL -O ; \
    done

RUN dpkg -i *.deb

RUN pip3 install \
    -r /usr/lib/python3/dist-packages/osm_common/requirements.txt \
    -r /usr/lib/python3/dist-packages/osm_ng_ro/requirements.txt

FROM ubuntu:18.04

RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
    DEBIAN_FRONTEND=noninteractive apt-get --yes install python3-minimal=3.6.*

COPY --from=INSTALL /usr/lib/python3/dist-packages /usr/lib/python3/dist-packages
COPY --from=INSTALL /usr/local/lib/python3.6/dist-packages  /usr/local/lib/python3.6/dist-packages
COPY --from=INSTALL /usr/bin/genisoimage /usr/bin/genisoimage
COPY --from=INSTALL /etc/protocols /etc/protocols

VOLUME /var/log/osm

EXPOSE 9090

# Two mysql databases are needed (DB and DB_OVIM). Can be hosted on same or separated containers
# These ENV must be provided
ENV RO_DB_HOST=""
ENV RO_DB_OVIM_HOST=""
    # if empty RO_DB_HOST is assumed

# These ENV should be provided first time for creating database. It will create and init only if empty!
ENV RO_DB_ROOT_PASSWORD=""
ENV RO_DB_OVIM_ROOT_PASSWORD=""
    # if empty RO_DB_ROOT_PASSWORD is assumed

# These ENV can be provided, but default values are ok
ENV RO_DB_USER=mano
ENV RO_DB_OVIM_USER=mano
ENV RO_DB_PASSWORD=manopw
ENV RO_DB_OVIM_PASSWORD=manopw
ENV RO_DB_PORT=3306
ENV RO_DB_OVIM_PORT=3306
ENV RO_DB_NAME=mano_db
ENV RO_DB_OVIM_NAME=mano_vim_db
ENV OPENMANO_TENANT=osm

# database
ENV OSMRO_DATABASE_DRIVER mongo
ENV OSMRO_DATABASE_URI mongodb://mongo:27017
# ENV OSMRO_DATABASE_COMMONKEY  xxx
# ENV OSMRO_DATABASE_USER  xxx
# ENV OSMRO_DATABASE_PASSWORD  xxx

# message
ENV OSMRO_MESSAGE_DRIVER  kafka
ENV OSMRO_MESSAGE_HOST    kafka
ENV OSMRO_MESSAGE_PORT    9092

# logs
ENV OSMRO_LOG_LEVEL       INFO

HEALTHCHECK --start-period=130s --interval=10s --timeout=5s --retries=12 \
  CMD curl --silent --fail http://localhost:9090/ro || exit 1

CMD ["python3", "-u", "-m", "osm_ng_ro.ro_main"]

