#!/bin/bash
## Task Runner installation for a datapipeline managed Ec2 resource
## This is run as cloudinit. See the logs in /var/log/cloud-init-log
set -x -e
for key in "$@"
do
case $key in
--workerGroup=*)
WORKER_GROUP="${key#*=}"
echo "WORKER_GROUP = $WORKER_GROUP"
shift
;;
--endpoint=*)
ENDPOINT="${key#*=}"
echo "ENDPOINT = $ENDPOINT"
shift
;;
--region=*)
REGION="${key#*=}"
echo "REGION = $REGION"
shift
;;
--logUri=*)
LOG_URI="${key#*=}"
echo "LOG_URI = $LOG_URI"
shift
;;
--taskRunnerId=*)
TASKRUNNER_ID="${key#*=}"
echo "TASKRUNNER_ID = $TASKRUNNER_ID"
shift
;;
--zipFile=*)
ZIP_FILE="${key#*=}"
echo "ZIP_FILE = $ZIP_FILE"
shift
;;
--mysqlFile=*)
MYSQL_FILE="${key#*=}"
echo "MYSQL_FILE = $MYSQL_FILE"
shift
;;
--ec2User=*)
EC2_USER="${key#*=}"
echo "EC2_USER = $EC2_USER"
shift
;;
--proxyHost=*)
PROXY_HOST="${key#*=}"
echo "PROXY_HOST = $PROXY_HOST"
shift
;;
--proxyPort=*)
PROXY_PORT="${key#*=}"
echo "PROXY_PORT = $PROXY_PORT"
shift
;;
--username=*)
USERNAME="${key#*=}"
echo "USERNAME = $USERNAME"
shift
;;
--password=*)
PASSWORD="${key#*=}"
echo "PASSWORD = $PASSWORD"
shift
;;
--windowsDomain=*)
WINDOWS_DOMAIN="${key#*=}"
echo "WINDOWS_DOMAIN = $WINDOWS_DOMAIN"
shift
;;
--windowsWorkgroup=*)
WINDOWS_WORKGROUP="${key#*=}"
echo "WINDOWS_WORKGROUP = $WINDOWS_WORKGROUP"
shift
;;
*)
echo "Unlnown option : $key"
;;
esac
done
# prepare installation directory in /mnt/taskRunner
# using /media/ephemeral0
if [ -d /media/ephemeral0 ] && ! [ -d /mnt/taskRunner ] ; then
mkdir -p /media/ephemeral0/mnt/taskRunner
mkdir -p /mnt
chown -R $EC2_USER /media/ephemeral0/mnt/taskRunner
ln -s /media/ephemeral0/mnt/taskRunner /mnt/taskRunner
fi
mkdir -p /mnt/taskRunner
chown -R $EC2_USER /mnt/taskRunner
# allow sudo to run for ec2 user without a tty
sudofile=task-runner-ec2-user
cat > /tmp/$sudofile <<EOF
Defaults:ec2-user !requiretty
EOF
chmod 600 /tmp/$sudofile
mv /tmp/$sudofile /etc/sudoers.d/$sudofile
## Install jdk 1.7 when version is less on amazon linux
KERNEL=`uname -r`
VERSION=`java -version 2>&1 | awk -F '"' '/version/ {print $2}'`
if [[ ($KERNEL =~ "amzn") && ( $VERSION < "1.7" ) ]]; then
echo "Found : KERNEL : $KERNEL JAVA VERSION : $VERSION"
echo "Upgrading to java 1.7"
yum install java-1.7.0-openjdk -y
fi
su - $EC2_USER <<EOF
cd /mnt/taskRunner
wget -O taskRunner.zip $ZIP_FILE
wget -O $(basename $MYSQL_FILE) $MYSQL_FILE
unzip taskRunner.zip
chmod 500 aws-datapipeline-taskrunner-v2.sh
./aws-datapipeline-taskrunner-v2.sh --workerGroup="$WORKER_GROUP" --endpoint="$ENDPOINT" --region="$REGION" --logUri="$LOG_URI" --taskRunnerId="$TASKRUNNER_ID" --proxyHost="$PROXY_HOST" --proxyPort="$PROXY_PORT" --username="$USERNAME" --password="$PASSWORD" --windowsDomain="$WINDOWS_DOMAIN" --windowsWorkgroup="$WINDOWS_WORKGROUP" >> run.out 2>&1 < /dev/null &
disown %
EOF
if [ -d /etc/init.d ] ; then
cat > /tmp/datapipeline-taskrunnner-service << EOF
#!/bin/bash
### BEGIN INIT INFO
# Provides: hive-server-nanny
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Nanny to restart hive server
# Description: Nanny to restart hive server
### END INIT INFO
if [ -e /etc/init.d/functions ]; then
. /etc/init.d/functions
fi
function start {
killall aws-datapipeline-taskrunner-v2.sh
if [ -x /mnt/taskRunner/aws-datapipeline-taskrunner-v2.sh ] ; then
echo "Starting Data Pipeline task runner as a daemon...."
su - $EC2_USER bash -c "cd /mnt/taskRunner/;/mnt/taskRunner/aws-datapipeline-taskrunner-v2.sh --workerGroup="$WORKER_GROUP" --endpoint="$ENDPOINT" --region="$REGION" --logUri="$LOG_URI" --taskRunnerId="$TASKRUNNER_ID" --proxyHost="$PROXY_HOST" --proxyPort="$PROXY_PORT" --username="$USERNAME" --password="$PASSWORD" --windowsDomain="$WINDOWS_DOMAIN" --windowsWorkgroup="$WINDOWS_WORKGROUP" >> /mnt/taskRunner/run.out 2>&1" > /dev/null 2>&1 &
disown %
fi
}
function stop {
killall aws-datapipeline-taskrunner-v2.sh
}
function reload {
echo "Nothing to reload"
}
case \$1 in
'start' )
start
;;
'stop' )
stop
;;
'restart' )
stop
start
;;
'force-reload' )
stop
start
;;
'status' )
;;
*)
echo "usage: `basename \$0` {start|stop|status}"
esac
exit 0
EOF
mv /tmp/datapipeline-taskrunnner-service /etc/init.d/
chmod 500 /etc/init.d/datapipeline-taskrunnner-service
if [ -e /usr/sbin/update-rc.d ]; then
/usr/sbin/update-rc.d -f datapipeline-taskrunnner-service remove
/usr/sbin/update-rc.d datapipeline-taskrunnner-service defaults 40 60
elif [ -e /sbin/chkconfig ]; then
/sbin/chkconfig --del datapipeline-taskrunnner-service
/sbin/chkconfig --add datapipeline-taskrunnner-service
else
echo "Unable to register taskrunner service OS. TaskRunner will NOT
automatically come up if a reboot happens"
fi
fi