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

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

RUN git -C /app clone https://osm.etsi.org/gerrit/osm/N2VC.git \
    && pip3 install -e /app/N2VC \
    && pip3 install -e /app/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 -C /app clone https://osm.etsi.org/gerrit/osm/common.git \
    && pip3 install -e /app/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
# ENV OSMLCM_VCA_PUBKEY:     pubkey
# ENV OSMLCM_VCA_CACERT:     cacert

# database
ENV OSMLCM_DATABASE_DRIVER mongo
ENV OSMLCM_DATABASE_URI mongodb://mongo:27017
# ENV OSMLCM_DATABASE_COMMONKEY  xxx
# ENV OSMLCM_DATABASE_USER  xxx
# ENV OSMLCM_DATABASE_PASSWORD  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

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

# Run app.py when the container launches
CMD python3 -m osm_lcm.lcm

# HEALTHCHECK --interval=120s --timeout=15s --retries=1 \
#     CMD python3 -m osm_lcm.lcm --health-check || exit 1
