#!/bin/bash
set -eux

status-set maintenance "Updating scripts" || true
if [[ ! -d  /var/lib/jenkins/bin ]]; then
    mkdir -p /var/lib/jenkins/bin
fi
cp $JUJU_CHARM_DIR/scripts/start-jenkins-slave.sh /var/lib/jenkins/bin
chmod +x /var/lib/jenkins/bin/start-jenkins-slave.sh
cp $JUJU_CHARM_DIR/scripts/place-slave.sh /var/lib/jenkins/bin
chmod +x /var/lib/jenkins/bin/place-slave.sh

status-set maintenance "Checking config" 
PACKAGES=$(config-get packages)
if [[ "$PACKAGES" != "" ]]; then
    status-set maintenance "Installing packages." || true
    apt-get install -y $PACKAGES
fi

SLAVE_NAME=$(config-get slave-name)
if [[ "$SLAVE_NAME" == "" ]]; then
    APP_NAME=$(echo $JUJU_UNIT_NAME | cut -d / -f 1)
    APP_ALPHA=$(echo $JUJU_UNIT_NAME | cut -d / -f 2 | tr 0123456789 abcdefghij)
    SLAVE_NAME="$APP_NAME-$APP_ALPHA"
fi

MASTER_URL=$(config-get master-url)
# This is a hack. We don't want to iterate, but we need to
# because we need the state of relations and config to know
# if this charm is active or something else.
for app in $(relation-ids slave); do
    for unit in $(relation-list -r $app); do
        MASTER_URL"$(relation-get -r $app url $unit)"
        break
    done
done
if [[ "$MASTER_URL" == "" ]]; then
    status-set blocked "Set master-url option or relate to master" || true
    juju-log "master-url config is not set or master needs to export its url"
    exit 0
fi

status-set maintenance "Updating configuration." || true
cp $JUJU_CHARM_DIR/files/default/jenkins-slave /etc/default/jenkins-slave
sed -i -r \
    "s,NAME=jenkins-slave,NAME=$SLAVE_NAME," /etc/default/jenkins-slave
sed -i -r \
    "s,#JENKINS_URL=.*,JENKINS_URL=$MASTER_URL," /etc/default/jenkins-slave

if [[ -d /etc/systemd ]]; then
    cp $JUJU_CHARM_DIR/files/systemd/system/jenkins-slave.service \
        /etc/systemd/system/jenkins-slave.service
    systemctl enable jenkins-slave
else
    cp $JUJU_CHARM_DIR/files/init/jenkins-slave.conf \
        /etc/init/jenkins-slave.conf
    ln -s /lib/init/upstart-job /etc/init.d/jenkins-slave || true
fi

status-set maintenance "Checking jenkins slave.jar" || true
/var/lib/jenkins/bin/place-slave.sh "$MASTER_URL"

status-set maintenance "Starting services." || true
service jenkins-slave stop 2>/dev/null || true
service jenkins-slave start || true
status-set active "$SLAVE_NAME is accepting work" || true
