remy 0.0.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.
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/README.md +235 -0
- data/Rakefile +10 -0
- data/chef/cookbooks/hello_world/recipes/default.rb +13 -0
- data/chef/cookbooks/hello_world/templates/default/hello_world.txt.erb +6 -0
- data/chef/roles/test_role.rb +3 -0
- data/chef/roles/test_role2.json +9 -0
- data/chef/spec/hello_world/default_spec.rb +6 -0
- data/lib/remy/bootstrap.rb +82 -0
- data/lib/remy/chef.rb +135 -0
- data/lib/remy/remy.rb +140 -0
- data/lib/remy/server.rb +71 -0
- data/lib/remy/shell.rb +26 -0
- data/lib/remy/version.rb +3 -0
- data/lib/remy.rb +56 -0
- data/lib/tasks/remy.rake +51 -0
- data/remy.gemspec +31 -0
- data/spec/fixtures/bar.yml +7 -0
- data/spec/fixtures/chef.yml +44 -0
- data/spec/fixtures/foo.yml +5 -0
- data/spec/fixtures/hello_world_chef.yml +8 -0
- data/spec/remy/bootstrap_spec.rb +61 -0
- data/spec/remy/chef_spec.rb +82 -0
- data/spec/remy/integration/chef_spec.rb +41 -0
- data/spec/remy_spec.rb +330 -0
- data/spec/spec_helper.rb +16 -0
- metadata +230 -0
data/spec/remy_spec.rb
ADDED
@@ -0,0 +1,330 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Remy do
|
4
|
+
describe '.configuration' do
|
5
|
+
describe 'with no yml files' do
|
6
|
+
it 'should return an empty mash' do
|
7
|
+
Remy.configuration.should == Hashie::Mash.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "yml files" do
|
12
|
+
it 'should combine multiple yaml files into a mash' do
|
13
|
+
Remy.configure { |config| config.yml_files = ['fixtures/foo.yml', 'fixtures/bar.yml'].map { |f| File.join(File.dirname(__FILE__), f) } }
|
14
|
+
subject.configuration.yml_files.should == ['fixtures/foo.yml', 'fixtures/bar.yml'].map { |f| File.join(File.dirname(__FILE__), f) }
|
15
|
+
subject.configuration.blah.should == 'bar' # From foo.yml
|
16
|
+
subject.configuration.baz.should == 'baz' # From bar.yml
|
17
|
+
subject.configuration.colors.to_hash.symbolize_keys.should == {:blue => 'blue', :green => 'green', :red => 'red'}
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should return an empty array if there are no yml files' do
|
21
|
+
Remy.configure {}
|
22
|
+
subject.configuration.yml_files.should == []
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should not raise an error if there is a file does does not exist' do
|
26
|
+
expect do
|
27
|
+
Remy.configure { |config| config.yml_files = ['does_not_exist.yml'] }
|
28
|
+
end.should_not raise_error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "cookbooks path" do
|
33
|
+
it "should work if a single cookbook path is specified" do
|
34
|
+
Remy.configure { |config| config.cookbook_path = 'cookbooks' }
|
35
|
+
subject.configuration.cookbook_path.should == ['cookbooks']
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should work if multiple cookbook paths are specified" do
|
39
|
+
Remy.configure { |config| config.cookbook_path = ['cookbooks1', 'cookbooks2'] }
|
40
|
+
subject.configuration.cookbook_path.should == ['cookbooks1', 'cookbooks2']
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return an empty array if no cookbook paths are specified" do
|
44
|
+
Remy.configure {}
|
45
|
+
subject.configuration.cookbook_path.should == []
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "specs path" do
|
50
|
+
it "should work if a single spec path is specified" do
|
51
|
+
Remy.configure { |config| config.spec_path = 'specs' }
|
52
|
+
subject.configuration.spec_path.should == ['specs']
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should work if multiple spec paths are specified" do
|
56
|
+
Remy.configure { |config| config.spec_path = ['specs1', 'specs2'] }
|
57
|
+
subject.configuration.spec_path.should == ['specs1', 'specs2']
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return an empty array if no spec paths are specified" do
|
61
|
+
Remy.configure {}
|
62
|
+
subject.configuration.spec_path.should == []
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "roles path" do
|
67
|
+
it "should work if a single file is specified" do
|
68
|
+
Remy.configure { |config| config.roles_path = 'roles' }
|
69
|
+
subject.configuration.roles_path.should == ['roles']
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should work if multiple files are specified" do
|
73
|
+
Remy.configure { |config| config.roles_path = ['roles1', 'roles2'] }
|
74
|
+
subject.configuration.roles_path.should == ['roles1', 'roles2']
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should return an empty array if no roles paths are specified" do
|
78
|
+
Remy.configure {}
|
79
|
+
subject.configuration.roles_path.should == []
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "node attributes" do
|
84
|
+
it "should merge in the other node attributes from the hash" do
|
85
|
+
Remy.configure { |config| config.node_attributes = {:another_node_attribute => 'red'} }
|
86
|
+
subject.configuration.another_node_attribute.should == 'red'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should not blow up if there no node attributes are specified" do
|
90
|
+
lambda { Remy.configure {} }.should_not raise_error
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "#remote_chef_dir" do
|
95
|
+
it "should default to /var/chef if no option is given" do
|
96
|
+
subject.configuration.remote_chef_dir.should == '/var/chef'
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should be able to be overriden" do
|
100
|
+
Remy.configure { |config| config.remote_chef_dir = '/foo/shef' }
|
101
|
+
subject.configuration.remote_chef_dir.should == '/foo/shef'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '.to_json' do
|
107
|
+
it 'should create the expected JSON' do
|
108
|
+
Remy.configure {}
|
109
|
+
lambda do
|
110
|
+
JSON.parse(subject.to_json)
|
111
|
+
end.should_not raise_error
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'with a configuration' do
|
116
|
+
before do
|
117
|
+
Remy.configure do |config|
|
118
|
+
config.yml_files = ['fixtures/chef.yml'].map { |f| File.join(File.dirname(__FILE__), f) }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.servers' do
|
123
|
+
it 'returns all servers' do
|
124
|
+
Remy.servers.size.should == 3
|
125
|
+
Remy.servers['db.sharespost.com'].color.should == 'yellow'
|
126
|
+
end
|
127
|
+
it 'should return servers that match the criteria (using standard Enumerable methods)' do
|
128
|
+
Remy.servers.select { |(k, v)| v.rails_env == 'demo' }.map(&:first).should == ['web.sharespost.com', 'demo.sharespost.com']
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '.find_servers' do
|
133
|
+
it 'should return servers that match the criteria' do
|
134
|
+
Remy.find_servers(:rails_env => 'demo').keys.should == ['web.sharespost.com', 'demo.sharespost.com']
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should return all servers if there are no criteria' do
|
138
|
+
Remy.find_servers.keys.should == ['db.sharespost.com', 'web.sharespost.com', 'demo.sharespost.com']
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should return servers that match the criteria (with multiple criteria)' do
|
142
|
+
Remy.find_servers(:rails_env => 'demo', :color => 'blue').keys.should == ['web.sharespost.com']
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should return nil if there are no servers specified in the yaml file" do
|
146
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
147
|
+
Remy.find_servers(:rails_env => 'demo').should be_nil
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe '.find_server' do
|
152
|
+
it 'should return the first server that matchs the criteria' do
|
153
|
+
Remy.find_server(:rails_env => 'demo').keys.should == ['web.sharespost.com']
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'should return nil if there are no servers specifie in the yml files' do
|
157
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
158
|
+
Remy.find_server(:rails_env => 'demo').should be_nil
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '.find_server_config' do
|
163
|
+
it 'should return the first server that matchs the criteria' do
|
164
|
+
Remy.find_server_config(:rails_env => 'demo').to_hash.should == {"color"=>"blue", "recipes"=>["recipe[hello_world]"], "rails_env"=>"demo", "ip_address"=> IP_ADDRESS}
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should return nil if no server info is found' do
|
168
|
+
Remy.find_server_config(:rails_env => 'foo').should be_nil
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'should return nil if there are no servers in the yml files' do
|
172
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
173
|
+
Remy.find_server_config(:rails_env => 'foo').should be_nil
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe '.find_server_config_by_name' do
|
178
|
+
it 'should return the server that matches the name' do
|
179
|
+
Remy.find_server_config_by_name('db.sharespost.com').to_hash.should == {"encoding"=>"utf8", "adapter"=>"mysql2", "color"=>"yellow", "rails_env"=>"production", "ip_address"=>"51.51.51.51"}
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should return nil if theres no server that matches the name' do
|
183
|
+
Remy.find_server_config_by_name('db.asdfjkll.com').should be_nil
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'should return nil (and not blow up) if there are no servers in the yml files' do
|
187
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
188
|
+
Remy.find_server_config_by_name('db.asdfjkll.com').should be_nil
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'should return nil (and not blow up) if there is no Remy configuration' do
|
192
|
+
Remy.instance_variable_set('@configuration', nil)
|
193
|
+
Remy.find_server_config_by_name('db.asdfjkll.com').should be_nil
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '.cloud_configuration' do
|
198
|
+
it 'should return nil if it has not been specified in the yml files' do
|
199
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
200
|
+
Remy.cloud_configuration.should be_nil
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'should return the cloud configuration options if present in the yml files' do
|
204
|
+
Remy.cloud_configuration.should == Hashie::Mash.new(
|
205
|
+
:cloud_api_key => 'abcdefg12345',
|
206
|
+
:cloud_provider => 'Rackspace',
|
207
|
+
:cloud_username => 'sharespost',
|
208
|
+
:flavor_id => 4,
|
209
|
+
:image_id => 49,
|
210
|
+
:server_name => 'new-server.somedomain.com')
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'should return nil if there is currently no Remy configuration' do
|
215
|
+
Remy.instance_variable_set('@configuration', nil)
|
216
|
+
Remy.cloud_configuration.should be_nil
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
describe '.bootstrap' do
|
221
|
+
it 'should return nil if it has not been specified in the yml files' do
|
222
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
223
|
+
Remy.bootstrap.should be_nil
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'should return the bootstrap options if present in the yml files' do
|
227
|
+
Remy.bootstrap.should == Hashie::Mash.new(
|
228
|
+
:ruby_version => '1.9.2',
|
229
|
+
:gems => {
|
230
|
+
:chef => '0.10.4',
|
231
|
+
:rspec => '2.7.0',
|
232
|
+
:bundler => '1.0.21'
|
233
|
+
})
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'should return nil if there is currently no Remy configuration' do
|
237
|
+
Remy.instance_variable_set('@configuration', nil)
|
238
|
+
Remy.bootstrap.should be_nil
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
describe 'support for the rake tasks' do
|
244
|
+
before do
|
245
|
+
Remy.configure do |config|
|
246
|
+
config.yml_files = ['fixtures/foo.yml', 'fixtures/bar.yml', 'fixtures/chef.yml'].map { |f| File.join(File.dirname(__FILE__), f) }
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
describe '.convert_properties_to_hash' do
|
251
|
+
it 'should convert properties to a hash' do
|
252
|
+
Remy.send(:convert_properties_to_hash, ' foo:bar blah:blech').should == {:foo => 'bar', :blah => 'blech'}
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'should convert a blank string to nil' do
|
256
|
+
Remy.send(:convert_properties_to_hash, ' ').should be_nil
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'should return nil if the string is not in property format' do
|
260
|
+
Remy.send(:convert_properties_to_hash, 'demo.sharespost.com').should be_nil
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
describe '.determine_ip_addresses_for_remy_run' do
|
265
|
+
context 'top level ip address is present in the yml files' do
|
266
|
+
before do
|
267
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/hello_world_chef.yml') }
|
268
|
+
end
|
269
|
+
it 'should return the ip address in the yml file if no ip address is given and an ip is present in the yml files' do
|
270
|
+
Remy.send(:determine_ip_addresses_for_remy_run, '').should == ['50.57.162.242']
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'no top level ip address is present in the yml files' do
|
275
|
+
before do
|
276
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/foo.yml') }
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'should return nothing if no ip address is given and no top-level ip address is in the yml files' do
|
280
|
+
Remy.send(:determine_ip_addresses_for_remy_run, '').should == []
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'should return the ip address if an ip address is given and no top-level ip address is in the yml files' do
|
284
|
+
Remy.send(:determine_ip_addresses_for_remy_run, '1.2.3.4').should == ['1.2.3.4']
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
context ':servers section present in the yml files' do
|
289
|
+
before do
|
290
|
+
Remy.configure { |config| config.yml_files = File.join(File.dirname(__FILE__), 'fixtures/chef.yml') }
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'should return an ip address if an ip address is given as property value (this IP address is not in the :servers section of the yml files)' do
|
294
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'ip_address:1.2.3.4').should == ['1.2.3.4']
|
295
|
+
end
|
296
|
+
|
297
|
+
it 'should return the ip address if the ip address was found in the :servers section of the yml files' do
|
298
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'ip_address:52.52.52.52').should == ['52.52.52.52']
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'should return the IP address - the IP address is specified, but is not found in the servers section in the yml files' do
|
302
|
+
Remy.send(:determine_ip_addresses_for_remy_run, '1.2.3.4').should == ['1.2.3.4']
|
303
|
+
end
|
304
|
+
|
305
|
+
it 'should return the IP address - the IP address is specified, and is found in the servers section in the yml files' do
|
306
|
+
Remy.send(:determine_ip_addresses_for_remy_run, '52.52.52.52').should == ['52.52.52.52']
|
307
|
+
end
|
308
|
+
|
309
|
+
it 'should be able to find servers by name from the :servers section of the yml file' do
|
310
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'demo.sharespost.com').should == ['52.52.52.52']
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'should be able to find servers by multiple names' do
|
314
|
+
Remy.send(:determine_ip_addresses_for_remy_run, ' demo.sharespost.com db.sharespost.com ').should == ['52.52.52.52', '51.51.51.51']
|
315
|
+
end
|
316
|
+
|
317
|
+
it 'should be able to find servers by multiple names and ip addresses' do
|
318
|
+
Remy.send(:determine_ip_addresses_for_remy_run, ' demo.sharespost.com 51.51.51.51').should == ['52.52.52.52', '51.51.51.51']
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'should be able to find all of the servers from the yml files that match certain attributes' do
|
322
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'rails_env:demo').should == ['50.57.162.242', '52.52.52.52']
|
323
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'rails_env:demo color:green').should == ['52.52.52.52']
|
324
|
+
Remy.send(:determine_ip_addresses_for_remy_run, 'rails_env:demo color:yellow').should == []
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
ENV["RAILS_ENV"] ||= 'test'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'active_support'
|
6
|
+
require 'mocha'
|
7
|
+
require 'json'
|
8
|
+
require 'remy'
|
9
|
+
|
10
|
+
Dir[File.join(File.dirname(__FILE__), 'spec', 'support', '**' '*.rb')].each { |f| require f }
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.mock_with :mocha
|
14
|
+
end
|
15
|
+
|
16
|
+
IP_ADDRESS = '50.57.162.242'
|
metadata
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: remy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Greg Woodward & Ryan Dy
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-12-04 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: bourne
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: mocha
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: i18n
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: json
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: rspec
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ~>
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 19
|
85
|
+
segments:
|
86
|
+
- 2
|
87
|
+
- 7
|
88
|
+
- 0
|
89
|
+
version: 2.7.0
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id005
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: activesupport
|
94
|
+
prerelease: false
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 7
|
101
|
+
segments:
|
102
|
+
- 2
|
103
|
+
version: "2"
|
104
|
+
type: :runtime
|
105
|
+
version_requirements: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: chef
|
108
|
+
prerelease: false
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
type: :runtime
|
119
|
+
version_requirements: *id007
|
120
|
+
- !ruby/object:Gem::Dependency
|
121
|
+
name: fog
|
122
|
+
prerelease: false
|
123
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
131
|
+
version: "0"
|
132
|
+
type: :runtime
|
133
|
+
version_requirements: *id008
|
134
|
+
- !ruby/object:Gem::Dependency
|
135
|
+
name: hashie
|
136
|
+
prerelease: false
|
137
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
146
|
+
type: :runtime
|
147
|
+
version_requirements: *id009
|
148
|
+
description: Easy chef deployment
|
149
|
+
email:
|
150
|
+
- pair+gwoodward+rdy@pivotallabs.com
|
151
|
+
executables: []
|
152
|
+
|
153
|
+
extensions: []
|
154
|
+
|
155
|
+
extra_rdoc_files: []
|
156
|
+
|
157
|
+
files:
|
158
|
+
- .gitignore
|
159
|
+
- .rspec
|
160
|
+
- .rvmrc
|
161
|
+
- Gemfile
|
162
|
+
- MIT-LICENSE
|
163
|
+
- README.md
|
164
|
+
- Rakefile
|
165
|
+
- chef/cookbooks/hello_world/recipes/default.rb
|
166
|
+
- chef/cookbooks/hello_world/templates/default/hello_world.txt.erb
|
167
|
+
- chef/roles/test_role.rb
|
168
|
+
- chef/roles/test_role2.json
|
169
|
+
- chef/spec/hello_world/default_spec.rb
|
170
|
+
- lib/remy.rb
|
171
|
+
- lib/remy/bootstrap.rb
|
172
|
+
- lib/remy/chef.rb
|
173
|
+
- lib/remy/remy.rb
|
174
|
+
- lib/remy/server.rb
|
175
|
+
- lib/remy/shell.rb
|
176
|
+
- lib/remy/version.rb
|
177
|
+
- lib/tasks/remy.rake
|
178
|
+
- remy.gemspec
|
179
|
+
- spec/fixtures/bar.yml
|
180
|
+
- spec/fixtures/chef.yml
|
181
|
+
- spec/fixtures/foo.yml
|
182
|
+
- spec/fixtures/hello_world_chef.yml
|
183
|
+
- spec/remy/bootstrap_spec.rb
|
184
|
+
- spec/remy/chef_spec.rb
|
185
|
+
- spec/remy/integration/chef_spec.rb
|
186
|
+
- spec/remy_spec.rb
|
187
|
+
- spec/spec_helper.rb
|
188
|
+
homepage: http://sharespost.com
|
189
|
+
licenses: []
|
190
|
+
|
191
|
+
post_install_message:
|
192
|
+
rdoc_options: []
|
193
|
+
|
194
|
+
require_paths:
|
195
|
+
- lib
|
196
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
hash: 3
|
202
|
+
segments:
|
203
|
+
- 0
|
204
|
+
version: "0"
|
205
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
+
none: false
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
hash: 3
|
211
|
+
segments:
|
212
|
+
- 0
|
213
|
+
version: "0"
|
214
|
+
requirements: []
|
215
|
+
|
216
|
+
rubyforge_project: remy
|
217
|
+
rubygems_version: 1.8.10
|
218
|
+
signing_key:
|
219
|
+
specification_version: 3
|
220
|
+
summary: Remy gem
|
221
|
+
test_files:
|
222
|
+
- spec/fixtures/bar.yml
|
223
|
+
- spec/fixtures/chef.yml
|
224
|
+
- spec/fixtures/foo.yml
|
225
|
+
- spec/fixtures/hello_world_chef.yml
|
226
|
+
- spec/remy/bootstrap_spec.rb
|
227
|
+
- spec/remy/chef_spec.rb
|
228
|
+
- spec/remy/integration/chef_spec.rb
|
229
|
+
- spec/remy_spec.rb
|
230
|
+
- spec/spec_helper.rb
|