svanzoest (owner)

Revisions

gist: 158298 Download_button fork
public
Description:
A bootstrapping rake task to setup a chef-client.
Public Clone URL: git://gist.github.com/158298.git
Embed All Files: show embed
chef-bootstrap.sh #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/sh -x
 
cleanup() {
  rm /tmp/chef-bootstrap.sh
  rm -rf /tmp/rubygems-*
}
 
echo "------------------------"
echo "Installing Chef"
echo
 
# Grab the Linux Version
FLAVOR=`/usr/bin/lsb_release -is`
# Need to temporarily add universe to the /etc/apt/sources.list
if [ "x$FLAVOR" = "xUbuntu" ]
then
echo "updating sources.list to include Jaunty universe"
  echo "deb http://us.archive.ubuntu.com/ubuntu/ jaunty universe" >> /etc/apt/sources.list
  echo "deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty universe" >> /etc/apt/sources.list
  echo "deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates universe" >> /etc/apt/sources.list
  echo "deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates universe" >> /etc/apt/sources.list
  echo "" >> /etc/apt/sources.list
  echo "deb http://security.ubuntu.com/ubuntu jaunty-security universe" >> /etc/apt/sources.list
  echo "deb-src http://security.ubuntu.com/ubuntu jaunty-security universe" >> /etc/apt/sources.list
else
echo "skipping"
fi
# make sure we have the latest packages
aptitude -y update
# linode is ubuntu-minimal, so requires some basic installs
aptitude -y install language-pack-en rsync
# standard chef stuff <http://wiki.opscode.com/display/chef/Installation>
aptitude -y install ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential wget ssl-cert
# ubuntu rubygems is broken, so let's re-install from scratch
wget -O - 'http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz' | tar -C /tmp -xvzf -
cd /tmp/rubygems-* && ruby setup.rb --no-ri --no-rdoc
ln -sfv /usr/bin/gem1.8 /usr/bin/gem
 
# update
gem update --system
gem update
gem install rdoc chef ohai --no-ri --no-rdoc --source http://gems.opscode.com --source http://gems.rubyforge.org
 
echo
echo "It seems to have worked!"
echo "------------------------"
 
cleanup;
 
 
chef-repo/Rakefile #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#
# Rakefile for Chef Server Repository
#
# Author:: Adam Jacob (<adam@opscode.com>)
# Copyright:: Copyright (c) 2008 Opscode, Inc.
# License:: Apache License, Version 2.0
#
# 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.
#
 
require 'rubygems'
require 'chef'
require 'json'
 
# Make sure you have loaded constants first
require File.join(File.dirname(__FILE__), 'config', 'rake')
 
# And choosen a VCS
if File.directory?(File.join(TOPDIR, ".svn"))
  $vcs = :svn
elsif File.directory?(File.join(TOPDIR, ".git"))
  $vcs = :git
end
 
load 'chef/tasks/chef_repo.rake'
 
##
## Additional bootstrap tasks
##
##
 
# Set the hostname on the server based on the SERVER variable
task :set_hostname do
  if !ENV["SERVER"]
    puts "You need to specify a server rake upload SERVER=example.com"
    exit 1
  end
  sh "ssh -l root #{ENV['SERVER']} 'echo #{ENV['SERVER']} > /etc/hostname && /bin/hostname -F /etc/hostname'"
end
 
desc "Bootstrap a server (with SERVER=server.example.com)."
task :bootstrap do
  if !ENV["SERVER"]
    puts "You need to specify a server rake upload SERVER=example.com"
    exit 1
  end
  sh "scp #{TOPDIR}/config/chef-bootstrap.sh root@#{ENV['SERVER']}:/tmp"
  sh "ssh -l root #{ENV['SERVER']} 'sh /tmp/chef-bootstrap.sh'"
end
 
desc "Upload the latest copy of your cookbooks to remote server"
task :upload do
  if !ENV["SERVER"]
    puts "You need to specify a server rake upload SERVER=example.com"
    exit 1
  end
  sh "rsync -rlP --delete --exclude '.*' #{File.dirname(__FILE__)}/cookbooks #{File.dirname(__FILE__)}/config root@#{ENV['SERVER']}:#{CHEF_CONFIG_PATH}"
end
 
desc "Run chef solo on the server (with SERVER=server.example.com)."
task :cook => [:set_hostname,:bootstrap, :upload] do
  if !ENV["SERVER"]
    puts "You need to specify a server 'rake cook SERVER=whatever.com'"
    exit 1
  end
  sh "ssh -l root #{ENV['SERVER']} \"cd #{CHEF_CONFIG_PATH} && chef-solo -c config/solo.rb -j config/chef-client.json && cp config/client.rb .\""
  sh "ssh -l root #{ENV['SERVER']} \"cd #{CHEF_CONFIG_PATH} && rm -rf cookbooks config\""
end