# Copyright 2017-present Open Networking 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.

# This Dockerfile is used to build an webserver that contains all the ONOS applications
# used in SEBA 1.0.0.
#
# You can build this image using this command:
# docker build -t opencord/mavenrepo:seba-1.0.0 -f Dockerfile.onos-apps.seba-1.0.0 .
#
# And install it using the mavenrepo helm-chart, such as: (note that you'll need to push the image to the docker registry on the pod)
# helm install -n mavenrepo mavenrepo --set image.repository=<cluster-ip>:30500/opencord/mavenrepo --set image.tag=seba-1.0.0
#
# Once the container is deployed, your ONOS applications are available
# and you can then use this values file while installing SEBA:
#
# seba-services:
#   oltAppUrl: http://<cluste-ip>:30160/olt.oar
#   sadisAppUrl: http://<cluste-ip>:30160/sadis.oar
#   dhcpL2RelayAppUrl: http://<cluste-ip>:30160/dhcpl2relay.oar
#   aaaAppUrl: http://<cluste-ip>:30160/aaa.oar
#   kafkaAppUrl: http://<cluste-ip>:30160/kafka.oar

FROM nginx:1.15.8-alpine
RUN mkdir -p /usr/share/nginx/html
WORKDIR /usr/share/nginx/html

RUN apk add --no-cache curl

ENV OAR_REPO "oss.sonatype.org/service/local/repositories/releases/content/org/opencord/"
RUN curl -L "$OAR_REPO/olt-app/2.1.0/olt-app-2.1.0.oar" > olt.oar \
&& curl -L "$OAR_REPO/sadis-app/2.2.0/sadis-app-2.2.0.oar" > sadis.oar \
&& curl -L "$OAR_REPO/dhcpl2relay/1.5.0/dhcpl2relay-1.5.0.oar" > dhcpl2relay.oar \
&& curl -L "$OAR_REPO/aaa/1.8.0/aaa-1.8.0.oar" > aaa.oar \
&& curl -L "$OAR_REPO/kafka/1.0.0/kafka-1.0.0.oar" > kafka.oar

RUN chown nginx:nginx -R /usr/share/nginx/html