# This creates osm/NBI docker from local NBI source code

FROM ubuntu:16.04

# Set the working directory to /app
WORKDIR /app/NBI/osm_nbi

# Copy the current directory contents into the container at /app
ADD . /app/NBI

RUN apt-get update && apt-get install -y git python3 python3-jsonschema \
    python3-pymongo python3-yaml python3-pip python3-keystoneclient \
    && pip3 install pip==9.0.3 \
    && pip3 install aiokafka cherrypy==18.0.0 keystoneauth1 \
    && mkdir -p /app/storage/kafka && mkdir -p /app/log 

# OSM_COMMON
RUN git clone https://osm.etsi.org/gerrit/osm/common.git \
    && pip3 install -e common
#    && cd common  && python3 setup.py develop && cd ..
#    && pip3 install -U -r requirements.txt \
#    && cd ..

# OSM_IM
RUN pip3 install pyang && mkdir -p /app && cd /app \
    && git -C /app clone https://github.com/robshakir/pyangbind \
    && pip3 install -e /app/pyangbind \
    && git -C /app clone  https://osm.etsi.org/gerrit/osm/IM \
    && cd /app/IM/models/yang \
    && mkdir /app/IM/osm_im \
    && pyang --plugindir /app/pyangbind/pyangbind/plugin -f pybind -o /app/IM/osm_im/vnfd.py vnfd.yang \
    && pyang --plugindir /app/pyangbind/pyangbind/plugin -f pybind -o /app/IM/osm_im/nsd.py nsd.yang \
    && pip3 install -e /app/IM

EXPOSE 9999

LABEL Maintainer="alfonso.tiernosepulveda@telefonica.com" \
      Description="This implements a north bound interface for OSM" \
      Version="1.0" \
      Author="Alfonso Tierno"

# Used for local storage
VOLUME /app/storage
# Used for logs
VOLUME /app/log

# The following ENV can be added with "docker run -e xxx' to configure
# server
ENV OSMNBI_SOCKET_HOST                          0.0.0.0
ENV OSMNBI_SOCKET_PORT                          9999
# storage
ENV OSMNBI_STORAGE_PATH                         /app/storage
# database
ENV OSMNBI_DATABASE_DRIVER                      mongo
ENV OSMNBI_DATABASE_HOST                        mongo
ENV OSMNBI_DATABASE_PORT                        27017
# ENV OSMNBI_DATABASE_USER                      xxx
# ENV OSMNBI_DATABASE_PASSWORD                  xxx
# ENV OSMNBI_DATABASE_MASTERPASSWORD            xxx
# web
ENV OSMNBI_STATIC_DIR                           /app/osm_nbi/html_public
# logs
ENV OSMNBI_LOG_FILE                             /app/log
ENV OSMNBI_LOG_LEVEL                            DEBUG
# message
ENV OSMNBI_MESSAGE_DRIVER                       kafka
ENV OSMNBI_MESSAGE_HOST                         kafka
ENV OSMNBI_MESSAGE_PORT                         9092
# logs
ENV OSMNBI_LOG_FILE                             /app/log/nbi.log
ENV OSMNBI_LOG_LEVEL                            DEBUG
# authentication
ENV OSMNBI_AUTHENTICATION_BACKEND               internal
#ENV OSMNBI_AUTHENTICATION_BACKEND               keystone
#ENV OSMNBI_AUTHENTICATION_AUTH_URL              keystone
#ENV OSMNBI_AUTHENTICATION_AUTH_PORT             5000
#ENV OSMNBI_AUTHENTICATION_USER_DOMAIN_NAME      default
#ENV OSMNBI_AUTHENTICATION_PROJECT_DOMAIN_NAME   default
#ENV OSMNBI_AUTHENTICATION_SERVICE_USERNAME      nbi
#ENV OSMNBI_AUTHENTICATION_SERVICE_PASSWORD      nbi
#ENV OSMNBI_AUTHENTICATION_SERVICE_PROJECT       service

# Run app.py when the container launches
CMD ["python3", "nbi.py"]

