# Copyright 2018 Telefonica S.A.
#
# 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:16.04

# Set the working directory to /app
WORKDIR /app/osm_lcm

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

RUN apt-get update && apt-get install -y git tox python3 \
    python3-pip python3-aiohttp \
    && pip3 install pip==9.0.3 \
    && pip3 install -U 'PyYAML==3.*' 'aiohttp==0.20.2' flake8

RUN git clone https://osm.etsi.org/gerrit/osm/N2VC.git \
    && pip3 install -e N2VC \
    && pip3 install -e N2VC/modules/libjuju \
    && apt-get install -y libffi-dev libssl-dev openssh-client
    # cd N2VC; python3 setup.py develop
    # cd modules/libjuju; python3 setup.py develop

RUN git clone https://osm.etsi.org/gerrit/osm/common.git \
    && pip3 install -e common
    #  python3-pymongo python3-yaml pycrypto aiokafka

RUN mkdir -p /app/storage/kafka && mkdir -p /app/log


LABEL Maintainer="alfonso.tiernosepulveda@telefonica.com" \
      Description="This implements the Life Cicle Management module of 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 LCM
ENV OSMLCM_RO_HOST         ro
ENV OSMLCM_RO_PORT         9090
ENV OSMLCM_RO_TENANT       osm

# VCA
ENV OSMLCM_VCA_HOST        vca
ENV OSMLCM_VCA_PORT:       17070
ENV OSMLCM_VCA_USER:       admin
ENV OSMLCM_VCA_SECRET:     secret

# database
ENV OSMLCM_DATABASE_DRIVER mongo
ENV OSMLCM_DATABASE_HOST   mongo
ENV OSMLCM_DATABASE_PORT   27017
# ENV OSMLCM_DATABASE_USER  xxx
# ENV OSMLCM_DATABASE_PASSWORD  xxx
# ENV OSMLCM_DATABASE_COMMONKEY  xxx

#storage
ENV OSMLCM_STORAGE_DRIVER  local
ENV OSMLCM_STORAGE_PATH    /app/storage

# message
ENV OSMLCM_MESSAGE_DRIVER  kafka
ENV OSMLCM_MESSAGE_HOST    kafka
ENV OSMLCM_MESSAGE_PORT    9092

# logs
ENV OSMLCM_GLOBAL_LOGFILE  /app/log/lcm.log
ENV OSMLCM_GLOBAL_LOGLEVEL DEBUG

ADD . /app

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

# HEALTHCHECK --interval=30 --timeout=140 --retries=1 \
#     CMD python3 /usr/lib/python3/dist-packages/osm_lcm/lcm.py --health-check || exit 1

