bash <<'EOF' || echo "Chef bootstrap failed!"

# This is the ubuntu natty bootstrap script from infochimps' ironfan. It is
# based on opscode's bootstrap script, with the following important differences: 
#
# * installs ruby 1.9.2 (not 1.8.7) from source
# * upgrades rubygems rather than installing from source
# * pushes the node identity into the first-boot.json
# * installs the chef-client service and kicks off the first run of chef

set -e

<%= (@config[:verbosity].to_i > 1 ? 'set -v' : '') %>

RUBY_VERSION=1.9.2-p290
CHEF_VERSION=<%= bootstrap_version_string.gsub(/.*[\s=]/,"") %>

mkdir -p /tmp/knife-bootstrap
chmod 700 /tmp/knife-bootstrap 
cd /tmp/knife-bootstrap

<%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%>
cat /etc/centos-release

date > /etc/box_build_time

echo -e "`date` \n\n**** \n**** yum upgrade:\n****\n"
yum upgrade --assumeyes

echo -e "`date` \n\n**** \n**** Installing base packages:\n****\n"
yum install --assumeyes make wget 
yum install --assumeyes git rpm-build rpmdevtools gcc glibc-static zlib-devel libxml2-devel libxslt-devel openssl-devel 
if [ ! -d runit-rpm ]; then git clone https://github.com/imeyer/runit-rpm.git; fi
cd runit-rpm
./build.sh
yum install --assumeyes /root/rpmbuild/RPMS/x86_64/runit-*.rpm || true # TODO: Remove this shim
cd -

yum clean all

if [ ! -f /usr/bin/chef-client ]; then
  echo -e "`date` \n\n**** \n**** Installing ruby version ${RUBY_VERSION}:\n****\n"

  wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-${RUBY_VERSION}.tar.gz
  tar xzf ruby-${RUBY_VERSION}.tar.gz
  cd ruby-${RUBY_VERSION}
  ./configure --with-ruby-version=${RUBY_VERSION} --prefix=/usr --program-suffix=${RUBY_VERSION}
  make -j2
  make install

  alternatives \
    --install /usr/bin/ruby ruby /usr/bin/ruby${RUBY_VERSION} 400 \
    --slave   /usr/bin/ri   ri   /usr/bin/ri${RUBY_VERSION}       \
    --slave   /usr/bin/irb  irb  /usr/bin/irb${RUBY_VERSION}      \
    --slave   /usr/bin/erb  erb  /usr/bin/erb${RUBY_VERSION}      \
    --slave   /usr/bin/gem  gem  /usr/bin/gem${RUBY_VERSION}      \
    --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz             \
    /usr/share/man/man1/ruby${RUBY_VERSION}.1

  echo -e "`date` \n\n**** \n**** Updating rubygems:\n****\n"
  gem update --system

  echo -e "`date` \n\n**** \n**** Installing chef:\n****\n"
  gem install ohai --no-rdoc --no-ri
  gem install chef --no-rdoc --no-ri <%= bootstrap_version_string %>
  # gems needed for the client.rb or so generically useful you want them at hand
  gem install      --no-rdoc --no-ri extlib bundler json right_aws pry fog

else # no chef-client
  echo -e "`date` \n\n**** \n**** Chef is present -- skipping apt/ruby/chef installation\n****\n"
fi # end ruby+chef install

echo -e "`date` \n\n**** \n**** Knifing in the chef client config files:\n****\n"
mkdir -p /etc/chef

<%- if @config[:client_key] %>
(
cat <<'EOP'
<%= @config[:client_key] %>
EOP
) > /tmp/knife-bootstrap/client.pem
awk NF /tmp/knife-bootstrap/client.pem > /etc/chef/client.pem
<%- else %>
(
cat <<'EOP'
<%= validation_key %>
EOP
) > /tmp/knife-bootstrap/validation.pem
awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
<%- end %>

echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"

cd /tmp
rm -rf /tmp/knife-bootstrap

echo -e "`date` \n\n**** \n**** Creating chef client script:\n****\n"

(
cat <<'EOP'
<%= config_content %>
<%= @config[:node].chef_client_script_content %>
EOP
) > /etc/chef/client.rb

(
cat <<'EOP'
<%= { "run_list" => @run_list, "cluster_name" => @config[:node].cluster_name, "facet_name" => @config[:node].facet_name, "facet_index" => @config[:node].facet_index }.to_json %>
EOP
) > /etc/chef/first-boot.json

echo -e "`date` \n\n**** \n**** Adding chef client runit scripts:\n****\n"
( service chef-client stop >/dev/null 2>&1 ; sleep 1 ; killall chef-client 2>/dev/null ) || true
mkdir -p /var/log/chef /var/chef /etc/service /etc/sv/chef-client/{log/main,supervise} 

cat > /etc/sv/chef-client/log/run <<'EOP'
#!/bin/bash
exec svlogd -tt ./main
EOP

cat > /etc/sv/chef-client/run <<'EOP'
#!/bin/bash
exec 2>&1
exec /usr/bin/env chef-client -i 43200 -s 20 -L /var/log/chef/client.log
EOP

chmod +x  /etc/sv/chef-client/log/run /etc/sv/chef-client/run
ln -nfs /sbin/sv /etc/init.d/chef-client

service chef-client stop >/dev/null 2>&1 || true

<%- if (@config[:bootstrap_runs_chef_client].to_s == 'true') || (@chef_config.knife[:bootstrap_runs_chef_client].to_s == 'true') %>
echo -e "`date` \n\n**** \n**** First run of chef:\n****\n"
set -e
<%= start_chef %>
set +e
<%- end %>

echo -e "`date` \n\n**** \n**** Cleanup:\n****\n"
# make locate work good
updatedb

echo -e "`date` \n\n**** \n**** Enabling chef client service:\n****\n"
ln -nfs /etc/sv/chef-client /etc/service/chef-client
service chef-client start

echo -e "`date` \n\n**** \n**** Cluster Chef client bootstrap complete\n****\n"
EOF