# ============LICENSE_START===================================================
#  Copyright (C) 2020 Nordix Foundation.
# ============================================================================
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=====================================================

FROM python:3.7-slim-buster
MAINTAINER lego@est.tech

ENV PMSHUSER=pmsh \
    APPDIR="/opt/app/pmsh" \
    # set PATH & PYTHONPATH vars
    PATH=/usr/local/lib/python3.7/bin:$PATH:$APPDIR/bin \
    PYTHONPATH=/usr/local/lib/python3.7/site-packages:./mod:./:$PYTHONPATH:$APPDIR/bin \
    REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt \
    LOGS_PATH="/var/log/ONAP/dcaegen2/services/pmsh"

WORKDIR $APPDIR

    # add non root user & group
RUN addgroup --system $PMSHUSER && adduser --ingroup $PMSHUSER --system $PMSHUSER

COPY setup.py ./
COPY requirements.txt ./
COPY ./pmsh_service ./bin/

    # run the pip install
RUN pip install --upgrade pip && \
    pip install -r requirements.txt && \
    pip install -e . && \
    # change own & perms on entrypoint
    chown -R $PMSHUSER:$PMSHUSER $APPDIR && \
    chmod 500 $APPDIR/bin/*.py

# set to non root user
USER $PMSHUSER

# run the app
ENTRYPOINT ["python", "./bin/pmsh_service.py"]