caterer 0.11.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/README.md +34 -116
  2. data/Vagrantfile +4 -4
  3. data/lib/caterer.rb +3 -0
  4. data/lib/caterer/action.rb +1 -0
  5. data/lib/caterer/action/berkshelf/install.rb +3 -1
  6. data/lib/caterer/action/config/validate/provisioner.rb +16 -10
  7. data/lib/caterer/action/image.rb +9 -0
  8. data/lib/caterer/action/image/cleanup.rb +20 -0
  9. data/lib/caterer/action/image/prepare.rb +20 -0
  10. data/lib/caterer/action/image/run.rb +20 -0
  11. data/lib/caterer/action/provisioner.rb +0 -7
  12. data/lib/caterer/action/provisioner/cleanup.rb +19 -1
  13. data/lib/caterer/action/provisioner/prepare.rb +20 -2
  14. data/lib/caterer/action/provisioner/uninstall.rb +9 -1
  15. data/lib/caterer/action/server.rb +2 -1
  16. data/lib/caterer/action/{provisioner/install.rb → server/cleanup.rb} +5 -5
  17. data/lib/caterer/action/server/{reboot.rb → prepare.rb} +4 -2
  18. data/lib/caterer/actions.rb +8 -46
  19. data/lib/caterer/cli.rb +50 -4
  20. data/lib/caterer/command.rb +1 -4
  21. data/lib/caterer/command/base.rb +17 -108
  22. data/lib/caterer/command/berks.rb +5 -8
  23. data/lib/caterer/command/clean.rb +6 -4
  24. data/lib/caterer/command/lock.rb +5 -3
  25. data/lib/caterer/command/provision.rb +19 -4
  26. data/lib/caterer/command/server.rb +106 -0
  27. data/lib/caterer/command/unlock.rb +5 -3
  28. data/lib/caterer/commands.rb +0 -3
  29. data/lib/caterer/config.rb +0 -5
  30. data/lib/caterer/config/base.rb +5 -4
  31. data/lib/caterer/config/provisioner/chef_solo.rb +1 -2
  32. data/lib/caterer/group.rb +24 -0
  33. data/lib/caterer/image.rb +88 -0
  34. data/lib/caterer/member.rb +13 -0
  35. data/lib/caterer/provisioner.rb +1 -0
  36. data/lib/caterer/provisioner/base.rb +4 -3
  37. data/lib/caterer/provisioner/chef_solo.rb +58 -123
  38. data/lib/caterer/provisioner/shell.rb +83 -0
  39. data/lib/caterer/provisioners.rb +2 -1
  40. data/lib/caterer/server.rb +18 -36
  41. data/lib/caterer/version.rb +1 -1
  42. data/lib/templates/image/bin_wrapper.erb +8 -0
  43. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/debian.sh +0 -0
  44. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/el.sh +0 -0
  45. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/fedora.sh +0 -0
  46. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/sles.sh +0 -0
  47. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/smartos.sh +0 -0
  48. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/suse.sh +0 -0
  49. data/lib/templates/provisioner/chef_solo/{bootstrap → install}/ubuntu.sh +0 -0
  50. data/lib/templates/provisioner/chef_solo/solo.erb +1 -1
  51. data/lib/templates/provisioner/shell/script.erb +3 -0
  52. metadata +24 -26
  53. data/lib/caterer/action/provisioner/bootstrap.rb +0 -14
  54. data/lib/caterer/action/provisioner/load.rb +0 -29
  55. data/lib/caterer/action/provisioner/provision.rb +0 -14
  56. data/lib/caterer/action/provisioner/validate.rb +0 -10
  57. data/lib/caterer/action/provisioner/validate/bootstrapped.rb +0 -22
  58. data/lib/caterer/action/provisioner/validate/engine.rb +0 -24
  59. data/lib/caterer/command/bootstrap.rb +0 -24
  60. data/lib/caterer/command/reboot.rb +0 -24
  61. data/lib/caterer/command/test.rb +0 -19
  62. data/lib/caterer/command/up.rb +0 -24
  63. data/lib/caterer/config/group.rb +0 -26
  64. data/lib/caterer/config/image.rb +0 -21
  65. data/lib/caterer/config/member.rb +0 -15
@@ -0,0 +1,83 @@
1
+ require 'digest'
2
+ require 'tilt'
3
+ require 'erubis'
4
+ require 'erb'
5
+
6
+ module Caterer
7
+ module Provisioner
8
+ class Shell < Base
9
+
10
+ attr_accessor :path, :inline, :args
11
+
12
+ def initialize(image, opts={})
13
+ @image = image
14
+ @path = opts[:path] if opts[:path]
15
+ @inline = opts[:inline] if opts[:inline]
16
+ @args = opts[:args] if opts[:args]
17
+ end
18
+
19
+ # config dsl
20
+
21
+ def path(path)
22
+ @path = path
23
+ end
24
+
25
+ def inline(inline)
26
+ @inline = inline
27
+ end
28
+
29
+ def args(args)
30
+ @args = args
31
+ end
32
+
33
+ def errors
34
+ errors = {}
35
+
36
+ if not @path and not @inline
37
+ errors[:action] = "cannot be determined. Please set 'inline' or 'script'"
38
+ end
39
+
40
+ if errors.length > 0
41
+ errors
42
+ end
43
+
44
+ end
45
+
46
+ def prepare(server)
47
+ # create lib dir
48
+ server.ssh.sudo "mkdir -p #{dest_lib_dir}", :stream => true
49
+ server.ssh.sudo "chown -R #{server.username} #{dest_lib_dir}", :stream => true
50
+
51
+ # create script
52
+ server.ui.info "Generating shell script..."
53
+ server.ssh.upload(StringIO.new(script_content), dest_script_path)
54
+ server.ssh.sudo "chmod +x #{dest_script_path}", :stream => true
55
+ end
56
+
57
+ def provision_cmd
58
+ "#{dest_script_path} #{@args}"
59
+ end
60
+
61
+ def dest_lib_dir
62
+ "#{image.lib_dir}/shell"
63
+ end
64
+
65
+ def dest_script_path
66
+ "#{dest_lib_dir}/#{uuid}"
67
+ end
68
+
69
+ def uuid
70
+ @uuid ||= ::Digest::MD5.hexdigest((@inline or @path))
71
+ end
72
+
73
+ def script_content
74
+ if @inline
75
+ Tilt.new(File.expand_path('../../../templates/provisioner/shell/script.erb', __FILE__)).render(self)
76
+ else
77
+ File.read @path
78
+ end
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -1 +1,2 @@
1
- Caterer.provisioners.register(:chef_solo) { Caterer::Provisioner::ChefSolo }
1
+ Caterer.provisioners.register(:chef_solo) { Caterer::Provisioner::ChefSolo }
2
+ Caterer.provisioners.register(:shell) { Caterer::Provisioner::Shell }
@@ -18,25 +18,12 @@ module Caterer
18
18
  @key = opts[:key]
19
19
  @images = opts[:images] || []
20
20
  @data = opts[:data] || {}
21
- @engine = opts[:engine]
22
21
 
23
22
  @logger = Log4r::Logger.new("caterer::server")
24
23
 
25
24
  @logger.info("Server: #{opts.inspect}")
26
25
  end
27
26
 
28
- def bootstrap(opts={})
29
- if @images.length > 0
30
- @images.each do |i|
31
- ui.info "*** Bootstrapping image: #{i} ***"
32
- run_action(:bootstrap, opts.merge({:image => i}))
33
- end
34
- else
35
- ui.info "*** Bootstrapping ***"
36
- run_action(:bootstrap, opts.merge({:engine => @engine}))
37
- end
38
- end
39
-
40
27
  def provision(opts={})
41
28
  if @images.length > 0
42
29
  @images.each do |i|
@@ -44,27 +31,10 @@ module Caterer
44
31
  run_action(:provision, opts.merge({:image => i}))
45
32
  end
46
33
  else
47
- ui.info "*** Provisioning ***"
48
- run_action(:provision, opts.merge({:engine => @engine}))
34
+ ui.error "*** No image to provision ***"
49
35
  end
50
36
  end
51
37
 
52
- def up(opts={})
53
- if @images.length > 0
54
- @images.each do |i|
55
- ui.info "*** Up'ing image: #{i} ***"
56
- run_action(:up, opts.merge({:image => i}))
57
- end
58
- else
59
- ui.info "*** Up'ing ***"
60
- run_action(:up, opts.merge({:engine => @engine}))
61
- end
62
- end
63
-
64
- def reboot(opts={})
65
- run_action(:reboot, opts)
66
- end
67
-
68
38
  def lock(opts={})
69
39
  ui.info "*** Locking ***"
70
40
  run_action(:lock, opts)
@@ -80,11 +50,6 @@ module Caterer
80
50
  run_action(:clean, opts)
81
51
  end
82
52
 
83
- def reboot!
84
- ui.info "Rebooting..."
85
- ssh.sudo "shutdown -r now", :stream => true
86
- end
87
-
88
53
  def lock!
89
54
  ui.info "Locking..."
90
55
  ssh.sudo "touch #{lock_path}"
@@ -100,6 +65,23 @@ module Caterer
100
65
  res == 0 ? true : false
101
66
  end
102
67
 
68
+ def prepare!
69
+ ui.info "Preparing server..."
70
+ ssh.sudo "mkdir -p #{config.dest_dir}", :stream => true
71
+ ssh.sudo "mkdir -p #{config.dest_dir}/lib", :stream => true
72
+ ssh.sudo "mkdir -p #{config.dest_dir}/bin", :stream => true
73
+ ssh.sudo "chown -R #{username} #{config.dest_dir}", :stream => true
74
+ end
75
+
76
+ def cleanup!
77
+ ui.info "Cleaning up server..."
78
+ ssh.sudo "rm -rf #{config.dest_dir}"
79
+ end
80
+
81
+ def config
82
+ @config ||= Caterer.config
83
+ end
84
+
103
85
  def ssh
104
86
  @ssh ||= Communication::SSH.new(self)
105
87
  end
@@ -1,3 +1,3 @@
1
1
  module Caterer
2
- VERSION = "0.11.2"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+
3
+ echo "Provisioning <%= @name %>..."
4
+
5
+ <% @provisioners.each do |p| -%>
6
+ <%= p.provision_cmd %>
7
+
8
+ <% end -%>
@@ -1,4 +1,4 @@
1
- file_cache_path "<%= dest_dir %>"
1
+ file_cache_path "<%= dest_cache_dir %>"
2
2
  node_name "<%= server.host %>"
3
3
  cookbook_path <%= final_cookbook_paths.inspect %>
4
4
  data_bag_path "<%= target_data_bags_path %>"
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ <%= @inline %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caterer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 1.0.0
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: 2013-04-30 00:00:00.000000000 Z
12
+ date: 2013-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: log4r
@@ -191,21 +191,19 @@ files:
191
191
  - lib/caterer/action/config/validate/provisioner.rb
192
192
  - lib/caterer/action/environment.rb
193
193
  - lib/caterer/action/environment/setup.rb
194
+ - lib/caterer/action/image.rb
195
+ - lib/caterer/action/image/cleanup.rb
196
+ - lib/caterer/action/image/prepare.rb
197
+ - lib/caterer/action/image/run.rb
194
198
  - lib/caterer/action/provisioner.rb
195
- - lib/caterer/action/provisioner/bootstrap.rb
196
199
  - lib/caterer/action/provisioner/cleanup.rb
197
- - lib/caterer/action/provisioner/install.rb
198
- - lib/caterer/action/provisioner/load.rb
199
200
  - lib/caterer/action/provisioner/prepare.rb
200
- - lib/caterer/action/provisioner/provision.rb
201
201
  - lib/caterer/action/provisioner/uninstall.rb
202
- - lib/caterer/action/provisioner/validate.rb
203
- - lib/caterer/action/provisioner/validate/bootstrapped.rb
204
- - lib/caterer/action/provisioner/validate/engine.rb
205
202
  - lib/caterer/action/server.rb
203
+ - lib/caterer/action/server/cleanup.rb
206
204
  - lib/caterer/action/server/lock.rb
207
205
  - lib/caterer/action/server/platform.rb
208
- - lib/caterer/action/server/reboot.rb
206
+ - lib/caterer/action/server/prepare.rb
209
207
  - lib/caterer/action/server/unlock.rb
210
208
  - lib/caterer/action/server/validate.rb
211
209
  - lib/caterer/action/server/validate/ssh.rb
@@ -216,14 +214,11 @@ files:
216
214
  - lib/caterer/command.rb
217
215
  - lib/caterer/command/base.rb
218
216
  - lib/caterer/command/berks.rb
219
- - lib/caterer/command/bootstrap.rb
220
217
  - lib/caterer/command/clean.rb
221
218
  - lib/caterer/command/lock.rb
222
219
  - lib/caterer/command/provision.rb
223
- - lib/caterer/command/reboot.rb
224
- - lib/caterer/command/test.rb
220
+ - lib/caterer/command/server.rb
225
221
  - lib/caterer/command/unlock.rb
226
- - lib/caterer/command/up.rb
227
222
  - lib/caterer/commands.rb
228
223
  - lib/caterer/communication.rb
229
224
  - lib/caterer/communication/rsync.rb
@@ -231,17 +226,18 @@ files:
231
226
  - lib/caterer/config.rb
232
227
  - lib/caterer/config/base.rb
233
228
  - lib/caterer/config/berkshelf.rb
234
- - lib/caterer/config/group.rb
235
- - lib/caterer/config/image.rb
236
- - lib/caterer/config/member.rb
237
229
  - lib/caterer/config/provisioner.rb
238
230
  - lib/caterer/config/provisioner/base.rb
239
231
  - lib/caterer/config/provisioner/chef_solo.rb
240
232
  - lib/caterer/environment.rb
233
+ - lib/caterer/group.rb
234
+ - lib/caterer/image.rb
241
235
  - lib/caterer/logger.rb
236
+ - lib/caterer/member.rb
242
237
  - lib/caterer/provisioner.rb
243
238
  - lib/caterer/provisioner/base.rb
244
239
  - lib/caterer/provisioner/chef_solo.rb
240
+ - lib/caterer/provisioner/shell.rb
245
241
  - lib/caterer/provisioners.rb
246
242
  - lib/caterer/server.rb
247
243
  - lib/caterer/util.rb
@@ -249,15 +245,17 @@ files:
249
245
  - lib/caterer/util/retryable.rb
250
246
  - lib/caterer/util/shell.rb
251
247
  - lib/caterer/version.rb
248
+ - lib/templates/image/bin_wrapper.erb
252
249
  - lib/templates/provisioner/chef_solo/bootstrap.sh
253
- - lib/templates/provisioner/chef_solo/bootstrap/debian.sh
254
- - lib/templates/provisioner/chef_solo/bootstrap/el.sh
255
- - lib/templates/provisioner/chef_solo/bootstrap/fedora.sh
256
- - lib/templates/provisioner/chef_solo/bootstrap/sles.sh
257
- - lib/templates/provisioner/chef_solo/bootstrap/smartos.sh
258
- - lib/templates/provisioner/chef_solo/bootstrap/suse.sh
259
- - lib/templates/provisioner/chef_solo/bootstrap/ubuntu.sh
250
+ - lib/templates/provisioner/chef_solo/install/debian.sh
251
+ - lib/templates/provisioner/chef_solo/install/el.sh
252
+ - lib/templates/provisioner/chef_solo/install/fedora.sh
253
+ - lib/templates/provisioner/chef_solo/install/sles.sh
254
+ - lib/templates/provisioner/chef_solo/install/smartos.sh
255
+ - lib/templates/provisioner/chef_solo/install/suse.sh
256
+ - lib/templates/provisioner/chef_solo/install/ubuntu.sh
260
257
  - lib/templates/provisioner/chef_solo/solo.erb
258
+ - lib/templates/provisioner/shell/script.erb
261
259
  - lib/templates/server/platform.sh
262
260
  homepage: ''
263
261
  licenses: []
@@ -273,7 +271,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
273
271
  version: '0'
274
272
  segments:
275
273
  - 0
276
- hash: 2702261551377672085
274
+ hash: 141391927136989178
277
275
  required_rubygems_version: !ruby/object:Gem::Requirement
278
276
  none: false
279
277
  requirements:
@@ -282,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
280
  version: '0'
283
281
  segments:
284
282
  - 0
285
- hash: 2702261551377672085
283
+ hash: 141391927136989178
286
284
  requirements: []
287
285
  rubyforge_project:
288
286
  rubygems_version: 1.8.23
@@ -1,14 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- class Bootstrap < Base
5
-
6
- def call(env)
7
- env[:provisioner].bootstrap(env[:server])
8
- @app.call(env)
9
- end
10
-
11
- end
12
- end
13
- end
14
- end
@@ -1,29 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- class Load < Base
5
-
6
- def call(env)
7
-
8
- env[:provisioner] = load_provisioner(env)
9
-
10
- @app.call(env)
11
- end
12
-
13
- def load_provisioner(env)
14
-
15
- if image = env[:image]
16
- env[:config].images[image].provisioner
17
- else
18
- Caterer.provisioners.get(env[:engine] || default_engine).new
19
- end
20
- end
21
-
22
- def default_engine
23
- Caterer.config.provisioner.default_engine
24
- end
25
-
26
- end
27
- end
28
- end
29
- end
@@ -1,14 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- class Provision < Base
5
-
6
- def call(env)
7
- env[:provisioner].provision(env[:server])
8
- @app.call(env)
9
- end
10
-
11
- end
12
- end
13
- end
14
- end
@@ -1,10 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- module Validate
5
- autoload :Bootstrapped, 'caterer/action/provisioner/validate/bootstrapped'
6
- autoload :Engine, 'caterer/action/provisioner/validate/engine'
7
- end
8
- end
9
- end
10
- end
@@ -1,22 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- module Validate
5
- class Bootstrapped < Base
6
-
7
- def call(env)
8
-
9
- if not env[:provisioner].bootstrapped?(env[:server])
10
- env[:ui].error "Server not bootstrapped, cannot continue"
11
- return
12
- end
13
-
14
- @app.call(env)
15
-
16
- end
17
-
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,24 +0,0 @@
1
- module Caterer
2
- module Action
3
- module Provisioner
4
- module Validate
5
- class Engine < Base
6
-
7
- def call(env)
8
-
9
- if env[:engine]
10
- if not Caterer.provisioners.get(env[:engine])
11
- env[:ui].error "Unsupported provision engine #{env[:engine]}"
12
- return
13
- end
14
- end
15
-
16
- @app.call(env)
17
-
18
- end
19
- end
20
-
21
- end
22
- end
23
- end
24
- end