chef 10.28.2 → 10.30.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/lib/chef.rb +1 -0
  2. data/lib/chef/application/knife.rb +2 -0
  3. data/lib/chef/client.rb +1 -1
  4. data/lib/chef/config.rb +5 -1
  5. data/lib/chef/cookbook_uploader.rb +7 -14
  6. data/lib/chef/data_bag.rb +2 -3
  7. data/lib/chef/exceptions.rb +9 -1
  8. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
  9. data/lib/chef/knife.rb +3 -0
  10. data/lib/chef/mixin/deep_merge.rb +53 -21
  11. data/lib/chef/monkey_patches/net_http.rb +34 -0
  12. data/lib/chef/monkey_patches/uri.rb +70 -0
  13. data/lib/chef/node.rb +5 -5
  14. data/lib/chef/platform.rb +1 -0
  15. data/lib/chef/provider/cookbook_file.rb +14 -6
  16. data/lib/chef/provider/directory.rb +16 -10
  17. data/lib/chef/provider/file.rb +23 -17
  18. data/lib/chef/provider/group.rb +50 -31
  19. data/lib/chef/provider/group/dscl.rb +26 -4
  20. data/lib/chef/provider/group/gpasswd.rb +14 -19
  21. data/lib/chef/provider/group/groupadd.rb +41 -1
  22. data/lib/chef/provider/group/groupmod.rb +46 -36
  23. data/lib/chef/provider/group/pw.rb +59 -16
  24. data/lib/chef/provider/group/suse.rb +16 -13
  25. data/lib/chef/provider/group/usermod.rb +40 -18
  26. data/lib/chef/provider/group/windows.rb +13 -6
  27. data/lib/chef/provider/package/yum.rb +1 -0
  28. data/lib/chef/provider/remote_file.rb +8 -2
  29. data/lib/chef/provider/ruby_block.rb +1 -1
  30. data/lib/chef/provider/template.rb +11 -5
  31. data/lib/chef/provider/user/useradd.rb +9 -1
  32. data/lib/chef/provider/whyrun_safe_ruby_block.rb +30 -0
  33. data/lib/chef/providers.rb +1 -0
  34. data/lib/chef/resource/group.rb +11 -1
  35. data/lib/chef/resource/whyrun_safe_ruby_block.rb +31 -0
  36. data/lib/chef/resources.rb +1 -0
  37. data/lib/chef/rest.rb +6 -2
  38. data/lib/chef/rest/rest_request.rb +6 -2
  39. data/lib/chef/util/windows/net_group.rb +5 -1
  40. data/lib/chef/version.rb +1 -1
  41. data/spec/functional/resource/base.rb +40 -0
  42. data/spec/functional/resource/group_spec.rb +343 -0
  43. data/spec/spec_helper.rb +4 -0
  44. data/spec/support/platform_helpers.rb +17 -0
  45. data/spec/unit/client_spec.rb +1 -1
  46. data/spec/unit/data_bag_spec.rb +4 -6
  47. data/spec/unit/mixin/deep_merge_spec.rb +416 -190
  48. data/spec/unit/monkey_patches/uri_spec.rb +34 -0
  49. data/spec/unit/node/attribute_spec.rb +49 -14
  50. data/spec/unit/node_spec.rb +31 -0
  51. data/spec/unit/provider/file_spec.rb +27 -27
  52. data/spec/unit/provider/group/dscl_spec.rb +1 -0
  53. data/spec/unit/provider/group/gpasswd_spec.rb +16 -9
  54. data/spec/unit/provider/group/groupadd_spec.rb +3 -4
  55. data/spec/unit/provider/group/groupmod_spec.rb +0 -1
  56. data/spec/unit/provider/group/pw_spec.rb +12 -15
  57. data/spec/unit/provider/group/usermod_spec.rb +21 -6
  58. data/spec/unit/provider/group/windows_spec.rb +0 -8
  59. data/spec/unit/provider/group_spec.rb +26 -4
  60. data/spec/unit/provider/user/useradd_spec.rb +21 -0
  61. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +47 -0
  62. data/spec/unit/rest_spec.rb +55 -22
  63. metadata +119 -44
  64. checksums.yaml +0 -7
@@ -25,6 +25,7 @@ describe Chef::Provider::Group::Usermod do
25
25
  @run_context = Chef::RunContext.new(@node, {}, @events)
26
26
  @new_resource = Chef::Resource::Group.new("wheel")
27
27
  @new_resource.members [ "all", "your", "base" ]
28
+ @new_resource.excluded_members [ ]
28
29
  @provider = Chef::Provider::Group::Usermod.new(@new_resource, @run_context)
29
30
  @provider.stub!(:run_command)
30
31
  end
@@ -33,11 +34,12 @@ describe Chef::Provider::Group::Usermod do
33
34
 
34
35
  describe "with an empty members array" do
35
36
  before do
37
+ @new_resource.stub!(:append).and_return(true)
36
38
  @new_resource.stub!(:members).and_return([])
37
39
  end
38
40
 
39
41
  it "should log an appropriate message" do
40
- Chef::Log.should_receive(:debug).with("group[wheel] not changing group members, the group has no members")
42
+ @provider.should_not_receive(:shell_out!)
41
43
  @provider.modify_group_members
42
44
  end
43
45
  end
@@ -61,14 +63,27 @@ describe Chef::Provider::Group::Usermod do
61
63
  @provider.action = :modify
62
64
  lambda { @provider.run_action(@provider.process_resource_requirements) }.should raise_error(Chef::Exceptions::Group, "setting group members directly is not supported by #{@provider.to_s}, must set append true in group")
63
65
  end
64
-
66
+
67
+ it "should raise an error when excluded_members are set" do
68
+ @provider.define_resource_requirements
69
+ @provider.load_current_resource
70
+ @provider.instance_variable_set("@group_exists", true)
71
+ @provider.action = :modify
72
+ @new_resource.stub!(:append).and_return(true)
73
+ @new_resource.stub!(:excluded_members).and_return(["someone"])
74
+ lambda { @provider.run_action(@provider.process_resource_requirements) }.should raise_error(Chef::Exceptions::Group, "excluded_members is not supported by #{@provider.to_s}")
75
+ end
76
+
65
77
  platforms.each do |platform, flags|
66
78
  it "should usermod each user when the append option is set on #{platform}" do
67
- @node[:platform] = platform
79
+ current_resource = @new_resource.dup
80
+ current_resource.members([ ])
81
+ @provider.current_resource = current_resource
82
+ @node.automatic_attrs[:platform] = platform
68
83
  @new_resource.stub!(:append).and_return(true)
69
- @provider.should_receive(:run_command).with({:command => "usermod #{flags} wheel all"})
70
- @provider.should_receive(:run_command).with({:command => "usermod #{flags} wheel your"})
71
- @provider.should_receive(:run_command).with({:command => "usermod #{flags} wheel base"})
84
+ @provider.should_receive(:shell_out!).with("usermod #{flags} wheel all")
85
+ @provider.should_receive(:shell_out!).with("usermod #{flags} wheel your")
86
+ @provider.should_receive(:shell_out!).with("usermod #{flags} wheel base")
72
87
  @provider.modify_group_members
73
88
  end
74
89
  end
@@ -70,14 +70,6 @@ describe Chef::Provider::Group::Windows do
70
70
  @provider.manage_group
71
71
  end
72
72
 
73
- it "should call @net_group.local_set_members if append fails" do
74
- @new_resource.stub!(:append).and_return(true)
75
- @net_group.stub!(:local_add_members).and_raise(ArgumentError)
76
- @net_group.should_receive(:local_add_members).with(@new_resource.members)
77
- @net_group.should_receive(:local_set_members).with(@new_resource.members + @current_resource.members)
78
- @provider.manage_group
79
- end
80
-
81
73
  end
82
74
 
83
75
  describe "remove_group" do
@@ -108,6 +108,19 @@ describe Chef::Provider::User do
108
108
  @provider.compare_group.should be_true
109
109
  end
110
110
 
111
+ it "should return false if append is true and excluded_members include a non existing member" do
112
+ @new_resource.excluded_members << "extra_user"
113
+ @new_resource.stub!(:append).and_return(true)
114
+ @provider.compare_group.should be_false
115
+ end
116
+
117
+ it "should return true if the append is true and excluded_members include an existing user" do
118
+ @new_resource.members.each {|m| @new_resource.excluded_members << m }
119
+ @new_resource.members.clear
120
+ @new_resource.stub!(:append).and_return(true)
121
+ @provider.compare_group.should be_true
122
+ end
123
+
111
124
  end
112
125
 
113
126
  describe "when creating a group" do
@@ -127,6 +140,7 @@ describe Chef::Provider::User do
127
140
  it "should check to see if the group has mismatched attributes if the group exists" do
128
141
  @provider.group_exists = true
129
142
  @provider.stub!(:compare_group).and_return(false)
143
+ @provider.stub!(:change_desc).and_return([ ])
130
144
  @provider.run_action(:create)
131
145
  @provider.new_resource.should_not be_updated
132
146
  end
@@ -134,6 +148,7 @@ describe Chef::Provider::User do
134
148
  it "should call manage_group if the group exists and has mismatched attributes" do
135
149
  @provider.group_exists = true
136
150
  @provider.stub!(:compare_group).and_return(true)
151
+ @provider.stub!(:change_desc).and_return([ ])
137
152
  @provider.should_receive(:manage_group).and_return(true)
138
153
  @provider.run_action(:create)
139
154
  end
@@ -141,6 +156,7 @@ describe Chef::Provider::User do
141
156
  it "should set the new_resources updated flag when it creates the group if we call manage_group" do
142
157
  @provider.group_exists = true
143
158
  @provider.stub!(:compare_group).and_return(true)
159
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
144
160
  @provider.stub!(:manage_group).and_return(true)
145
161
  @provider.run_action(:create)
146
162
  @new_resource.should be_updated
@@ -172,12 +188,14 @@ describe Chef::Provider::User do
172
188
 
173
189
  it "should run manage_group if the group exists and has mismatched attributes" do
174
190
  @provider.should_receive(:compare_group).and_return(true)
191
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
175
192
  @provider.should_receive(:manage_group).and_return(true)
176
193
  @provider.run_action(:manage)
177
194
  end
178
195
 
179
196
  it "should set the new resources updated flag to true if manage_group is called" do
180
197
  @provider.stub!(:compare_group).and_return(true)
198
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
181
199
  @provider.stub!(:manage_group).and_return(true)
182
200
  @provider.run_action(:manage)
183
201
  @new_resource.should be_updated
@@ -191,6 +209,7 @@ describe Chef::Provider::User do
191
209
 
192
210
  it "should not run manage_group if the group exists but has no differing attributes" do
193
211
  @provider.should_receive(:compare_group).and_return(false)
212
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
194
213
  @provider.should_not_receive(:manage_group)
195
214
  @provider.run_action(:manage)
196
215
  end
@@ -204,12 +223,14 @@ describe Chef::Provider::User do
204
223
 
205
224
  it "should run manage_group if the group exists and has mismatched attributes" do
206
225
  @provider.should_receive(:compare_group).and_return(true)
226
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
207
227
  @provider.should_receive(:manage_group).and_return(true)
208
228
  @provider.run_action(:modify)
209
229
  end
210
230
 
211
231
  it "should set the new resources updated flag to true if manage_group is called" do
212
232
  @provider.stub!(:compare_group).and_return(true)
233
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
213
234
  @provider.stub!(:manage_group).and_return(true)
214
235
  @provider.run_action(:modify)
215
236
  @new_resource.should be_updated
@@ -217,6 +238,7 @@ describe Chef::Provider::User do
217
238
 
218
239
  it "should not run manage_group if the group exists but has no differing attributes" do
219
240
  @provider.should_receive(:compare_group).and_return(false)
241
+ @provider.stub!(:change_desc).and_return(["Some changes are going to be done."])
220
242
  @provider.should_not_receive(:manage_group)
221
243
  @provider.run_action(:modify)
222
244
  end
@@ -233,26 +255,26 @@ describe Chef::Provider::User do
233
255
  @new_resource.members << "user2"
234
256
  @new_resource.stub!(:append).and_return true
235
257
  @provider.compare_group.should be_true
236
- @provider.change_desc.should == "add missing member(s): user1, user2"
258
+ @provider.change_desc.should == [ "add missing member(s): user1, user2" ]
237
259
  end
238
260
 
239
261
  it "should report that the group members will be overwritten if not appending" do
240
262
  @new_resource.members << "user1"
241
263
  @new_resource.stub!(:append).and_return false
242
264
  @provider.compare_group.should be_true
243
- @provider.change_desc.should == "replace group members with new list of members"
265
+ @provider.change_desc.should == [ "replace group members with new list of members" ]
244
266
  end
245
267
 
246
268
  it "should report the gid will be changed when it does not match" do
247
269
  @current_resource.stub!(:gid).and_return("BADF00D")
248
270
  @provider.compare_group.should be_true
249
- @provider.change_desc.should == "change gid #{@current_resource.gid} to #{@new_resource.gid}"
271
+ @provider.change_desc.should == [ "change gid #{@current_resource.gid} to #{@new_resource.gid}" ]
250
272
 
251
273
  end
252
274
 
253
275
  it "should report no change reason when no change is required" do
254
276
  @provider.compare_group.should be_false
255
- @provider.change_desc.should == nil
277
+ @provider.change_desc.should == [ ]
256
278
  end
257
279
  end
258
280
 
@@ -315,6 +315,27 @@ describe Chef::Provider::User::Useradd do
315
315
  lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
316
316
  end
317
317
  end
318
+
319
+ context "when in why run mode" do
320
+ before do
321
+ @stdout.stub!(:gets).and_return(nil)
322
+ @stderr.stub!(:gets).and_return("passwd: user 'chef-test' does not exist")
323
+ @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
324
+ Chef::Config[:why_run] = true
325
+ end
326
+
327
+ after do
328
+ Chef::Config[:why_run] = false
329
+ end
330
+
331
+ it "should return false if the user does not exist" do
332
+ @provider.check_lock.should eql(false)
333
+ end
334
+
335
+ it "should not raise an error if the user does not exist" do
336
+ lambda { @provider.check_lock }.should_not raise_error
337
+ end
338
+ end
318
339
  end
319
340
 
320
341
  describe "when locking the user" do
@@ -0,0 +1,47 @@
1
+ #
2
+ # Author:: Phil Dibowitz (<phild@fb.com>)
3
+ # Copyright:: Copyright (c) 2013 Facebook
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Provider::WhyrunSafeRubyBlock, "initialize" do
22
+ before(:each) do
23
+ $evil_global_evil_laugh = :wahwah
24
+ @node = Chef::Node.new
25
+ @events = Chef::EventDispatch::Dispatcher.new
26
+ @run_context = Chef::RunContext.new(@node, {}, @events)
27
+ @new_resource = Chef::Resource::WhyrunSafeRubyBlock.new("bloc party")
28
+ @new_resource.block { $evil_global_evil_laugh = :mwahahaha}
29
+ @provider = Chef::Provider::WhyrunSafeRubyBlock.new(@new_resource, @run_context)
30
+ end
31
+
32
+ it "should call the block and flag the resource as updated" do
33
+ @provider.run_action(:create)
34
+ $evil_global_evil_laugh.should == :mwahahaha
35
+ @new_resource.should be_updated
36
+ end
37
+
38
+ it "should call the block and flat the resource as updated - even in whyrun" do
39
+ Chef::Config[:why_run] = true
40
+ @provider.run_action(:create)
41
+ $evil_global_evil_laugh.should == :mwahahaha
42
+ @new_resource.should be_updated
43
+ Chef::Config[:why_run] = false
44
+ end
45
+
46
+ end
47
+
@@ -278,9 +278,11 @@ describe Chef::REST do
278
278
 
279
279
  describe "streaming downloads to a tempfile" do
280
280
  before do
281
- @tempfile = Tempfile.open("chef-rspec-rest_spec-line-#{__LINE__}--")
282
- Tempfile.stub!(:new).with("chef-rest").and_return(@tempfile)
283
- Tempfile.stub!(:open).and_return(@tempfile)
281
+ @tempfile = StringIO.new
282
+ @tempfile.stub(:close!)
283
+ @tempfile.stub(:path).and_return("/tmp/this-is-a-stringio-not-a-real-file")
284
+ Tempfile.stub(:new).with("chef-rest").and_return(@tempfile)
285
+ Tempfile.stub(:open).and_return(@tempfile)
284
286
 
285
287
  @request_mock = {}
286
288
  Net::HTTP::Get.stub!(:new).and_return(@request_mock)
@@ -288,11 +290,6 @@ describe Chef::REST do
288
290
  @http_response_mock = mock("Net::HTTP Response mock")
289
291
  end
290
292
 
291
- after do
292
- @tempfile.rspec_reset
293
- @tempfile.close!
294
- end
295
-
296
293
  it "should build a new HTTP GET request without the application/json accept header" do
297
294
  expected_headers = {'X-Chef-Version' => Chef::VERSION, 'Accept-Encoding' => Chef::REST::RESTRequest::ENCODING_GZIP_DEFLATE}
298
295
  Net::HTTP::Get.should_receive(:new).with("/?foo=bar", expected_headers).and_return(@request_mock)
@@ -309,9 +306,9 @@ describe Chef::REST do
309
306
  end
310
307
 
311
308
  it "should populate the tempfile with the value of the raw request" do
312
- @http_response_mock.stub!(:read_body).and_yield("ninja")
313
- @tempfile.should_receive(:write).with("ninja").once.and_return(true)
309
+ @http_response.should_receive(:read_body).and_yield("ninja")
314
310
  @rest.run_request(:GET, @url, {}, false, nil, true)
311
+ @tempfile.string.should include("ninja")
315
312
  end
316
313
 
317
314
  it "should close the tempfile if we're doing a raw request" do
@@ -426,19 +423,55 @@ describe Chef::REST do
426
423
  @rest.api_request(:GET, @url, {}).should == {"ohai2u"=>"json_api"}
427
424
  end
428
425
 
429
- %w[ HTTPFound HTTPMovedPermanently HTTPSeeOther HTTPUseProxy HTTPTemporaryRedirect HTTPMultipleChoice ].each do |resp_name|
430
- it "should call api_request again on a #{resp_name} response" do
431
- resp_cls = Net.const_get(resp_name)
426
+ describe "when the server returns a redirect response" do
427
+ let(:redirected_url) { "https://chef.example.com:8443/foo" }
428
+ let(:redirected_uri) { URI.parse(redirected_url) }
429
+
430
+ def redirect_with(response_name)
431
+ resp_cls = Net.const_get(response_name)
432
432
  resp_code = Net::HTTPResponse::CODE_TO_OBJ.keys.detect { |k| Net::HTTPResponse::CODE_TO_OBJ[k] == resp_cls }
433
- http_response = Net::HTTPFound.new("1.1", resp_code, "bob is somewhere else again")
434
- http_response.add_field("location", @url.path)
435
- http_response.stub!(:read_body)
433
+ redirect = Net::HTTPFound.new("1.1", resp_code, "bob is somewhere else again")
434
+ redirect.add_field("location", redirected_url)
435
+ redirect.stub!(:read_body).and_return('')
436
+ redirect
437
+ end
436
438
 
437
- @http_client.stub!(:request).and_yield(http_response).and_return(http_response)
439
+ %w[ HTTPFound HTTPMovedPermanently HTTPSeeOther HTTPUseProxy HTTPTemporaryRedirect HTTPMultipleChoice ].each do |response_name|
440
+
441
+ it "should call api_request again on a #{response_name} response" do
442
+ redirect = redirect_with(response_name)
438
443
 
439
- lambda { @rest.api_request(:GET, @url) }.should raise_error(Chef::Exceptions::RedirectLimitExceeded)
444
+ headers = { "X-Auth-Header" => "foo" }
445
+ auto_headers = {"Accept"=>"application/json", "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3"}
446
+ expected_headers = auto_headers.merge(headers)
447
+
448
+ success = Net::HTTPSuccess.new("1.1",200, "it-works")
449
+ success.stub!(:read_body).and_return('{"foo": "bar"}')
450
+ success['content-type'] = "application/json"
451
+
452
+ @http_client.should_receive(:request).and_yield(redirect).and_return(redirect)
453
+ @http_client.should_receive(:request).and_yield(success).and_return(success)
454
+
455
+ # CHEF-1848: verify that headers get passed to redirects
456
+ @rest.should_receive(:retriable_rest_request).with(:GET, @url, nil, expected_headers).and_call_original
457
+ @rest.should_receive(:retriable_rest_request).with(:GET, redirected_uri, nil, expected_headers).and_call_original
458
+
459
+ @rest.api_request(:GET, @url, headers).should == {"foo" => "bar"}
460
+ end
461
+
462
+ context "when making a request for a method other than GET" do
463
+
464
+ [:PUT, :POST, :DELETE].each do |method|
465
+ it "raises an error" do
466
+ redirect = redirect_with(response_name)
467
+ @http_client.should_receive(:request).and_yield(redirect).and_return(redirect)
468
+ lambda { @rest.api_request(method, @url) }.should raise_error(Chef::Exceptions::InvalidRedirect)
469
+ end
470
+ end
471
+ end
440
472
  end
441
- end
473
+
474
+ end
442
475
 
443
476
  it "should show the JSON error message on an unsuccessful request" do
444
477
  http_response = Net::HTTPServerError.new("1.1", "500", "drooling from inside of mouth")
@@ -490,7 +523,6 @@ describe Chef::REST do
490
523
  end
491
524
 
492
525
  after do
493
- @tempfile.rspec_reset
494
526
  @tempfile.close!
495
527
  end
496
528
 
@@ -557,7 +589,6 @@ describe Chef::REST do
557
589
  end
558
590
 
559
591
  it "closes and unlinks the tempfile when the response is a redirect" do
560
- Tempfile.rspec_reset
561
592
  tempfile = mock("die", :path => "/tmp/ragefist", :close => true, :binmode => nil)
562
593
  tempfile.should_receive(:close!).at_least(2).times
563
594
  Tempfile.stub!(:new).with("chef-rest").and_return(tempfile)
@@ -571,7 +602,9 @@ describe Chef::REST do
571
602
  end
572
603
 
573
604
  it "passes the original block to the redirected request" do
574
- Tempfile.rspec_reset
605
+ tempfile = mock("die", :path => "/tmp/ragefist", :close => true, :binmode => nil)
606
+ tempfile.should_receive(:close!).at_least(2).times
607
+ Tempfile.stub!(:new).with("chef-rest").and_return(tempfile)
575
608
 
576
609
  http_response = Net::HTTPFound.new("1.1", "302", "bob is taking care of that one for me today")
577
610
  http_response.add_field("location","/that-thing-is-here-now")
metadata CHANGED
@@ -1,20 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.28.2
4
+ version: 10.30.0.rc.0
5
+ prerelease: 8
5
6
  platform: ruby
6
7
  authors:
7
8
  - Adam Jacob
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-08 00:00:00.000000000 Z
12
+ date: 2013-11-22 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: mixlib-config
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.1.2
20
22
  - - ~>
@@ -23,8 +25,9 @@ dependencies:
23
25
  type: :runtime
24
26
  prerelease: false
25
27
  version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
26
29
  requirements:
27
- - - '>='
30
+ - - ! '>='
28
31
  - !ruby/object:Gem::Version
29
32
  version: 1.1.2
30
33
  - - ~>
@@ -33,6 +36,7 @@ dependencies:
33
36
  - !ruby/object:Gem::Dependency
34
37
  name: mixlib-cli
35
38
  requirement: !ruby/object:Gem::Requirement
39
+ none: false
36
40
  requirements:
37
41
  - - ~>
38
42
  - !ruby/object:Gem::Version
@@ -40,6 +44,7 @@ dependencies:
40
44
  type: :runtime
41
45
  prerelease: false
42
46
  version_requirements: !ruby/object:Gem::Requirement
47
+ none: false
43
48
  requirements:
44
49
  - - ~>
45
50
  - !ruby/object:Gem::Version
@@ -47,6 +52,7 @@ dependencies:
47
52
  - !ruby/object:Gem::Dependency
48
53
  name: mixlib-log
49
54
  requirement: !ruby/object:Gem::Requirement
55
+ none: false
50
56
  requirements:
51
57
  - - ~>
52
58
  - !ruby/object:Gem::Version
@@ -54,6 +60,7 @@ dependencies:
54
60
  type: :runtime
55
61
  prerelease: false
56
62
  version_requirements: !ruby/object:Gem::Requirement
63
+ none: false
57
64
  requirements:
58
65
  - - ~>
59
66
  - !ruby/object:Gem::Version
@@ -61,6 +68,7 @@ dependencies:
61
68
  - !ruby/object:Gem::Dependency
62
69
  name: mixlib-authentication
63
70
  requirement: !ruby/object:Gem::Requirement
71
+ none: false
64
72
  requirements:
65
73
  - - ~>
66
74
  - !ruby/object:Gem::Version
@@ -68,6 +76,7 @@ dependencies:
68
76
  type: :runtime
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
71
80
  requirements:
72
81
  - - ~>
73
82
  - !ruby/object:Gem::Version
@@ -75,22 +84,25 @@ dependencies:
75
84
  - !ruby/object:Gem::Dependency
76
85
  name: mixlib-shellout
77
86
  requirement: !ruby/object:Gem::Requirement
87
+ none: false
78
88
  requirements:
79
- - - ~>
89
+ - - '='
80
90
  - !ruby/object:Gem::Version
81
- version: '1.1'
91
+ version: 1.3.0.rc.0
82
92
  type: :runtime
83
93
  prerelease: false
84
94
  version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
85
96
  requirements:
86
- - - ~>
97
+ - - '='
87
98
  - !ruby/object:Gem::Version
88
- version: '1.1'
99
+ version: 1.3.0.rc.0
89
100
  - !ruby/object:Gem::Dependency
90
101
  name: ohai
91
102
  requirement: !ruby/object:Gem::Requirement
103
+ none: false
92
104
  requirements:
93
- - - '>='
105
+ - - ! '>='
94
106
  - !ruby/object:Gem::Version
95
107
  version: 0.6.0
96
108
  - - <
@@ -99,8 +111,9 @@ dependencies:
99
111
  type: :runtime
100
112
  prerelease: false
101
113
  version_requirements: !ruby/object:Gem::Requirement
114
+ none: false
102
115
  requirements:
103
- - - '>='
116
+ - - ! '>='
104
117
  - !ruby/object:Gem::Version
105
118
  version: 0.6.0
106
119
  - - <
@@ -109,8 +122,9 @@ dependencies:
109
122
  - !ruby/object:Gem::Dependency
110
123
  name: rest-client
111
124
  requirement: !ruby/object:Gem::Requirement
125
+ none: false
112
126
  requirements:
113
- - - '>='
127
+ - - ! '>='
114
128
  - !ruby/object:Gem::Version
115
129
  version: 1.0.4
116
130
  - - <
@@ -119,18 +133,36 @@ dependencies:
119
133
  type: :runtime
120
134
  prerelease: false
121
135
  version_requirements: !ruby/object:Gem::Requirement
136
+ none: false
122
137
  requirements:
123
- - - '>='
138
+ - - ! '>='
124
139
  - !ruby/object:Gem::Version
125
140
  version: 1.0.4
126
141
  - - <
127
142
  - !ruby/object:Gem::Version
128
143
  version: 1.7.0
144
+ - !ruby/object:Gem::Dependency
145
+ name: mime-types
146
+ requirement: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ~>
150
+ - !ruby/object:Gem::Version
151
+ version: '1.16'
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: '1.16'
129
160
  - !ruby/object:Gem::Dependency
130
161
  name: bunny
131
162
  requirement: !ruby/object:Gem::Requirement
163
+ none: false
132
164
  requirements:
133
- - - '>='
165
+ - - ! '>='
134
166
  - !ruby/object:Gem::Version
135
167
  version: 0.6.0
136
168
  - - <
@@ -139,8 +171,9 @@ dependencies:
139
171
  type: :runtime
140
172
  prerelease: false
141
173
  version_requirements: !ruby/object:Gem::Requirement
174
+ none: false
142
175
  requirements:
143
- - - '>='
176
+ - - ! '>='
144
177
  - !ruby/object:Gem::Version
145
178
  version: 0.6.0
146
179
  - - <
@@ -149,8 +182,9 @@ dependencies:
149
182
  - !ruby/object:Gem::Dependency
150
183
  name: json
151
184
  requirement: !ruby/object:Gem::Requirement
185
+ none: false
152
186
  requirements:
153
- - - '>='
187
+ - - ! '>='
154
188
  - !ruby/object:Gem::Version
155
189
  version: 1.4.4
156
190
  - - <=
@@ -159,8 +193,9 @@ dependencies:
159
193
  type: :runtime
160
194
  prerelease: false
161
195
  version_requirements: !ruby/object:Gem::Requirement
196
+ none: false
162
197
  requirements:
163
- - - '>='
198
+ - - ! '>='
164
199
  - !ruby/object:Gem::Version
165
200
  version: 1.4.4
166
201
  - - <=
@@ -169,6 +204,7 @@ dependencies:
169
204
  - !ruby/object:Gem::Dependency
170
205
  name: yajl-ruby
171
206
  requirement: !ruby/object:Gem::Requirement
207
+ none: false
172
208
  requirements:
173
209
  - - ~>
174
210
  - !ruby/object:Gem::Version
@@ -176,6 +212,7 @@ dependencies:
176
212
  type: :runtime
177
213
  prerelease: false
178
214
  version_requirements: !ruby/object:Gem::Requirement
215
+ none: false
179
216
  requirements:
180
217
  - - ~>
181
218
  - !ruby/object:Gem::Version
@@ -183,6 +220,7 @@ dependencies:
183
220
  - !ruby/object:Gem::Dependency
184
221
  name: treetop
185
222
  requirement: !ruby/object:Gem::Requirement
223
+ none: false
186
224
  requirements:
187
225
  - - ~>
188
226
  - !ruby/object:Gem::Version
@@ -190,6 +228,7 @@ dependencies:
190
228
  type: :runtime
191
229
  prerelease: false
192
230
  version_requirements: !ruby/object:Gem::Requirement
231
+ none: false
193
232
  requirements:
194
233
  - - ~>
195
234
  - !ruby/object:Gem::Version
@@ -197,6 +236,7 @@ dependencies:
197
236
  - !ruby/object:Gem::Dependency
198
237
  name: net-ssh
199
238
  requirement: !ruby/object:Gem::Requirement
239
+ none: false
200
240
  requirements:
201
241
  - - ~>
202
242
  - !ruby/object:Gem::Version
@@ -204,6 +244,7 @@ dependencies:
204
244
  type: :runtime
205
245
  prerelease: false
206
246
  version_requirements: !ruby/object:Gem::Requirement
247
+ none: false
207
248
  requirements:
208
249
  - - ~>
209
250
  - !ruby/object:Gem::Version
@@ -211,6 +252,7 @@ dependencies:
211
252
  - !ruby/object:Gem::Dependency
212
253
  name: net-ssh-multi
213
254
  requirement: !ruby/object:Gem::Requirement
255
+ none: false
214
256
  requirements:
215
257
  - - ~>
216
258
  - !ruby/object:Gem::Version
@@ -218,6 +260,7 @@ dependencies:
218
260
  type: :runtime
219
261
  prerelease: false
220
262
  version_requirements: !ruby/object:Gem::Requirement
263
+ none: false
221
264
  requirements:
222
265
  - - ~>
223
266
  - !ruby/object:Gem::Version
@@ -225,8 +268,9 @@ dependencies:
225
268
  - !ruby/object:Gem::Dependency
226
269
  name: highline
227
270
  requirement: !ruby/object:Gem::Requirement
271
+ none: false
228
272
  requirements:
229
- - - '>='
273
+ - - ! '>='
230
274
  - !ruby/object:Gem::Version
231
275
  version: 1.6.9
232
276
  - - ~>
@@ -235,8 +279,9 @@ dependencies:
235
279
  type: :runtime
236
280
  prerelease: false
237
281
  version_requirements: !ruby/object:Gem::Requirement
282
+ none: false
238
283
  requirements:
239
- - - '>='
284
+ - - ! '>='
240
285
  - !ruby/object:Gem::Version
241
286
  version: 1.6.9
242
287
  - - ~>
@@ -245,6 +290,7 @@ dependencies:
245
290
  - !ruby/object:Gem::Dependency
246
291
  name: moneta
247
292
  requirement: !ruby/object:Gem::Requirement
293
+ none: false
248
294
  requirements:
249
295
  - - <
250
296
  - !ruby/object:Gem::Version
@@ -252,6 +298,7 @@ dependencies:
252
298
  type: :runtime
253
299
  prerelease: false
254
300
  version_requirements: !ruby/object:Gem::Requirement
301
+ none: false
255
302
  requirements:
256
303
  - - <
257
304
  - !ruby/object:Gem::Version
@@ -259,143 +306,163 @@ dependencies:
259
306
  - !ruby/object:Gem::Dependency
260
307
  name: erubis
261
308
  requirement: !ruby/object:Gem::Requirement
309
+ none: false
262
310
  requirements:
263
- - - '>='
311
+ - - ! '>='
264
312
  - !ruby/object:Gem::Version
265
313
  version: '0'
266
314
  type: :runtime
267
315
  prerelease: false
268
316
  version_requirements: !ruby/object:Gem::Requirement
317
+ none: false
269
318
  requirements:
270
- - - '>='
319
+ - - ! '>='
271
320
  - !ruby/object:Gem::Version
272
321
  version: '0'
273
322
  - !ruby/object:Gem::Dependency
274
323
  name: uuidtools
275
324
  requirement: !ruby/object:Gem::Requirement
325
+ none: false
276
326
  requirements:
277
- - - '>='
327
+ - - ! '>='
278
328
  - !ruby/object:Gem::Version
279
329
  version: '0'
280
330
  type: :runtime
281
331
  prerelease: false
282
332
  version_requirements: !ruby/object:Gem::Requirement
333
+ none: false
283
334
  requirements:
284
- - - '>='
335
+ - - ! '>='
285
336
  - !ruby/object:Gem::Version
286
337
  version: '0'
287
338
  - !ruby/object:Gem::Dependency
288
339
  name: rdoc
289
340
  requirement: !ruby/object:Gem::Requirement
341
+ none: false
290
342
  requirements:
291
- - - '>='
343
+ - - ! '>='
292
344
  - !ruby/object:Gem::Version
293
345
  version: '0'
294
346
  type: :development
295
347
  prerelease: false
296
348
  version_requirements: !ruby/object:Gem::Requirement
349
+ none: false
297
350
  requirements:
298
- - - '>='
351
+ - - ! '>='
299
352
  - !ruby/object:Gem::Version
300
353
  version: '0'
301
354
  - !ruby/object:Gem::Dependency
302
355
  name: sdoc
303
356
  requirement: !ruby/object:Gem::Requirement
357
+ none: false
304
358
  requirements:
305
- - - '>='
359
+ - - ! '>='
306
360
  - !ruby/object:Gem::Version
307
361
  version: '0'
308
362
  type: :development
309
363
  prerelease: false
310
364
  version_requirements: !ruby/object:Gem::Requirement
365
+ none: false
311
366
  requirements:
312
- - - '>='
367
+ - - ! '>='
313
368
  - !ruby/object:Gem::Version
314
369
  version: '0'
315
370
  - !ruby/object:Gem::Dependency
316
371
  name: rake
317
372
  requirement: !ruby/object:Gem::Requirement
373
+ none: false
318
374
  requirements:
319
- - - '>='
375
+ - - ! '>='
320
376
  - !ruby/object:Gem::Version
321
377
  version: '0'
322
378
  type: :development
323
379
  prerelease: false
324
380
  version_requirements: !ruby/object:Gem::Requirement
381
+ none: false
325
382
  requirements:
326
- - - '>='
383
+ - - ! '>='
327
384
  - !ruby/object:Gem::Version
328
385
  version: '0'
329
386
  - !ruby/object:Gem::Dependency
330
387
  name: rack
331
388
  requirement: !ruby/object:Gem::Requirement
389
+ none: false
332
390
  requirements:
333
- - - '>='
391
+ - - ! '>='
334
392
  - !ruby/object:Gem::Version
335
393
  version: '0'
336
394
  type: :development
337
395
  prerelease: false
338
396
  version_requirements: !ruby/object:Gem::Requirement
397
+ none: false
339
398
  requirements:
340
- - - '>='
399
+ - - ! '>='
341
400
  - !ruby/object:Gem::Version
342
401
  version: '0'
343
402
  - !ruby/object:Gem::Dependency
344
403
  name: rspec_junit_formatter
345
404
  requirement: !ruby/object:Gem::Requirement
405
+ none: false
346
406
  requirements:
347
- - - '>='
407
+ - - ! '>='
348
408
  - !ruby/object:Gem::Version
349
409
  version: '0'
350
410
  type: :development
351
411
  prerelease: false
352
412
  version_requirements: !ruby/object:Gem::Requirement
413
+ none: false
353
414
  requirements:
354
- - - '>='
415
+ - - ! '>='
355
416
  - !ruby/object:Gem::Version
356
417
  version: '0'
357
418
  - !ruby/object:Gem::Dependency
358
419
  name: rspec-core
359
420
  requirement: !ruby/object:Gem::Requirement
421
+ none: false
360
422
  requirements:
361
423
  - - ~>
362
424
  - !ruby/object:Gem::Version
363
- version: 2.8.0
425
+ version: 2.12.0
364
426
  type: :development
365
427
  prerelease: false
366
428
  version_requirements: !ruby/object:Gem::Requirement
429
+ none: false
367
430
  requirements:
368
431
  - - ~>
369
432
  - !ruby/object:Gem::Version
370
- version: 2.8.0
433
+ version: 2.12.0
371
434
  - !ruby/object:Gem::Dependency
372
435
  name: rspec-expectations
373
436
  requirement: !ruby/object:Gem::Requirement
437
+ none: false
374
438
  requirements:
375
439
  - - ~>
376
440
  - !ruby/object:Gem::Version
377
- version: 2.8.0
441
+ version: 2.12.0
378
442
  type: :development
379
443
  prerelease: false
380
444
  version_requirements: !ruby/object:Gem::Requirement
445
+ none: false
381
446
  requirements:
382
447
  - - ~>
383
448
  - !ruby/object:Gem::Version
384
- version: 2.8.0
449
+ version: 2.12.0
385
450
  - !ruby/object:Gem::Dependency
386
451
  name: rspec-mocks
387
452
  requirement: !ruby/object:Gem::Requirement
453
+ none: false
388
454
  requirements:
389
455
  - - ~>
390
456
  - !ruby/object:Gem::Version
391
- version: 2.8.0
457
+ version: 2.12.0
392
458
  type: :development
393
459
  prerelease: false
394
460
  version_requirements: !ruby/object:Gem::Requirement
461
+ none: false
395
462
  requirements:
396
463
  - - ~>
397
464
  - !ruby/object:Gem::Version
398
- version: 2.8.0
465
+ version: 2.12.0
399
466
  description: A systems integration framework, built to bring the benefits of configuration
400
467
  management to your entire infrastructure.
401
468
  email: adam@opscode.com
@@ -713,6 +780,7 @@ files:
713
780
  - lib/chef/monkey_patches/regexp.rb
714
781
  - lib/chef/monkey_patches/string.rb
715
782
  - lib/chef/monkey_patches/tempfile.rb
783
+ - lib/chef/monkey_patches/uri.rb
716
784
  - lib/chef/nil_argument.rb
717
785
  - lib/chef/node/attribute.rb
718
786
  - lib/chef/node.rb
@@ -796,6 +864,7 @@ files:
796
864
  - lib/chef/provider/user/useradd.rb
797
865
  - lib/chef/provider/user/windows.rb
798
866
  - lib/chef/provider/user.rb
867
+ - lib/chef/provider/whyrun_safe_ruby_block.rb
799
868
  - lib/chef/provider.rb
800
869
  - lib/chef/providers.rb
801
870
  - lib/chef/recipe.rb
@@ -850,6 +919,7 @@ files:
850
919
  - lib/chef/resource/template.rb
851
920
  - lib/chef/resource/timestamped_deploy.rb
852
921
  - lib/chef/resource/user.rb
922
+ - lib/chef/resource/whyrun_safe_ruby_block.rb
853
923
  - lib/chef/resource/yum_package.rb
854
924
  - lib/chef/resource.rb
855
925
  - lib/chef/resource_collection/stepable_iterator.rb
@@ -1052,10 +1122,12 @@ files:
1052
1122
  - spec/functional/knife/cookbook_delete_spec.rb
1053
1123
  - spec/functional/knife/exec_spec.rb
1054
1124
  - spec/functional/knife/ssh_spec.rb
1125
+ - spec/functional/resource/base.rb
1055
1126
  - spec/functional/resource/cookbook_file_spec.rb
1056
1127
  - spec/functional/resource/deploy_revision_spec.rb
1057
1128
  - spec/functional/resource/directory_spec.rb
1058
1129
  - spec/functional/resource/file_spec.rb
1130
+ - spec/functional/resource/group_spec.rb
1059
1131
  - spec/functional/resource/link_spec.rb
1060
1132
  - spec/functional/resource/remote_directory_spec.rb
1061
1133
  - spec/functional/resource/remote_file_spec.rb
@@ -1205,6 +1277,7 @@ files:
1205
1277
  - spec/unit/mixin/template_spec.rb
1206
1278
  - spec/unit/mixin/xml_escape_spec.rb
1207
1279
  - spec/unit/monkey_patches/string_spec.rb
1280
+ - spec/unit/monkey_patches/uri_spec.rb
1208
1281
  - spec/unit/node/attribute_spec.rb
1209
1282
  - spec/unit/node_spec.rb
1210
1283
  - spec/unit/openid_registration_spec.rb
@@ -1282,6 +1355,7 @@ files:
1282
1355
  - spec/unit/provider/user/useradd_spec.rb
1283
1356
  - spec/unit/provider/user/windows_spec.rb
1284
1357
  - spec/unit/provider/user_spec.rb
1358
+ - spec/unit/provider/whyrun_safe_ruby_block_spec.rb
1285
1359
  - spec/unit/provider_spec.rb
1286
1360
  - spec/unit/recipe_spec.rb
1287
1361
  - spec/unit/resource/apt_package_spec.rb
@@ -1369,26 +1443,27 @@ files:
1369
1443
  - bin/shef
1370
1444
  homepage: http://wiki.opscode.com/display/chef
1371
1445
  licenses: []
1372
- metadata: {}
1373
1446
  post_install_message:
1374
1447
  rdoc_options: []
1375
1448
  require_paths:
1376
1449
  - lib
1377
1450
  required_ruby_version: !ruby/object:Gem::Requirement
1451
+ none: false
1378
1452
  requirements:
1379
- - - '>='
1453
+ - - ! '>='
1380
1454
  - !ruby/object:Gem::Version
1381
1455
  version: '0'
1382
1456
  required_rubygems_version: !ruby/object:Gem::Requirement
1457
+ none: false
1383
1458
  requirements:
1384
- - - '>='
1459
+ - - ! '>'
1385
1460
  - !ruby/object:Gem::Version
1386
- version: '0'
1461
+ version: 1.3.1
1387
1462
  requirements: []
1388
1463
  rubyforge_project:
1389
- rubygems_version: 2.1.5
1464
+ rubygems_version: 1.8.23
1390
1465
  signing_key:
1391
- specification_version: 4
1466
+ specification_version: 3
1392
1467
  summary: A systems integration framework, built to bring the benefits of configuration
1393
1468
  management to your entire infrastructure.
1394
1469
  test_files: []