boucher 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ # 0.3.1
2
+
3
+ * add servers:recipe task
4
+ * renames tak servers:chef to servers:meal
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- <img src="" alt="boucher logo" title="Boucher" align="right"/>
1
+ <img src="https://raw.github.com/8thlight/boucher/master/boucher_logo.jpg" alt="Boucher logo" title="Boucher" align="right"/>
2
2
  # Boucher
3
3
 
4
4
  Boucher, pronounced [boo-shay], and meaning Butcher in French, is a suite of Rake tasks that simplfy your AWS
5
- deployment strategy. It's built ontop of Chef and Fog giving your fingers the power to create new servers,
5
+ deployment strategy. It's built on top of Chef and Fog giving your fingers the power to create new servers,
6
6
  install required software, and deploy your system all in a single command.
7
7
 
8
8
  It also helps manage your system with support for different environments and tasks to:
@@ -26,15 +26,16 @@ that'll get you off the ground. We recomend
26
26
  git clone git://github.com/8thlight/boucher_template.git infrastructure
27
27
  rm -rf infrastructure/.git
28
28
 
29
- You'll probabaly want to create a repository for your own to track the work here.
29
+ You'll probably want to create a repository for your own to track the work here.
30
30
 
31
- Read config/env/shared.rb to get a feel for the configuration options. You'll fill in some of those values as your continue to get started below.
31
+ Read config/env/shared.rb to get a feel for the configuration options. You'll fill in some of those values as you continue to get started below.
32
32
 
33
33
  ### Creating a base image
34
34
 
35
35
  1) Launch new instance: Ubuntu Server 12.04.1 LTS
36
36
 
37
- * Create a new key saved in your infrastructure project
37
+ * Create a new keyfile (*.pem) saved in your infrastructure project
38
+ * `chmod 0600 KEYFILE_NAME.pem` in your infrastructure project
38
39
  * Be sure to add a security group that opens port 22 for SSH
39
40
 
40
41
  2) Update config/env/shared.rb
@@ -47,11 +48,11 @@ Read config/env/shared.rb to get a feel for the configuration options. You'll f
47
48
 
48
49
  rake servers:list
49
50
 
50
- 4) SSH into new server. (:username config must be 'ubunutu' at this point)
51
+ 4) SSH into new server. (:username config must be 'ubuntu' at this point)
51
52
 
52
53
  rake servers:ssh[<instance id>]
53
54
 
54
- 5) Create new poweruser (unless you like 'unubutu' as your poweruser).
55
+ 5) Create new poweruser (unless you like 'ubuntu' as your poweruser).
55
56
 
56
57
  sudo adduser <username>
57
58
  sudo adduser <username> sudo
@@ -73,15 +74,16 @@ Read config/env/shared.rb to get a feel for the configuration options. You'll f
73
74
  # add the following line at the end of the file:
74
75
  <username> ALL=(ALL) NOPASSWD: ALL
75
76
 
76
- 9) Install required pacakges and gems.
77
+ 9) Install required packages and gems.
77
78
 
78
79
  sudo apt-get update
79
80
  sudo apt-get install ruby1.9.1 ruby1.9.1-dev git gcc make libxml2-dev libxslt1-dev
80
81
  sudo apt-get upgrade
81
82
  sudo gem install bundler chef
82
83
 
83
- 10) Checkout your infrstructure repo. (Yes. You should push your repo even in this early stage.)
84
- If you use github, you'll have to generate ssh keys and add them to the github repo.
84
+ 10) Checkout your infrastructure repo. (Yes. You should push your repo even in this early stage.)
85
+ If you use github, you'll have to generate ssh keys and add them to the github repo. Note: be sure
86
+ you name the directory "infrastructure" when cloning, since boucher assumes that location.
85
87
 
86
88
  cd ~/.ssh
87
89
  ssh-keygen -t rsa -C "your_email@youremail.com"
@@ -104,9 +106,9 @@ Run rake to see the list of tasks provided.
104
106
 
105
107
  ### Meals
106
108
 
107
- We're sticking with the metephore here. A Meal is basically a set of recipes for a single server.
109
+ We're sticking with the metaphor here. A Meal is basically a set of recipes for a single server.
108
110
  Boucher will expect meals to exist in the config directory. They are JSON files usable by chef-solo, and Boucher
109
- allows you too add extra configuration information under the "Boucher": key. For example:
111
+ allows you to add extra configuration information under the "Boucher": key. For example:
110
112
 
111
113
  {
112
114
  "run_list": [
@@ -125,7 +127,7 @@ allows you too add extra configuration information under the "Boucher": key. Fo
125
127
 
126
128
  ### ERB in config
127
129
 
128
- Meal .json files may contain ERB in the "boucher" section. However, the file get's parsed by chef-solo so it has to remain a valid JSON file. But you can do things like this:
130
+ Meal .json files may contain ERB in the "boucher" section. However, the file gets parsed by chef-solo so it has to remain a valid JSON file. But you can do things like this:
129
131
 
130
132
  {
131
133
  "run_list": ...
@@ -170,11 +172,11 @@ Environment configuration is available in your chef recipes. Just require 'bouc
170
172
 
171
173
  ### Recipes
172
174
 
173
- We'll assume you're familiar with Chef. So you know, there are plany of open source cookbooks/recipes on the intertubes.
175
+ We'll assume you're familiar with Chef. So you know, there are plenty of open source cookbooks/recipes on the intertubes.
174
176
  Convention is to grab the files, put them in your cookbooks folder and take ownership of them. There's a good chance you'll
175
177
  want to change them.
176
178
 
177
179
  ## License
178
180
 
179
181
  Copyright (c) 2012 8th Light, Inc.
180
- MIT License
182
+ MIT License
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "boucher"
5
- s.version = "0.3.0"
5
+ s.version = "0.3.1"
6
6
  s.authors = ["'Micah Micah'"]
7
7
  s.email = ["'micah@8thlight.com'"]
8
8
  s.homepage = "http://github.com/8thlight/boucher"
Binary file
Binary file
@@ -48,6 +48,12 @@ module Boucher
48
48
  ssh server, "cd infrastructure && sudo BENV=#{Boucher::Config[:env]} BRANCH=#{Boucher::Config[:branch]} chef-solo -c config/solo.rb -j config/#{meal_name}.json"
49
49
  end
50
50
 
51
+ def self.cook_recipe(server, recipe)
52
+ update_recipes(server)
53
+ ssh server, "echo '{\\\"run_list\\\": [\\\"recipe[#{recipe}]\\\"]}' > /tmp/single_recipe.json"
54
+ ssh server, "cd infrastructure && sudo BENV=#{Boucher::Config[:env]} BRANCH=#{Boucher::Config[:branch]} chef-solo -c config/solo.rb -j /tmp/single_recipe.json"
55
+ end
56
+
51
57
  def self.ssh_open?(server)
52
58
  ssh server, "echo 'SSH is open for business!'"
53
59
  true
@@ -112,12 +112,20 @@ web console and click Instance Actions -> Change Termination Protection -> Yes."
112
112
  end
113
113
 
114
114
  desc "Cook the specified meal on the instance(s) specified by the given id or meal"
115
- task :chef, [:meal, :server_id] do |t, args|
115
+ task :meal, [:meal, :server_id] do |t, args|
116
116
  Boucher.assert_env!
117
117
  servers = Boucher.resolve_servers(args.server_id || args.meal)
118
118
  servers.each do |server|
119
119
  Boucher.cook_meal(server, args.meal)
120
120
  end
121
121
  end
122
+
123
+ desc "Cook the specified recipe on the instance(s) specified by the given id or meal"
124
+ task :recipe, [:recipe, :id_or_meal] do |t, args|
125
+ servers = Boucher.resolve_servers(args.id_or_meal || args.meal)
126
+ servers.each do |server|
127
+ Boucher.cook_recipe(server, args.recipe)
128
+ end
129
+ end
122
130
  end
123
131
 
@@ -11,6 +11,7 @@ describe "Environment" do
11
11
  end
12
12
 
13
13
  it "defaults to :dev" do
14
+ Boucher::Config.delete(:env)
14
15
  ENV.delete('BENV')
15
16
  #load File.expand_path(File.dirname(__FILE__) + "/../../lib/boucher/env.rb")
16
17
  Boucher::env_name.should == :dev
@@ -20,6 +20,7 @@ describe "Boucher::snapshots" do
20
20
  end
21
21
 
22
22
  it "finds all snapshots" do
23
+ Boucher::Snapshots.instance_variable_set(:@snapshots, nil)
23
24
  Boucher::Snapshots.all.size.should == 3
24
25
  Boucher::Snapshots.all.should == remote_snapshots
25
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boucher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-16 00:00:00.000000000 Z
12
+ date: 2012-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -85,6 +85,7 @@ files:
85
85
  - .gitignore
86
86
  - .gitmodules
87
87
  - .rvmrc
88
+ - CHANGES.md
88
89
  - Gemfile
89
90
  - Gemfile.lock
90
91
  - LICENSE
@@ -92,6 +93,8 @@ files:
92
93
  - Rakefile
93
94
  - TODO.md
94
95
  - boucher.gemspec
96
+ - boucher.jpg
97
+ - boucher_logo.jpg
95
98
  - lib/boucher/addresses.rb
96
99
  - lib/boucher/compute.rb
97
100
  - lib/boucher/env.rb