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