Skip to content

Instantly share code, notes, and snippets.

@nbarendt
Created September 29, 2011 01:33
Show Gist options
  • Select an option

  • Save nbarendt/1249771 to your computer and use it in GitHub Desktop.

Select an option

Save nbarendt/1249771 to your computer and use it in GitHub Desktop.
Simple EC2 user_data script template to bootstrap an instance with chef
#!/bin/bash
# log bash stdout and stderr to several places
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
set -x
set -e
export WORKING_DIR=/home/ubuntu
# chef-solo JSON configuration
# put your runlist, variables, etc. in here
cat > $WORKING_DIR/config.json <<DELIM
{
"run_list": [
]
}
DELIM
export DEBIAN_FRONTEND=noninteractive
sudo aptitude install -q -y git-core
cat > $WORKING_DIR/my.id_rsa <<DELIM
-----BEGIN RSA PRIVATE KEY-----
SNIP
-----END RSA PRIVATE KEY-----
DELIM
chmod 0600 $WORKING_DIR/my.id_rsa
cat > $WORKING_DIR/my_ssh_wrapper.sh <<DELIM
#!/bin/bash
ssh -i $WORKING_DIR/my.id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \$1 \$2
DELIM
chmod +x $WORKING_DIR/my_ssh_wrapper.sh
export GIT_SSH=$WORKING_DIR/my_ssh_wrapper.sh
git clone SOME_REPO $WORKING_DIR/my-chef -b SOME_BRANCH
# run your chef install script from your repo
sudo $WORKING_DIR/my-chef/install_chef.sh
sed "s|^cookbook_path.*$|cookbook_path \['$WORKING_DIR/my-chef/cookbooks'\]|g" /usr/share/chef/solo.rb > /etc/chef/solo.rb
sudo chef-solo -j $WORKING_DIR/config.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment