chef-tlc-workflow 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +7 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +93 -0
  5. data/Rakefile +110 -0
  6. data/Vagrantfile +33 -0
  7. data/chef-tlc-workflow.gemspec +52 -0
  8. data/docs/ApplicationVsLibraryVsForkedCookbooks.md +20 -0
  9. data/docs/TmpLibrarianHelpers.md +21 -0
  10. data/docs/TmpWorkflowTasks.md +80 -0
  11. data/lib/chef-tlc-workflow.rb +5 -0
  12. data/lib/chef-tlc-workflow/helpers.rb +126 -0
  13. data/lib/chef-tlc-workflow/version.rb +3 -0
  14. data/lib/chef-workflow/tasks/tlc.rb +4 -0
  15. data/lib/chef-workflow/tasks/tlc/deps.rb +100 -0
  16. data/lib/chef-workflow/tasks/tlc/test.rb +15 -0
  17. data/test/Gemfile +7 -0
  18. data/test/ec2-bootstrap/.chef/bootstrap/omnibus-chef.sh +34 -0
  19. data/test/ec2-bootstrap/.gitignore +3 -0
  20. data/test/ec2-bootstrap/Mccloudfile +60 -0
  21. data/test/ec2-bootstrap/Rakefile +57 -0
  22. data/test/ec2-bootstrap/app_cookbooks.yml +12 -0
  23. data/test/esx-bootstrap/.chef/knife.rb +7 -0
  24. data/test/esx-bootstrap/.gitignore +4 -0
  25. data/test/esx-bootstrap/Rakefile +64 -0
  26. data/test/esx-bootstrap/app_cookbooks.yml +12 -0
  27. data/test/esx-bootstrap/nodes/33.33.77.10.json +6 -0
  28. data/test/local-bootstrap/.gitignore +4 -0
  29. data/test/local-bootstrap/Rakefile +50 -0
  30. data/test/local-bootstrap/Vagrantfile +31 -0
  31. data/test/local-bootstrap/app_cookbooks.yml +12 -0
  32. data/test/sample-app/CHANGELOG.md +12 -0
  33. data/test/sample-app/Cheffile +15 -0
  34. data/test/sample-app/README.md +20 -0
  35. data/test/sample-app/attributes/default.rb +2 -0
  36. data/test/sample-app/metadata.rb +10 -0
  37. data/test/sample-app/recipes/default.rb +27 -0
  38. data/test/sample-app/templates/default/sample.html.erb +10 -0
  39. metadata +331 -0
@@ -0,0 +1,7 @@
1
+ #
2
+ # configure kitchen path on the server allowing us to adapt
3
+ # the cookbook_path in `solo.rb`
4
+ #
5
+ # see https://github.com/matschaffer/knife-solo/issues/199#issuecomment-13820473
6
+ #
7
+ knife[:solo_path] = '/tmp/chef-solo'
@@ -0,0 +1,4 @@
1
+ cookbooks/
2
+ tmp/
3
+ Cheffile.lock
4
+ solo.rb
@@ -0,0 +1,64 @@
1
+ require 'bundler/setup'
2
+ require 'fileutils'
3
+ require 'chef-workflow/tasks/tlc/deps'
4
+ require 'chef-tlc-workflow/helpers'
5
+
6
+ desc "resolve application cookbook with all its dependencies"
7
+ task :resolve_deps, [:app_cookbook] do |t, args|
8
+ Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
9
+ end
10
+
11
+ desc "bootstrap a server with Chef, does not provision (will ask for password if no key provided)"
12
+ task :bootstrap, [:host, :user, :ssh_key] do |t, args|
13
+ host, user = get_required_args(args, :host, :user)
14
+ sh "knife solo prepare #{user}@#{host} #{ssh_key_cmdline(args)} --bootstrap-version 10.18.2-1 --no-librarian -V"
15
+ end
16
+
17
+ desc "provision a server with data from `nodes/<host>.json` (will ask for password if no key provided)"
18
+ task :provision, [:app_cookbook, :host, :user, :ssh_key] do |t, args|
19
+ app_cookbook, host, user = get_required_args(args, :app_cookbook, :host, :user)
20
+ name, version = ChefTLCWorkflow::Helpers::parse_name_and_version(args[:app_cookbook])
21
+ with_app "#{name}-#{version}" do
22
+ sh "knife solo cook #{user}@#{host} #{ssh_key_cmdline(args)} --no-chef-check --no-librarian -V"
23
+ end
24
+ end
25
+
26
+ desc "remove Chef-solo cookbook traces from the server (will ask for password if no key provided)"
27
+ task :cleanup, [:host, :user, :ssh_key] do |t, args|
28
+ host, user = get_required_args(args, :host, :user)
29
+ sh "knife solo clean #{user}@#{host} #{ssh_key_cmdline(args)} -V"
30
+ end
31
+
32
+
33
+ #
34
+ # helper methods below
35
+ #
36
+ def get_required_args(args, *param_keys)
37
+ param_values = Array.new
38
+ param_keys.each do |param_key|
39
+ fail "parameter #{param_key.to_sym} is required" unless args[param_key.to_sym]
40
+ param_values << args[param_key.to_sym]
41
+ end
42
+ param_values
43
+ end
44
+
45
+ def ssh_key_cmdline(args)
46
+ args[:ssh_key] ? "-i #{args[:ssh_key]}" : ""
47
+ end
48
+
49
+ #
50
+ # rewrites solo.rb with the cookbook_path adapted
51
+ # for the given app cookbook while the block executes
52
+ #
53
+ def with_app(app_cookbook)
54
+ File.open("solo.rb", 'w') {|f| f.write(<<-EOF) }
55
+ base = File.expand_path('..', __FILE__)
56
+ data_bag_path base + '/data_bags'
57
+ encrypted_data_bag_secret base + '/data_bag_key'
58
+ role_path base + '/roles'
59
+ cookbook_path base + '/cookbooks/#{app_cookbook}'
60
+ EOF
61
+ yield
62
+ ensure
63
+ FileUtils.rm_rf "solo.rb"
64
+ end
@@ -0,0 +1,12 @@
1
+
2
+ - name: "sample-app"
3
+ version: "0.1.0"
4
+ path: "../sample-app"
5
+ # git: "https://github.com/tknerr/sample-app-tlc.git"
6
+ # ref: "v0.1.0"
7
+
8
+ - name: "sample-app"
9
+ version: "0.2.0"
10
+ path: "../sample-app"
11
+ # git: "https://github.com/tknerr/sample-app-tlc.git"
12
+ # ref: "v0.2.0"
@@ -0,0 +1,6 @@
1
+ {
2
+ "sample_app": {
3
+ "words_of_wisdom": "I did it for the Lulz!"
4
+ },
5
+ "run_list": [ "recipe[sample-app]" ]
6
+ }
@@ -0,0 +1,4 @@
1
+ cookbooks/
2
+ tmp/
3
+ Cheffile.lock
4
+ .vagrant
@@ -0,0 +1,50 @@
1
+ require 'bundler/setup'
2
+ require 'fileutils'
3
+ require 'chef-workflow/tasks/tlc/deps'
4
+
5
+ desc "resolve application cookbook with all its dependencies"
6
+ task :resolve_deps, [:app_cookbook] do |t, args|
7
+ Rake::Task["tlc:deps:resolve_app_cookbook"].invoke(args[:app_cookbook])
8
+ end
9
+
10
+ desc "bring up the vagrant \"VM\" as configured in the Vagrantfile"
11
+ task :up, [:vm_name] do |t, args|
12
+ vm_name = get_required_args(args, :vm_name)
13
+ sh "vagrant up #{vm_name}"
14
+ end
15
+
16
+ desc "provision the vagrant \"VM\" with the provisioners as defined in the Vagrantfile"
17
+ task :provision, [:vm_name] do |t, args|
18
+ vm_name = get_required_args(args, :vm_name)
19
+ sh "vagrant provision #{vm_name}"
20
+ end
21
+
22
+ desc "destroy the vagrant \"VM\" with the given name"
23
+ task :destroy, [:vm_name] do |t, args|
24
+ vm_name = get_required_args(args, :vm_name)
25
+ sh "vagrant destroy #{vm_name} -f"
26
+ end
27
+
28
+ desc "ssh into the vagrant \"VM\" with the given name"
29
+ task :ssh, [:vm_name] do |t, args|
30
+ vm_name = get_required_args(args, :vm_name)
31
+ sh "vagrant ssh #{vm_name}"
32
+ end
33
+
34
+ desc "show status of all vagrant \"VMs\" defined in the Vagrantfile"
35
+ task :status do
36
+ sh "vagrant status"
37
+ end
38
+
39
+
40
+ #
41
+ # helper methods below
42
+ #
43
+ def get_required_args(args, *param_keys)
44
+ param_values = Array.new
45
+ param_keys.each do |param_key|
46
+ fail "parameter #{param_key.to_sym} is required" unless args[param_key.to_sym]
47
+ param_values << args[param_key.to_sym]
48
+ end
49
+ param_values.size == 1 ? param_values[0] : param_values
50
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # Vagrantfile for testing
3
+ #
4
+ Vagrant::Config.run do |config|
5
+
6
+ # default base box for all VMs
7
+ config.vm.box = "opscode-ubuntu-12.04"
8
+ config.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_chef-10.18.2.box"
9
+
10
+ # sample-app
11
+ config.vm.define :'sample-app' do | sample_app_config |
12
+ sample_app_config.vm.customize ["modifyvm", :id,
13
+ "--memory", "384",
14
+ "--name", "sample-app.local"
15
+ ]
16
+ sample_app_config.vm.host_name = "sample-app.local"
17
+ sample_app_config.vm.network :hostonly, "33.33.40.10"
18
+
19
+ sample_app_config.vm.provision :chef_solo do |chef|
20
+ chef.cookbooks_path = [ './cookbooks/sample-app-0.1.0' ]
21
+ chef.add_recipe "sample-app"
22
+ chef.json = {
23
+ :sample_app => {
24
+ :words_of_wisdom => 'AWESOMENESS - When i feel sad, i stop being sad and be awesome instead.'
25
+ }
26
+ }
27
+ end
28
+ end
29
+
30
+ end
31
+
@@ -0,0 +1,12 @@
1
+
2
+ - name: "sample-app"
3
+ version: "0.1.0"
4
+ path: "../sample-app"
5
+ # git: "https://github.com/tknerr/sample-app-tlc.git"
6
+ # ref: "v0.1.0"
7
+
8
+ - name: "sample-app"
9
+ version: "0.2.0"
10
+ path: "../sample-app"
11
+ # git: "https://github.com/tknerr/sample-app-tlc.git"
12
+ # ref: "v0.2.0"
@@ -0,0 +1,12 @@
1
+ # CHANGELOG for sample-app
2
+
3
+ This file is used to list changes made in each version of sample-app.
4
+
5
+ ## 0.1.0:
6
+
7
+ * Initial release of sample-app
8
+
9
+ - - -
10
+ Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
11
+
12
+ The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.
@@ -0,0 +1,15 @@
1
+ site "http://community.opscode.com/api/v1"
2
+
3
+ require 'chef-tlc-workflow/helpers'
4
+
5
+ #
6
+ # read dependencies from metadata
7
+ #
8
+ ChefTLCWorkflow::Helpers::from_metadata.each do |cb_name, cb_version|
9
+ cookbook cb_name, cb_version
10
+ end
11
+
12
+ #
13
+ # resolve self for testing with vagrant
14
+ #
15
+ cookbook "sample-app", :path => '.'
@@ -0,0 +1,20 @@
1
+ Description
2
+ ===========
3
+
4
+ A minimal sample application cookbook for testing.
5
+
6
+ "Features" of an application cookbook:
7
+
8
+ * strict dependency management - *all* dependency versions must be locked down in metadata.rb
9
+ * Cheffile must exist and is *not* in .gitignore - we need it when resolving its dependencies
10
+
11
+
12
+ Requirements
13
+ ============
14
+
15
+ Attributes
16
+ ==========
17
+
18
+ Usage
19
+ =====
20
+
@@ -0,0 +1,2 @@
1
+
2
+ node.default['sample_app']['words_of_wisdom'] = "I can haz cats!"
@@ -0,0 +1,10 @@
1
+ name "sample-app"
2
+ maintainer "tkn"
3
+ maintainer_email "tkn@zuehlke.com"
4
+ license "All rights reserved"
5
+ description "A minimal sample application cookbook"
6
+ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7
+ version "0.1.0"
8
+
9
+ depends "apache2", "1.5.0"
10
+ depends "apt", "1.3.2"
@@ -0,0 +1,27 @@
1
+ #
2
+ # Cookbook Name:: sample-app
3
+ # Recipe:: default
4
+ #
5
+ # Copyright 2013, YOUR_COMPANY_NAME
6
+ #
7
+ # All rights reserved - Do Not Redistribute
8
+ #
9
+
10
+ # refresh apt cache
11
+ include_recipe "apt"
12
+
13
+ # ensure default site is enabled and install apache
14
+ node.set['apache']['default_site_enabled'] = true
15
+ include_recipe "apache2"
16
+
17
+ # deploy sample html page
18
+ template "/var/www/sample.html" do
19
+ source "sample.html.erb"
20
+ owner node['apache']['user']
21
+ group node['apache']['group']
22
+ mode 00644
23
+ variables(
24
+ :words_of_wisdom => node['sample_app']['words_of_wisdom']
25
+ )
26
+ end
27
+
@@ -0,0 +1,10 @@
1
+ <html>
2
+ <head>
3
+ <title>Sample App</title>
4
+ </head>
5
+ <body>
6
+ <p>Hey man, the super sample app seems to work if you can see this!</p>
7
+ <p>This is what a wise man once said:<blockquote><%= @words_of_wisdom %></blockquote></p>
8
+ <p>Cheers!</p>
9
+ </body>
10
+ </html>
metadata ADDED
@@ -0,0 +1,331 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chef-tlc-workflow
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Torben Knerr
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: chef-workflow-tasklib
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.2.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.2.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: chef
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 10.18.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 10.18.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: librarian
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.0.26.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.26.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: vagrant
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.0.5.1
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.5.1
78
+ - !ruby/object:Gem::Dependency
79
+ name: knife-solo
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 0.3.0.pre2
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 0.3.0.pre2
94
+ - !ruby/object:Gem::Dependency
95
+ name: mccloud
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 0.0.18
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.0.18
110
+ - !ruby/object:Gem::Dependency
111
+ name: foodcritic
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.7.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.7.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: chefspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - '='
132
+ - !ruby/object:Gem::Version
133
+ version: 0.9.0
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - '='
140
+ - !ruby/object:Gem::Version
141
+ version: 0.9.0
142
+ - !ruby/object:Gem::Dependency
143
+ name: fauxhai
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - '='
148
+ - !ruby/object:Gem::Version
149
+ version: 0.1.1
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - '='
156
+ - !ruby/object:Gem::Version
157
+ version: 0.1.1
158
+ - !ruby/object:Gem::Dependency
159
+ name: rake
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - '='
164
+ - !ruby/object:Gem::Version
165
+ version: 0.9.6
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.9.6
174
+ - !ruby/object:Gem::Dependency
175
+ name: sahara
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - '='
180
+ - !ruby/object:Gem::Version
181
+ version: 0.0.13
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - '='
188
+ - !ruby/object:Gem::Version
189
+ version: 0.0.13
190
+ - !ruby/object:Gem::Dependency
191
+ name: knife-solo_data_bag
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - '='
196
+ - !ruby/object:Gem::Version
197
+ version: 0.3.1
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - '='
204
+ - !ruby/object:Gem::Version
205
+ version: 0.3.1
206
+ - !ruby/object:Gem::Dependency
207
+ name: ruby-wmi
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - '='
212
+ - !ruby/object:Gem::Version
213
+ version: 0.4.0
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - '='
220
+ - !ruby/object:Gem::Version
221
+ version: 0.4.0
222
+ - !ruby/object:Gem::Dependency
223
+ name: win32-service
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 0.7.2
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - '='
236
+ - !ruby/object:Gem::Version
237
+ version: 0.7.2
238
+ description: makes our workflow for developing with Chef explict by adding a set of
239
+ Rake tasks embodying the workflow
240
+ email:
241
+ - tkn@zuehlke.com
242
+ executables: []
243
+ extensions: []
244
+ extra_rdoc_files: []
245
+ files:
246
+ - .gitignore
247
+ - Gemfile
248
+ - LICENSE.txt
249
+ - README.md
250
+ - Rakefile
251
+ - Vagrantfile
252
+ - chef-tlc-workflow.gemspec
253
+ - docs/ApplicationVsLibraryVsForkedCookbooks.md
254
+ - docs/TmpLibrarianHelpers.md
255
+ - docs/TmpWorkflowTasks.md
256
+ - lib/chef-tlc-workflow.rb
257
+ - lib/chef-tlc-workflow/helpers.rb
258
+ - lib/chef-tlc-workflow/version.rb
259
+ - lib/chef-workflow/tasks/tlc.rb
260
+ - lib/chef-workflow/tasks/tlc/deps.rb
261
+ - lib/chef-workflow/tasks/tlc/test.rb
262
+ - test/Gemfile
263
+ - test/ec2-bootstrap/.chef/bootstrap/omnibus-chef.sh
264
+ - test/ec2-bootstrap/.gitignore
265
+ - test/ec2-bootstrap/Mccloudfile
266
+ - test/ec2-bootstrap/Rakefile
267
+ - test/ec2-bootstrap/app_cookbooks.yml
268
+ - test/esx-bootstrap/.chef/knife.rb
269
+ - test/esx-bootstrap/.gitignore
270
+ - test/esx-bootstrap/Rakefile
271
+ - test/esx-bootstrap/app_cookbooks.yml
272
+ - test/esx-bootstrap/nodes/33.33.77.10.json
273
+ - test/local-bootstrap/.gitignore
274
+ - test/local-bootstrap/Rakefile
275
+ - test/local-bootstrap/Vagrantfile
276
+ - test/local-bootstrap/app_cookbooks.yml
277
+ - test/sample-app/CHANGELOG.md
278
+ - test/sample-app/Cheffile
279
+ - test/sample-app/README.md
280
+ - test/sample-app/attributes/default.rb
281
+ - test/sample-app/metadata.rb
282
+ - test/sample-app/recipes/default.rb
283
+ - test/sample-app/templates/default/sample.html.erb
284
+ homepage: ''
285
+ licenses: []
286
+ post_install_message:
287
+ rdoc_options: []
288
+ require_paths:
289
+ - lib
290
+ required_ruby_version: !ruby/object:Gem::Requirement
291
+ none: false
292
+ requirements:
293
+ - - ! '>='
294
+ - !ruby/object:Gem::Version
295
+ version: '0'
296
+ required_rubygems_version: !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - ! '>='
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
302
+ requirements: []
303
+ rubyforge_project:
304
+ rubygems_version: 1.8.24
305
+ signing_key:
306
+ specification_version: 3
307
+ summary: makes our workflow for developing with Chef explict by adding a set of Rake
308
+ tasks embodying the workflow
309
+ test_files:
310
+ - test/Gemfile
311
+ - test/ec2-bootstrap/.chef/bootstrap/omnibus-chef.sh
312
+ - test/ec2-bootstrap/.gitignore
313
+ - test/ec2-bootstrap/Mccloudfile
314
+ - test/ec2-bootstrap/Rakefile
315
+ - test/ec2-bootstrap/app_cookbooks.yml
316
+ - test/esx-bootstrap/.chef/knife.rb
317
+ - test/esx-bootstrap/.gitignore
318
+ - test/esx-bootstrap/Rakefile
319
+ - test/esx-bootstrap/app_cookbooks.yml
320
+ - test/esx-bootstrap/nodes/33.33.77.10.json
321
+ - test/local-bootstrap/.gitignore
322
+ - test/local-bootstrap/Rakefile
323
+ - test/local-bootstrap/Vagrantfile
324
+ - test/local-bootstrap/app_cookbooks.yml
325
+ - test/sample-app/CHANGELOG.md
326
+ - test/sample-app/Cheffile
327
+ - test/sample-app/README.md
328
+ - test/sample-app/attributes/default.rb
329
+ - test/sample-app/metadata.rb
330
+ - test/sample-app/recipes/default.rb
331
+ - test/sample-app/templates/default/sample.html.erb