Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 19th, 2012  |  syntax: None  |  size: 2.30 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/bin/bash
  2. #
  3. # ec2-run-user-data - Run instance user-data if it looks like a script.
  4. #
  5. # Only retrieves and runs the user-data script once per instance.  If
  6. # you want the user-data script to run again (e.g., on the next boot)
  7. # then add this command in the user-data script:
  8. #   rm -f /var/ec2/ec2-run-user-data.*
  9. #
  10. # History:
  11. #
  12. #   2012-03-29 Guillaume Plessis
  13. #   - Add support for base64-encoded user data
  14. #
  15. #   2010-01-07 Tom White
  16. #   - Add support for gzip-compressed user data
  17. #
  18. #   2008-05-16 Eric Hammond <ehammond@thinksome.com>
  19. #   - Initial version including code from Kim Scheibel, Jorge Oliveira
  20. #
  21. prog=$(basename $0)
  22. logger="logger -t $prog"
  23. curl="curl --retry 3 --silent --show-error --fail"
  24. instance_data_url=http://169.254.169.254/2008-02-01
  25.  
  26. # Wait until meta-data is available.
  27. perl -MIO::Socket::INET -e '
  28.  until(new IO::Socket::INET("169.254.169.254:80")){print"Waiting for meta-data...\n";sleep 1}
  29. ' | $logger
  30.  
  31. # Exit if we have already run on this instance (e.g., previous boot).
  32. ami_id=$($curl $instance_data_url/meta-data/ami-id)
  33. been_run_file=/var/ec2/$prog.$ami_id
  34. mkdir -p $(dirname $been_run_file)
  35. if [ -f $been_run_file ]; then
  36.   $logger < $been_run_file
  37.   exit
  38. fi
  39.  
  40. # Retrieve the instance user-data and run it if it looks like a script
  41. user_data_file=$(tempfile --prefix ec2 --suffix .user-data --mode 700)
  42. $logger "Retrieving user-data"
  43. $curl -o $user_data_file $instance_data_url/user-data 2>&1 | $logger
  44. if base64 -d $user_data_file &>/dev/null ; then
  45.   $logger "Decoding base64'd user-data"
  46.   base64 -d $user_data_file > $user_data_file.b64
  47.   mv $user_data_file.b64 $user_data_file
  48. fi
  49. if [ "$(file -bi $user_data_file| cut -f1 -d';')" = 'application/x-gzip' ]; then
  50.   $logger "Uncompressing gzip'd user-data"
  51.   mv $user_data_file $user_data_file.gz
  52.   gunzip $user_data_file.gz
  53. fi
  54. if [ ! -s $user_data_file ]; then
  55.   $logger "No user-data available"
  56.   echo "user-data was not available" > $been_run_file
  57. elif head -1 $user_data_file | egrep -v '^#!'; then
  58.   $logger "Skipping user-data as it does not begin with #!"
  59.   echo "user-data did not begin with #!" > $been_run_file
  60. else
  61.   $logger "Running user-data"
  62.   echo "user-data has already been run on this instance" > $been_run_file
  63.   chmod 700 $user_data_file
  64.   $user_data_file 2>&1 | logger -t "user-data"
  65.   $logger "user-data exit code: $?"
  66. fi
  67. rm -f $user_data_file