caterer 0.0.1 → 0.1.0

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.
Files changed (59) hide show
  1. data/.gitignore +1 -0
  2. data/Berksfile +3 -0
  3. data/Berksfile.lock +0 -0
  4. data/README.md +138 -2
  5. data/Vagrantfile +22 -0
  6. data/bin/cater +9 -0
  7. data/caterer.gemspec +5 -0
  8. data/cookbooks/users/recipes/default.rb +18 -0
  9. data/example/Caterfile +28 -10
  10. data/example/bootstrap.sh +3 -0
  11. data/knife.rb +1 -0
  12. data/lib/caterer/action/base.rb +10 -0
  13. data/lib/caterer/action/config/validate/image.rb +23 -0
  14. data/lib/caterer/action/config/validate/provisioner.rb +29 -0
  15. data/lib/caterer/action/config/validate.rb +10 -0
  16. data/lib/caterer/action/config.rb +7 -0
  17. data/lib/caterer/action/provisioner/base.rb +16 -0
  18. data/lib/caterer/action/provisioner/bootstrap.rb +14 -0
  19. data/lib/caterer/action/provisioner/cleanup.rb +14 -0
  20. data/lib/caterer/action/provisioner/prepare.rb +14 -0
  21. data/lib/caterer/action/provisioner/provision.rb +14 -0
  22. data/lib/caterer/action/provisioner.rb +11 -0
  23. data/lib/caterer/action/server/validate/ssh.rb +22 -0
  24. data/lib/caterer/action/server/validate.rb +9 -0
  25. data/lib/caterer/action/server.rb +7 -0
  26. data/lib/caterer/action.rb +9 -0
  27. data/lib/caterer/actions.rb +48 -0
  28. data/lib/caterer/command/base.rb +100 -0
  29. data/lib/caterer/command/bootstrap.rb +28 -0
  30. data/lib/caterer/command/provision.rb +24 -0
  31. data/lib/caterer/command/reboot.rb +22 -0
  32. data/lib/caterer/command/test.rb +9 -2
  33. data/lib/caterer/command/up.rb +28 -0
  34. data/lib/caterer/command.rb +6 -1
  35. data/lib/caterer/commands.rb +6 -1
  36. data/lib/caterer/communication/rsync.rb +14 -0
  37. data/lib/caterer/communication/ssh.rb +185 -0
  38. data/lib/caterer/communication.rb +6 -0
  39. data/lib/caterer/config/base.rb +24 -11
  40. data/lib/caterer/config/group.rb +24 -0
  41. data/lib/caterer/config/image.rb +20 -0
  42. data/lib/caterer/config/member.rb +14 -0
  43. data/lib/caterer/config/provision/chef_solo.rb +36 -12
  44. data/lib/caterer/config/provision.rb +5 -3
  45. data/lib/caterer/config.rb +5 -1
  46. data/lib/caterer/environment.rb +38 -12
  47. data/lib/caterer/provisioner/base.rb +19 -0
  48. data/lib/caterer/provisioner/chef_solo.rb +150 -0
  49. data/lib/caterer/provisioner.rb +6 -0
  50. data/lib/caterer/server.rb +102 -0
  51. data/lib/caterer/util/ansi_escape_code_remover.rb +34 -0
  52. data/lib/caterer/util/retryable.rb +25 -0
  53. data/lib/caterer/util.rb +6 -0
  54. data/lib/caterer/version.rb +1 -1
  55. data/lib/caterer.rb +15 -5
  56. data/lib/templates/provisioner/chef_solo/bootstrap.sh +87 -0
  57. data/lib/templates/provisioner/chef_solo/solo.erb +3 -0
  58. metadata +124 -3
  59. data/lib/caterer/config/role.rb +0 -21
@@ -0,0 +1,150 @@
1
+ require 'tilt'
2
+ require 'oj'
3
+ require 'multi_json'
4
+
5
+ module Caterer
6
+ module Provisioner
7
+ class ChefSolo < Base
8
+
9
+ def bootstrap(script=nil)
10
+
11
+ script ||= config_bootstrap || default_bootstrap
12
+
13
+ if not File.exists? script
14
+ server.ui.error "Script does not exist!"
15
+ return
16
+ end
17
+
18
+ # upload
19
+ server.ui.info "Uploading bootstrap script..."
20
+ server.ssh.upload script, "#{bootstrap_path}"
21
+
22
+ # set permissions
23
+ server.ui.info "Applying permissions..."
24
+ server.ssh.sudo "chown #{server.username} #{bootstrap_path}", :stream => true
25
+ server.ssh.sudo "chmod 777 #{bootstrap_path}", :stream => true
26
+
27
+ # run
28
+ server.ui.info "Running bootstrap script..."
29
+ server.ssh.sudo "#{bootstrap_path}", :stream => true
30
+ end
31
+
32
+ def prepare
33
+ server.ssh.sudo "mkdir -p #{base_path}", :stream => true
34
+ server.ssh.sudo "chown #{server.username} #{base_path}", :stream => true
35
+ end
36
+
37
+ def provision
38
+
39
+ # create cookbooks directory
40
+ server.ssh.sudo "mkdir -p #{cookbooks_path}", :stream => true
41
+ server.ssh.sudo "chown -R #{server.username} #{cookbooks_path}", :stream => true
42
+
43
+ # sync cookbooks
44
+ server.ui.info "Syncing cookbooks..."
45
+ @config.cookbooks_path.each do |path|
46
+ upload_directory path, cookbooks_path
47
+ end
48
+
49
+ # create roles directory
50
+ server.ssh.sudo "mkdir -p #{roles_path}", :stream => true
51
+ server.ssh.sudo "chown -R #{server.username} #{roles_path}", :stream => true
52
+
53
+ # sync roles
54
+ server.ui.info "Syncing roles..."
55
+ @config.roles_path.each do |path|
56
+ upload_directory path, roles_path
57
+ end
58
+
59
+ # create data_bags directory
60
+ server.ssh.sudo "mkdir -p #{data_bags_path}", :stream => true
61
+ server.ssh.sudo "chown -R #{server.username} #{data_bags_path}", :stream => true
62
+
63
+ # sync databags
64
+ server.ui.info "Syncing data bags..."
65
+ @config.data_bags_path.each do |path|
66
+ upload_directory path, data_bags_path
67
+ end
68
+
69
+ # create solo.rb
70
+ server.ui.info "Generating solo.rb..."
71
+ server.ssh.upload(StringIO.new(solo_content), solo_path)
72
+
73
+ # create json
74
+ server.ui.info "Generating json config..."
75
+ server.ssh.upload(StringIO.new(json_config), json_config_path)
76
+
77
+ # set permissions on everything
78
+ server.ssh.sudo "chown -R #{server.username} #{base_path}", :stream => true
79
+
80
+ # run
81
+ server.ui.info "Running chef-solo..."
82
+ server.ssh.sudo command_string, :stream => true
83
+ end
84
+
85
+ def cleanup
86
+ server.ssh.sudo "rm -rf #{base_path}", :stream => true
87
+ end
88
+
89
+ protected
90
+
91
+ def upload_directory(from, to)
92
+ if File.exists? from
93
+ unique = Digest::MD5.hexdigest(from)
94
+ server.ssh.upload from, "#{to}/#{unique}"
95
+ server.ssh.sudo "mv #{to}/#{unique}/* #{to}/", :stream => true
96
+ server.ssh.sudo "rm -rf #{to}/#{unique}", :stream => true
97
+ end
98
+ end
99
+
100
+ def base_path
101
+ "/tmp/cater-chef-solo"
102
+ end
103
+
104
+ def bootstrap_path
105
+ "#{base_path}/bootstrap"
106
+ end
107
+
108
+ def cookbooks_path
109
+ "#{base_path}/cookbooks"
110
+ end
111
+
112
+ def roles_path
113
+ "#{base_path}/roles"
114
+ end
115
+
116
+ def data_bags_path
117
+ "#{base_path}/data_bags"
118
+ end
119
+
120
+ def config_bootstrap
121
+ @config.bootstrap_script
122
+ end
123
+
124
+ def default_bootstrap
125
+ File.expand_path("../../../templates/provisioner/chef_solo/bootstrap.sh", __FILE__)
126
+ end
127
+
128
+ def solo_path
129
+ "#{base_path}/solo.rb"
130
+ end
131
+
132
+ def solo_content
133
+ Tilt.new(File.expand_path('../../../templates/provisioner/chef_solo/solo.erb', __FILE__)).render(self)
134
+ end
135
+
136
+ def json_config
137
+ MultiJson.dump(@config.json.merge({:run_list => @config.run_list}))
138
+ end
139
+
140
+ def json_config_path
141
+ "#{base_path}/config.json"
142
+ end
143
+
144
+ def command_string
145
+ "chef-solo -c #{solo_path} -j #{json_config_path}"
146
+ end
147
+
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,6 @@
1
+ module Caterer
2
+ module Provisioner
3
+ autoload :Base, 'caterer/provisioner/base'
4
+ autoload :ChefSolo, 'caterer/provisioner/chef_solo'
5
+ end
6
+ end
@@ -0,0 +1,102 @@
1
+ require 'etc'
2
+
3
+ module Caterer
4
+ class Server
5
+
6
+ attr_reader :env
7
+
8
+ def initialize(env, opts=nil)
9
+ @env = env || Environment.new
10
+ @alias = opts[:alias]
11
+ @user = opts[:user]
12
+ @pass = opts[:pass]
13
+ @host = opts[:host]
14
+ @port = opts[:port]
15
+ @images = opts[:images] || []
16
+ end
17
+
18
+ def bootstrap(opts={})
19
+ if @images.length == 0
20
+ ui.error "image list is empty, nothing to do"
21
+ end
22
+ @images.each do |i|
23
+ ui.info "*** Bootstrapping image: #{i} ***"
24
+ run_action(:bootstrap, opts.merge({:image => i}))
25
+ end
26
+ end
27
+
28
+ def provision(opts={})
29
+ if @images.length == 0
30
+ ui.error "image list is empty, nothing to do"
31
+ end
32
+ @images.each do |i|
33
+ ui.info "*** Provisioning image: #{i} ***"
34
+ run_action(:provision, opts.merge({:image => i}))
35
+ end
36
+ end
37
+
38
+ def reboot(opts={})
39
+ run_action(:reboot, opts)
40
+ end
41
+
42
+ def up(opts={})
43
+ if @images.length == 0
44
+ ui.error "image list is empty, nothing to do"
45
+ end
46
+ @images.each do |i|
47
+ ui.info "*** Up'ing image: #{i} ***"
48
+ run_action(:up, opts.merge({:image => i}))
49
+ end
50
+ end
51
+
52
+ def ssh
53
+ @ssh ||= Communication::SSH.new(self)
54
+ end
55
+
56
+ def ssh_opts
57
+ {
58
+ :port => port,
59
+ :password => password
60
+ }
61
+ end
62
+
63
+ def ui
64
+ @ui ||= begin
65
+ ui = @env.ui.dup
66
+ ui.resource = name
67
+ ui
68
+ end
69
+ end
70
+
71
+ def name
72
+ @alias || host
73
+ end
74
+
75
+ def username
76
+ @user || Etc.getlogin
77
+ end
78
+
79
+ def password
80
+ @pass
81
+ end
82
+
83
+ def host
84
+ @host
85
+ end
86
+
87
+ def port
88
+ @port || 22
89
+ end
90
+
91
+ def run_action(name, options=nil)
92
+ options = {
93
+ :server => self,
94
+ :ui => ui,
95
+ :config => env.config
96
+ }.merge(options || {})
97
+
98
+ env.action_runner.run(name, options)
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,34 @@
1
+ module Caterer
2
+ module Util
3
+ module ANSIEscapeCodeRemover
4
+ # Removes ANSI escape code sequences from the text and returns
5
+ # it.
6
+ #
7
+ # This removes all the ANSI escape codes listed here along with
8
+ # the escape codes for VT100 terminals:
9
+ #
10
+ # http://ascii-table.com/ansi-escape-sequences.php
11
+ def remove_ansi_escape_codes(text)
12
+ # An array of regular expressions which match various kinds
13
+ # of escape sequences. I can't think of a better single regular
14
+ # expression or any faster way to do this.
15
+ matchers = [/\e\[\d*[ABCD]/, # Matches things like \e[4D
16
+ /\e\[(\d*;)?\d*[HF]/, # Matches \e[1;2H or \e[H
17
+ /\e\[(s|u|2J|K)/, # Matches \e[s, \e[2J, etc.
18
+ /\e\[=\d*[hl]/, # Matches \e[=24h
19
+ /\e\[\?[1-9][hl]/, # Matches \e[?2h
20
+ /\e\[20[hl]/, # Matches \e[20l]
21
+ /\e[DME78H]/, # Matches \eD, \eH, etc.
22
+ /\e\[[0-2]?[JK]/, # Matches \e[0J, \e[K, etc.
23
+ ]
24
+
25
+ # Take each matcher and replace it with emptiness.
26
+ matchers.each do |matcher|
27
+ text.gsub!(matcher, "")
28
+ end
29
+
30
+ text
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,25 @@
1
+ module Caterer
2
+ module Util
3
+ module Retryable
4
+ # Retries a given block a specified number of times in the
5
+ # event the specified exception is raised. If the retries
6
+ # run out, the final exception is raised.
7
+ #
8
+ # This code is adapted slightly from the following blog post:
9
+ # http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
10
+ def retryable(opts=nil)
11
+ opts = { :tries => 1, :on => Exception }.merge(opts || {})
12
+
13
+ begin
14
+ return yield
15
+ rescue *opts[:on]
16
+ if (opts[:tries] -= 1) > 0
17
+ sleep opts[:sleep].to_f if opts[:sleep]
18
+ retry
19
+ end
20
+ raise
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ module Caterer
2
+ module Util
3
+ autoload :ANSIEscapeCodeRemover, 'caterer/util/ansi_escape_code_remover'
4
+ autoload :Retryable, 'caterer/util/retryable'
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module Caterer
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/caterer.rb CHANGED
@@ -3,13 +3,22 @@ require 'caterer/version'
3
3
  require 'caterer/logger'
4
4
 
5
5
  module Caterer
6
- autoload :Cli, 'caterer/cli'
7
- autoload :Command, 'caterer/command'
8
- autoload :Config, 'caterer/config'
9
- autoload :Environment, 'caterer/environment'
6
+ autoload :Action, 'caterer/action'
7
+ autoload :Cli, 'caterer/cli'
8
+ autoload :Command, 'caterer/command'
9
+ autoload :Communication, 'caterer/communication'
10
+ autoload :Config, 'caterer/config'
11
+ autoload :Environment, 'caterer/environment'
12
+ autoload :Provisioner, 'caterer/provisioner'
13
+ autoload :Server, 'caterer/server'
14
+ autoload :Util, 'caterer/util'
10
15
 
11
16
  extend self
12
17
 
18
+ def actions
19
+ @actions ||= Vli::Registry.new
20
+ end
21
+
13
22
  def commands
14
23
  @commands ||= Vli::Registry.new
15
24
  end
@@ -24,4 +33,5 @@ module Caterer
24
33
 
25
34
  end
26
35
 
27
- require 'caterer/commands'
36
+ require 'caterer/commands'
37
+ require 'caterer/actions'
@@ -0,0 +1,87 @@
1
+ #!/bin/bash
2
+
3
+ # this script will:
4
+ # 1- detect a platform
5
+ # 2- install curl
6
+ # 3- download and run the chef-solo installer
7
+
8
+ # Check whether a command exists
9
+ exists() {
10
+ if command -v $1 &>/dev/null
11
+ then
12
+ return 0
13
+ else
14
+ return 1
15
+ fi
16
+ }
17
+
18
+ detect_platform() {
19
+ local platform=""
20
+ if [ -f "/etc/lsb-release" ];
21
+ then
22
+ platform=$(grep DISTRIB_ID /etc/lsb-release | cut -d "=" -f 2 | tr '[A-Z]' '[a-z]')
23
+ elif [ -f "/etc/debian_version" ];
24
+ then
25
+ platform="debian"
26
+ elif [ -f "/etc/redhat-release" ];
27
+ then
28
+ platform="el"
29
+ elif [ -f "/etc/system-release" ];
30
+ then
31
+ platform=$(sed 's/^\(.\+\) release.\+/\1/' /etc/system-release | tr '[A-Z]' '[a-z]')
32
+ # amazon is built off of fedora, so act like RHEL
33
+ if [ "$platform" = "amazon linux ami" ];
34
+ then
35
+ platform="el"
36
+ fi
37
+ # Apple OS X
38
+ elif [ -f "/usr/bin/sw_vers" ];
39
+ then
40
+ platform="mac_os_x"
41
+ elif [ -f "/etc/release" ];
42
+ then
43
+ platform="solaris2"
44
+ elif [ -f "/etc/SuSE-release" ];
45
+ then
46
+ if grep -q 'Enterprise' /etc/SuSE-release;
47
+ then
48
+ platform="sles"
49
+ else
50
+ platform="suse"
51
+ fi
52
+ fi
53
+ echo $platform
54
+ }
55
+
56
+ install_curl() {
57
+ echo "installing curl..."
58
+ case "$(detect_platform)" in
59
+ "ubuntu" )
60
+ apt-get -y install curl
61
+ ;;
62
+ "debian" )
63
+ apt-get -y install curl
64
+ ;;
65
+ "el" )
66
+ yum -y install curl
67
+ ;;
68
+ "fedora" )
69
+ yum -y install curl
70
+ ;;
71
+ "suse" )
72
+ yast -i curl
73
+ ;;
74
+ "sles" )
75
+ yast -i curl
76
+ ;;
77
+ *)
78
+ echo "sorry, I don't have a bootstrap for this platform"
79
+ exit 1
80
+ ;;
81
+ esac
82
+ }
83
+
84
+ exists curl || install_curl
85
+
86
+ # install chef-solo
87
+ exists chef-solo || curl -L https://www.opscode.com/chef/install.sh | bash
@@ -0,0 +1,3 @@
1
+ node_name "<%= server.host %>"
2
+ cookbook_path "<%= cookbooks_path %>"
3
+ data_bag_path "<%= data_bags_path %>"
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.0.1
4
+ version: 0.1.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: 2012-12-05 00:00:00.000000000 Z
12
+ date: 2012-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: log4r
@@ -59,6 +59,86 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: net-ssh
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
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: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: net-scp
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
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'
94
+ - !ruby/object:Gem::Dependency
95
+ name: tilt
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
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'
110
+ - !ruby/object:Gem::Dependency
111
+ name: oj
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '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: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: multi_json
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '1.3'
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: '1.3'
62
142
  description: Caterer is a server configuration tool that caters to your servers with
63
143
  a push model, with support for chef recipes
64
144
  email:
@@ -69,27 +149,68 @@ extensions: []
69
149
  extra_rdoc_files: []
70
150
  files:
71
151
  - .gitignore
152
+ - Berksfile
153
+ - Berksfile.lock
72
154
  - Gemfile
73
155
  - LICENSE.txt
74
156
  - README.md
75
157
  - Rakefile
158
+ - Vagrantfile
76
159
  - bin/cater
77
160
  - caterer.gemspec
78
161
  - config/default.rb
162
+ - cookbooks/users/recipes/default.rb
79
163
  - example/Caterfile
164
+ - example/bootstrap.sh
165
+ - knife.rb
80
166
  - lib/caterer.rb
167
+ - lib/caterer/action.rb
168
+ - lib/caterer/action/base.rb
169
+ - lib/caterer/action/config.rb
170
+ - lib/caterer/action/config/validate.rb
171
+ - lib/caterer/action/config/validate/image.rb
172
+ - lib/caterer/action/config/validate/provisioner.rb
173
+ - lib/caterer/action/provisioner.rb
174
+ - lib/caterer/action/provisioner/base.rb
175
+ - lib/caterer/action/provisioner/bootstrap.rb
176
+ - lib/caterer/action/provisioner/cleanup.rb
177
+ - lib/caterer/action/provisioner/prepare.rb
178
+ - lib/caterer/action/provisioner/provision.rb
179
+ - lib/caterer/action/server.rb
180
+ - lib/caterer/action/server/validate.rb
181
+ - lib/caterer/action/server/validate/ssh.rb
182
+ - lib/caterer/actions.rb
81
183
  - lib/caterer/cli.rb
82
184
  - lib/caterer/command.rb
185
+ - lib/caterer/command/base.rb
186
+ - lib/caterer/command/bootstrap.rb
187
+ - lib/caterer/command/provision.rb
188
+ - lib/caterer/command/reboot.rb
83
189
  - lib/caterer/command/test.rb
190
+ - lib/caterer/command/up.rb
84
191
  - lib/caterer/commands.rb
192
+ - lib/caterer/communication.rb
193
+ - lib/caterer/communication/rsync.rb
194
+ - lib/caterer/communication/ssh.rb
85
195
  - lib/caterer/config.rb
86
196
  - lib/caterer/config/base.rb
197
+ - lib/caterer/config/group.rb
198
+ - lib/caterer/config/image.rb
199
+ - lib/caterer/config/member.rb
87
200
  - lib/caterer/config/provision.rb
88
201
  - lib/caterer/config/provision/chef_solo.rb
89
- - lib/caterer/config/role.rb
90
202
  - lib/caterer/environment.rb
91
203
  - lib/caterer/logger.rb
204
+ - lib/caterer/provisioner.rb
205
+ - lib/caterer/provisioner/base.rb
206
+ - lib/caterer/provisioner/chef_solo.rb
207
+ - lib/caterer/server.rb
208
+ - lib/caterer/util.rb
209
+ - lib/caterer/util/ansi_escape_code_remover.rb
210
+ - lib/caterer/util/retryable.rb
92
211
  - lib/caterer/version.rb
212
+ - lib/templates/provisioner/chef_solo/bootstrap.sh
213
+ - lib/templates/provisioner/chef_solo/solo.erb
93
214
  homepage: ''
94
215
  licenses: []
95
216
  post_install_message:
@@ -1,21 +0,0 @@
1
- require 'active_support/inflector'
2
-
3
- module Caterer::Config
4
-
5
- class Role
6
-
7
- attr_reader :name
8
-
9
- def initialize(name)
10
- @name = name
11
- end
12
-
13
- def provision(type=nil)
14
- return @provision if not type
15
- @provision = "Caterer::Config::Provision::#{type.to_s.classify}".constantize.new
16
- yield @provision if block_given?
17
- end
18
-
19
- end
20
-
21
- end