# Copyright 2018 the original author or authors.
#
# 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 maven:3-jdk-8-alpine as download
MAINTAINER Open Networking Foundation <info@opennetworking.org>

#RUN apt-get update && apt-get install -y maven

# The ENV settings must be replicated below as they are not shared between stages
ENV DOWNLOAD_ROOT=/download

# Build the applications
RUN mkdir -p ${DOWNLOAD_ROOT}
WORKDIR ${DOWNLOAD_ROOT}
COPY config/mvn_settings.* ${DOWNLOAD_ROOT}/
RUN ./mvn_settings.sh
ADD config/dependencies.xml .
RUN mvn dependency:copy -Dmdep.useBaseVersion=true -DoutputDirectory=${DOWNLOAD_ROOT} -Dsilent=true -f dependencies.xml -s mvn_settings.xml

FROM onosproject/onos:1.13.5 as install
MAINTAINER Open Networking Foundation <info@opennetworking.org>

# The ENV settings must be replicated below as they are not shared between stages
ENV ONOS=/root/onos
ENV KARAF_VERSION=3.0.8
ENV KARAF_ROOT=${ONOS}/apache-karaf-${KARAF_VERSION}
ENV APPS_ROOT=${ONOS}/apps
ENV KARAF_M2=${KARAF_ROOT}/system
ENV DOWNLOAD_ROOT=/download
ENV APP_INSTALL_ROOT=/expand

# Copy the downloaded artifact to the install stage container
COPY --from=download ${DOWNLOAD_ROOT} ${DOWNLOAD_ROOT}

# Install the applications
COPY config/app-install.sh ./app-install.sh
RUN chmod 755 ./app-install.sh
RUN ./app-install.sh

# Create the final image coping over the installed applications from the build stage
FROM onosproject/onos:1.13.5
MAINTAINER Open Networking Foundation <info@opennetworking.org>

# The ENV settings must be replicated below as they are not shared between stages
ENV ONOS=/root/onos
ENV KARAF_VERSION=3.0.8
ENV KARAF_ROOT=${ONOS}/apache-karaf-${KARAF_VERSION}
ENV KARAF_M2=${KARAF_ROOT}/system
ENV APPS_ROOT=${ONOS}/apps

COPY --from=install ${KARAF_M2}/ ${KARAF_M2}/
RUN echo "${KARAF_M2} ${APPS_ROOT}"
COPY --from=install ${APPS_ROOT}/ ${APPS_ROOT}/
COPY config/netcfg.json $KARAF_ROOT/../config/network-cfg.json

RUN touch $ONOS/apps/org.onosproject.hostprovider/active
RUN touch $ONOS/apps/org.onosproject.openflow-base/active

# Create ONOS Key Directory
RUN mkdir -p /home/sdn/wiki
COPY onos_cfg/ /home/sdn/wiki
