##
# 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

LABEL authors="Alfonso Tierno"

RUN apt-get update && apt-get install -y git python3 python3-pip \
    && python3 -m pip install --upgrade pip \
    && DEBIAN_FRONTEND=noninteractive apt-get -y install libssl-dev libmysqlclient-dev mysql-client \
    && DEBIAN_FRONTEND=noninteractive python3 -m pip install -U networking-l2gw  \
    && DEBIAN_FRONTEND=noninteractive python3 -m pip install -U progressbar pyvmomi pyvcloud==19.1.1  \
    && DEBIAN_FRONTEND=noninteractive apt-get -y install genisoimage

# This is not needed, because package dependency will install anyway.
# But done here in order to harry up image generation using cache
RUN DEBIAN_FRONTEND=noninteractive  apt-get -y install python3-requests python3-netaddr python3-argcomplete curl  \
    && DEBIAN_FRONTEND=noninteractive curl -Lo /tmp/libzenohc.so https://github.com/eclipse-fog05/fog05/releases/download/v0.1.0/libzenohc.so \
    && mv /tmp/libzenohc.so /usr/local/lib/libzenohc.so \
    && DEBIAN_FRONTEND=noninteractive python3 -m pip install -U jsonrpclib-pelix cvprac \
    "osm-im @ git+https://osm.etsi.org/gerrit/osm/IM.git@v8.0#egg=osm-im" "azure==4.0.0" boto \
    pyone "oca @ git+https://github.com/python-oca/python-oca#egg=oca" \
    pyangbind sphinx zenoh==0.3.0 yaks==0.3.0.post1 fog05-sdk==0.2.0 fog05==0.2.0


#    DEBIAN_FRONTEND=noninteractive apt-get -y install python-openstacksdk python-openstackclient && \
# TODO py3   DEBIAN_FRONTEND=noninteractive add-apt-repository -y cloud-archive:rocky && apt-get update && apt-get install -y python3-networking-l2gw \

#    DEBIAN_FRONTEND=noninteractive apt-get -y install python-cffi  libssl-dev libffi-dev python-mysqldb && \
#    && DEBIAN_FRONTEND=noninteractive apt-get -y install software-properties-common && \
#    DEBIAN_FRONTEND=noninteractive apt-get -y install wget tox && \

COPY . /root/RO

RUN /root/RO/RO/osm_ro/scripts/install-osm-im.sh --develop && \
    mkdir -p /var/log/osm && \
    python3 -m pip install -e /root/RO/RO-plugin && \
    python3 -m pip install -e /root/RO/RO && \
    python3 -m pip install -e /root/RO/RO-client && \
    python3 -m pip install -e /root/RO/RO-VIM-vmware && \
    python3 -m pip install -e /root/RO/RO-VIM-openstack && \
    python3 -m pip install -e /root/RO/RO-VIM-openvim && \
    python3 -m pip install -e /root/RO/RO-VIM-aws && \
    python3 -m pip install -e /root/RO/RO-VIM-azure && \
    python3 -m pip install -e /root/RO/RO-VIM-fos && \
    python3 -m pip install -e /root/RO/RO-SDN-dynpac && \
    python3 -m pip install -e /root/RO/RO-SDN-ietfl2vpn && \
    python3 -m pip install -e /root/RO/RO-SDN-onos_vpls && \
    python3 -m pip install -e /root/RO/RO-SDN-onos_openflow && \
    python3 -m pip install -e /root/RO/RO-SDN-odl_openflow && \
    python3 -m pip install -e /root/RO/RO-SDN-floodlight_openflow && \
    python3 -m pip install -e /root/RO/RO-SDN-arista_cloudvision && \
    python3 -m pip install -e /root/RO/RO-SDN-juniper_contrail && \
    rm -rf /root/.cache && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

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
# RO_DB_HOST: host of the main
# RO_DB_OVIM_HOST: ...        if empty RO_DB_HOST is assumed
# RO_DB_ROOT_PASSWORD: this has to be provided first time for creating database. It will create and init only if empty!
# RO_DB_OVIM_ROOT_PASSWORD: ...  if empty RO_DB_ROOT_PASSWORD is assumed
# RO_DB_USER:    default value 'mano'
# RO_DB_OVIM_USER:       default value 'mano'
# RO_DB_PASSWORD:        default value 'manopw'
# RO_DB_OVIM_PASSWORD:        default value 'manopw'
# RO_DB_PORT:             default value '3306'
# RO_DB_OVIM_PORT:        default value '3306'
# RO_DB_NAME:             default value 'mano_db'
# RO_DB_OVIM_NAME:        default value 'mano_vim_db'
# RO_LOG_FILE:            default log to stderr if not defined

ENV RO_DB_HOST="" \
    RO_DB_OVIM_HOST="" \
    RO_DB_ROOT_PASSWORD="" \
    RO_DB_OVIM_ROOT_PASSWORD="" \
    RO_DB_USER=mano \
    RO_DB_OVIM_USER=mano \
    RO_DB_PASSWORD=manopw \
    RO_DB_OVIM_PASSWORD=manopw \
    RO_DB_PORT=3306 \
    RO_DB_OVIM_PORT=3306 \
    RO_DB_NAME=mano_db \
    RO_DB_OVIM_NAME=mano_vim_db \
    OPENMANO_TENANT=osm \
    RO_LOG_LEVEL=DEBUG

CMD RO-start.sh

# HEALTHCHECK --start-period=30s --interval=10s --timeout=5s --retries=12 \
#  CMD curl --silent --fail localhost:9090/openmano/tenants || exit 1
