#!/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
DCM_AR="${WORKSPACE}/manager.zip"
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
