#!/bin/bash

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# ec2-run-user-data - Run instance user-data if it looks like a script.
#
# Only retrieves and runs the user-data script once per instance.  If
# you want the user-data script to run again (e.g., on the next boot)
# then add this command in the user-data script:
#   rm -f /var/ec2/ec2-run-user-data.*
#
# History:
#   2008-05-16 Eric Hammond <ehammond@thinksome.com>
#   - Initial version including code from Kim Scheibel, Jorge Oliveira
#   2008-08-06 Tom White
#   - Updated to use mktemp on fedora
#

prog=$(basename $0)
logger="logger -t $prog"
curl="curl --retry 3 --silent --show-error --fail"
instance_data_url=http://169.254.169.254/2008-02-01

# Wait until networking is up on the EC2 instance.
perl -MIO::Socket::INET -e '
 until(new IO::Socket::INET("169.254.169.254:80")){print"Waiting for network...\n";sleep 1}
' | $logger

# Exit if we have already run on this instance (e.g., previous boot).
ami_id=$($curl $instance_data_url/meta-data/ami-id)
been_run_file=/var/ec2/$prog.$ami_id
mkdir -p $(dirname $been_run_file)
if [ -f $been_run_file ]; then
  $logger < $been_run_file
  exit
fi

# Retrieve the instance user-data and run it if it looks like a script
user_data_file=`mktemp -t ec2-user-data.XXXXXXXXXX`
chmod 700 $user_data_file
$logger "Retrieving user-data"
$curl -o $user_data_file $instance_data_url/user-data 2>&1 | $logger
if [ ! -s $user_data_file ]; then
  $logger "No user-data available"
elif head -1 $user_data_file | egrep -v '^#!'; then
  $logger "Skipping user-data as it does not begin with #!"
else
  $logger "Running user-data"
  echo "user-data has already been run on this instance" > $been_run_file
  $user_data_file 2>&1 | logger -t "user-data"
  $logger "user-data exit code: $?"
fi
rm -f $user_data_file
