#!/bin/bash
#
#
# 1 fetch DCAE Controller service manager
# 2 build the docker imagei with both service manager and ves collector
# 3 tag and then push to the remote repo
#
#
# !!! make sure the yaml jjb file includes docker-login as a builder
# before calling this script


# downloading DCAE Controller service manager for VES collector
GROUP_ID='org.openecomp.dcae.controller'
ARTIFACT_ID='dcae-controller-service-standardeventcollector-manager'
VERSION='0.1.0-SNAPSHOT'
FORMAT='zip'
SCOPE='runtime'
ARTIFACT_FQID="${GROUP_ID}:${ARTIFACT_ID}:${VERSION}:${FORMAT}:${SCOPE}"
ARTIFACT_FILENAME="${ARTIFACT_ID}-${VERSION}-${SCOPE}.${FORMAT}"
mvn -s "$SETTINGS_FILE" \
   org.apache.maven.plugins:maven-dependency-plugin:2.10:copy \
   -Dartifact="${ARTIFACT_FQID}" -DoutputDirectory=/tmp
DCM_AR="/tmp/${ARTIFACT_FILENAME}"
if [ ! -f "${DCM_AR}" ]
then
    echo "FATAL error cannot locate ${DCM_AR}"
    exit 2
fi

# unarchive the service manager
TARGET="${WORKSPACE}/target"
STAGE="${TARGET}/stage"
DCM_DIR="${STAGE}/opt/app/manager"
[ ! -d "${DCM_DIR}" ] && mkdir -p "${DCM_DIR}"
unzip -qo -d "${DCM_DIR}" "${DCM_AR}"

#
# generate the manager start-up.sh
#
[ -f "${DCM_DIR}/start-manager.sh" ] && exit 0

cat <<EOF > "${DCM_DIR}/start-manager.sh"
#!/bin/bash

MAIN='org.openecomp.dcae.controller.service.standardeventcollector.servers.manager.DcaeControllerServiceStandardeventcollectorManagerServer'
ACTION='start'

WORKDIR='/opt/app/manager'
LOGS="${WORKDIR}/logs"

[ ! -d "$LOGS" ] && mkdir -p "$LOGS"

echo 10.0.4.102 $(hostname).dcae.simpledemo.openecomp.org >> /etc/hosts

exec java -cp ./config:./lib:./lib/*:./bin "${MAIN}" "${ACTION}" \
    > logs/manager.out 2>logs/manager.err
EOF

chmod 775 "${DCM_DIR}/start-manager.sh"


#
# generate docker file
#
cat <<EOF > "${STAGE}/Dockerfile"
FROM ubuntu:14.04

MAINTAINER dcae@lists.openecomp.org

WORKDIR /opt/app/manager

ENV HOME /opt/app/SEC
ENV JAVA_HOME /usr

RUN apt-get update && apt-get install -y \
        bc \
        curl \
        telnet \
        vim \
        netcat \
        openjdk-7-jdk

COPY opt /opt

EXPOSE 9999

CMD [ '/opt/app/manager/start-manager.sh' ]
EOF

#
# build the docker image. tag and then push to the remote repo
#
IMAGE='dcae-controller-common-event'
TAG='1.0.0'
LFQI="${IMAGE}:${TAG}"
BUILD_PATH="${WORKSPACE}/target/stage"

# build a docker image
docker build --rm -t "${LFQI}" "${BUILD_PATH}"


#
# push the image
#
# io registry  DOCKER_REPOSITORIES="nexus3.openecomp.org:10001 \
# release registry                   nexus3.openecomp.org:10002 \
# snapshot registry                   nexus3.openecomp.org:10003"
REPO='nexus3.openecomp.org:10003'

if [ ! -z "$REPO" ]; then
    RFQI="${REPO}/${LFQI}"
    # tag
    docker tag "${LFQI}" "${RFQI}"

    # push to remote repo
    docker push "${RFQI}"
fi