#!/bin/bash

# Creates a jenkins client instance

# Exit on any errors
set -e

function print_help {
    echo "Usage: $0 app-name namespace uuid"

    echo "$0 $@" | logger -p local0.notice -t openshift_origin_jenkins_client_configure
    exit 1
}

while getopts 'd' OPTION
do
    case $OPTION in
        d) set -x
        ;;
        ?) print_help
        ;;
    esac
done


[ $# -eq 3 ] || print_help

cartridge_type="jenkins-client-1.4"
source "/etc/openshift/node.conf"
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util

setup_embedded_configure "$1" $2 $3

#
# Create the core of the application
#

if ! [ -f "$APP_HOME/.env/JENKINS_URL" ]
then
    client_error "Jenkins server does not exist!  Please create with rhc app create -t jenkins-1.4"
    exit 151
fi
if [ -f "$APP_HOME/.env/OPENSHIFT_CI_TYPE" ]
then
    client_error "Jenkins client already embedded in $application"
    exit 152
fi

#
# Setup Environment Variables
#
echo "export OPENSHIFT_CI_TYPE='jenkins-1.4'" > $APP_HOME/.env/OPENSHIFT_CI_TYPE
echo "export PATH=\$PATH:${CART_INFO_DIR}/bin/" > $APP_HOME/.env/PATH_JENKINS_CLIENT

. $APP_HOME/.env/OPENSHIFT_HOMEDIR
. $APP_HOME/.env/OPENSHIFT_GEAR_UUID
. $APP_HOME/.env/OPENSHIFT_APP_NAME
. $APP_HOME/.env/JENKINS_URL
. $APP_HOME/.env/JENKINS_USERNAME
. $APP_HOME/.env/JENKINS_PASSWORD

JENKINS_DNS_NAME=${JENKINS_URL:8} #remove https://

create_cartridge_instance_dir "$cartridge_type"
JENKINS_CLIENT_DIR=$(get_cartridge_instance_dir "$cartridge_type")

set +e
for i in {0..30}; do
  /usr/bin/wget --no-check-certificate -q https://${JENKINS_USERNAME}:${JENKINS_PASSWORD}@${JENKINS_DNS_NAME}jnlpJars/jenkins-cli.jar -O "$OPENSHIFT_HOMEDIR/jenkins-client-1.4/jenkins-cli.jar"
  exit_status=$?
  if [ $exit_status -eq 0 ]; then
    break
  fi
  sleep 1
done
set -e

if [ $exit_status -ne 0 ]; then
   client_error "Error contacting Jenkins server."
   client_error "Could not download ${JENKINS_URL}jnlpJars/jenkins-cli.jar"
   exit 157
fi

echo $JENKINS_PASSWORD > "$JENKINS_CLIENT_DIR/.password"


framework_carts=($(get_installed_framework_carts))
primary_framework_cart=${framework_carts[0]}

# Maybe allow cartridges to create their own jenkins job
if [ -f "${CARTRIDGE_BASE_PATH}/${primary_framework_cart}/info/configuration/jenkins_job_template.xml" ]
then
    JOB_XML="${CARTRIDGE_BASE_PATH}/${primary_framework_cart}/info/configuration/jenkins_job_template.xml"
else
    JOB_XML="$CART_INFO_DIR/configuration/jenkins_job_template.xml"
fi

JOB_NAME=${OPENSHIFT_APP_NAME}-build

if out=$(${CART_INFO_DIR}/bin/jenkins_create_job "${namespace}" "${CLOUD_DOMAIN}" "$JOB_XML" 2>&1)
then
    # Embedding success
    client_result ""
else
    if enable_out=$(run_as_user "${CART_INFO_DIR}/bin/jenkins_job_action enable" 2>&1)
    then
        client_result ""
        client_result "Associated with job '${JOB_NAME}' in Jenkins server."
        bldr_url="${JENKINS_DNS_NAME}computer/${OPENSHIFT_APP_NAME}bldr/"
        status_code=`curl -s -w %{http_code} --output /dev/null --insecure https://${JENKINS_USERNAME}:${JENKINS_PASSWORD}@$bldr_url`
        if [ "$status_code" == "200" ]
        then
            client_result "In addition we found an existing builder which you might also want"
            client_result "to delete: http://${bldr_url}"
        fi
        client_result ""
    else
        # An error occurred enabling existing job
        client_error ""
        client_error "Could not add job '${JOB_NAME}' in Jenkins server:"
        client_error "   $out"
        client_error "You'll need to correct this error before attempting to embed the Jenkins client again."
        exit 1
    fi
fi
client_result "Job URL: ${JENKINS_URL}job/${JOB_NAME}/"
client_result ""
client_result "Jenkins client 1.4 has been added to: $OPENSHIFT_APP_NAME"

cart_props "job_url=${JENKINS_URL}job/${JOB_NAME}/"

set_app_info "Job URL: ${JENKINS_URL}job/${JOB_NAME}/"
