#!/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


# io registry  DOCKER_REPOSITORIES="nexus3.openecomp.org:10001 \
# release registry                   nexus3.openecomp.org:10002 \
# snapshot registry                   nexus3.openecomp.org:10003"



# 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"
