chef-server-api 0.10.8 → 0.10.10.beta.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/app/controllers/cookbooks.rb +6 -2
- data/lib/chef-server-api/version.rb +1 -1
- data/spec/spec_helper.rb +13 -0
- data/spec/unit/cookbooks_controller_spec.rb +44 -0
- metadata +29 -78
@@ -162,13 +162,17 @@ class Cookbooks < Application
|
|
162
162
|
begin
|
163
163
|
cookbook = Chef::CookbookVersion.cdb_load(cookbook_name, cookbook_version)
|
164
164
|
cookbook.manifest = params['inflated_object'].manifest
|
165
|
+
new_cookbook = false
|
165
166
|
rescue Chef::Exceptions::CouchDBNotFound => e
|
166
167
|
Chef::Log.debug("Cookbook #{cookbook_name} version #{cookbook_version} does not exist")
|
167
168
|
cookbook = params['inflated_object']
|
169
|
+
new_cookbook = true
|
168
170
|
end
|
169
171
|
|
170
|
-
|
171
|
-
|
172
|
+
unless new_cookbook
|
173
|
+
if cookbook.frozen_version? && params[:force].nil?
|
174
|
+
raise Conflict, "The cookbook #{cookbook.name} at version #{cookbook.version} is frozen. Use the 'force' option to override."
|
175
|
+
end
|
172
176
|
end
|
173
177
|
|
174
178
|
cookbook.freeze_version if params["inflated_object"].frozen_version?
|
data/spec/spec_helper.rb
CHANGED
@@ -49,6 +49,19 @@ def post_json(path, post_body, env = {}, &block)
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def put_json(path, put_body, env = {}, &block)
|
53
|
+
request_json("PUT", path, {}, env) do |controller|
|
54
|
+
# Merb FakeRequest allows me no way to pass JSON across the
|
55
|
+
# FakeRequest/StringIO boundary, so we hack it here.
|
56
|
+
if put_body.is_a?(Hash)
|
57
|
+
controller.params.merge!(put_body)
|
58
|
+
else
|
59
|
+
controller.params['inflated_object'] = put_body
|
60
|
+
end
|
61
|
+
block.call if block
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
52
65
|
# Make an HTTP call of <method>, assign the accept header to
|
53
66
|
# application/json, and return the JSON-parsed output.
|
54
67
|
#
|
@@ -98,4 +98,48 @@ describe "Cookbooks Controller" do
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
101
|
+
|
102
|
+
describe "when uploading a cookbook" do
|
103
|
+
before do
|
104
|
+
@cookbook = make_cookbook("cookbook1", "1.0.0")
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "and the cookbook is new" do
|
108
|
+
it "should upload a standard cookbook" do
|
109
|
+
Chef::CookbookVersion.stub!(:cdb_load).and_raise(Chef::Exceptions::CouchDBNotFound)
|
110
|
+
@cookbook.should_receive(:cdb_save).and_return(true)
|
111
|
+
response = put_json("/cookbooks/#{@cookbook.name}/#{@cookbook.version}", @cookbook)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should upload a frozen cookbook" do
|
115
|
+
@cookbook.freeze_version
|
116
|
+
Chef::CookbookVersion.stub!(:cdb_load).and_raise(Chef::Exceptions::CouchDBNotFound)
|
117
|
+
@cookbook.should_receive(:cdb_save).and_return(true)
|
118
|
+
response = put_json("/#{@cookbook.save_url}", @cookbook)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "and the cookbook already exists" do
|
123
|
+
it "should overwrite the existing version" do
|
124
|
+
Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
|
125
|
+
@cookbook.should_receive(:cdb_save).and_return(true)
|
126
|
+
response = put_json("/#{@cookbook.save_url}", @cookbook)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should not overwrite a frozen version" do
|
130
|
+
@cookbook.freeze_version
|
131
|
+
Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
|
132
|
+
lambda do
|
133
|
+
put_json("/#{@cookbook.save_url}", @cookbook)
|
134
|
+
end.should raise_error(Merb::ControllerExceptions::Conflict, /The cookbook (\S+) at version (\S+) is frozen/)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should overwrite a frozen version if forced" do
|
138
|
+
@cookbook.freeze_version
|
139
|
+
Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
|
140
|
+
@cookbook.should_receive(:cdb_save).and_return(true)
|
141
|
+
response = put_json("/#{@cookbook.force_save_url}", @cookbook)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
101
145
|
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-server-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 10
|
9
|
-
- 8
|
10
|
-
version: 0.10.8
|
4
|
+
prerelease: 8
|
5
|
+
version: 0.10.10.beta.1
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Opscode
|
@@ -15,134 +10,96 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
13
|
+
date: 2012-04-06 00:00:00 Z
|
19
14
|
dependencies:
|
20
15
|
- !ruby/object:Gem::Dependency
|
16
|
+
name: merb-core
|
21
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
22
18
|
none: false
|
23
19
|
requirements:
|
24
20
|
- - ~>
|
25
21
|
- !ruby/object:Gem::Version
|
26
|
-
hash: 19
|
27
|
-
segments:
|
28
|
-
- 1
|
29
|
-
- 1
|
30
|
-
- 0
|
31
22
|
version: 1.1.0
|
32
|
-
version_requirements: *id001
|
33
|
-
name: merb-core
|
34
|
-
prerelease: false
|
35
23
|
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *id001
|
36
26
|
- !ruby/object:Gem::Dependency
|
27
|
+
name: merb-assets
|
37
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
29
|
none: false
|
39
30
|
requirements:
|
40
31
|
- - ~>
|
41
32
|
- !ruby/object:Gem::Version
|
42
|
-
hash: 19
|
43
|
-
segments:
|
44
|
-
- 1
|
45
|
-
- 1
|
46
|
-
- 0
|
47
33
|
version: 1.1.0
|
48
|
-
version_requirements: *id002
|
49
|
-
name: merb-assets
|
50
|
-
prerelease: false
|
51
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *id002
|
52
37
|
- !ruby/object:Gem::Dependency
|
38
|
+
name: merb-helpers
|
53
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
40
|
none: false
|
55
41
|
requirements:
|
56
42
|
- - ~>
|
57
43
|
- !ruby/object:Gem::Version
|
58
|
-
hash: 19
|
59
|
-
segments:
|
60
|
-
- 1
|
61
|
-
- 1
|
62
|
-
- 0
|
63
44
|
version: 1.1.0
|
64
|
-
version_requirements: *id003
|
65
|
-
name: merb-helpers
|
66
|
-
prerelease: false
|
67
45
|
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id003
|
68
48
|
- !ruby/object:Gem::Dependency
|
49
|
+
name: merb-param-protection
|
69
50
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
51
|
none: false
|
71
52
|
requirements:
|
72
53
|
- - ~>
|
73
54
|
- !ruby/object:Gem::Version
|
74
|
-
hash: 19
|
75
|
-
segments:
|
76
|
-
- 1
|
77
|
-
- 1
|
78
|
-
- 0
|
79
55
|
version: 1.1.0
|
80
|
-
version_requirements: *id004
|
81
|
-
name: merb-param-protection
|
82
|
-
prerelease: false
|
83
56
|
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id004
|
84
59
|
- !ruby/object:Gem::Dependency
|
60
|
+
name: mixlib-authentication
|
85
61
|
requirement: &id005 !ruby/object:Gem::Requirement
|
86
62
|
none: false
|
87
63
|
requirements:
|
88
64
|
- - ">="
|
89
65
|
- !ruby/object:Gem::Version
|
90
|
-
hash: 21
|
91
|
-
segments:
|
92
|
-
- 1
|
93
|
-
- 1
|
94
|
-
- 3
|
95
66
|
version: 1.1.3
|
96
|
-
version_requirements: *id005
|
97
|
-
name: mixlib-authentication
|
98
|
-
prerelease: false
|
99
67
|
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *id005
|
100
70
|
- !ruby/object:Gem::Dependency
|
71
|
+
name: dep_selector
|
101
72
|
requirement: &id006 !ruby/object:Gem::Requirement
|
102
73
|
none: false
|
103
74
|
requirements:
|
104
75
|
- - ">="
|
105
76
|
- !ruby/object:Gem::Version
|
106
|
-
hash: 25
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
- 0
|
110
|
-
- 3
|
111
77
|
version: 0.0.3
|
112
|
-
version_requirements: *id006
|
113
|
-
name: dep_selector
|
114
|
-
prerelease: false
|
115
78
|
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *id006
|
116
81
|
- !ruby/object:Gem::Dependency
|
82
|
+
name: uuidtools
|
117
83
|
requirement: &id007 !ruby/object:Gem::Requirement
|
118
84
|
none: false
|
119
85
|
requirements:
|
120
86
|
- - ~>
|
121
87
|
- !ruby/object:Gem::Version
|
122
|
-
hash: 9
|
123
|
-
segments:
|
124
|
-
- 2
|
125
|
-
- 1
|
126
|
-
- 1
|
127
88
|
version: 2.1.1
|
128
|
-
version_requirements: *id007
|
129
|
-
name: uuidtools
|
130
|
-
prerelease: false
|
131
89
|
type: :runtime
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *id007
|
132
92
|
- !ruby/object:Gem::Dependency
|
93
|
+
name: thin
|
133
94
|
requirement: &id008 !ruby/object:Gem::Requirement
|
134
95
|
none: false
|
135
96
|
requirements:
|
136
97
|
- - ">="
|
137
98
|
- !ruby/object:Gem::Version
|
138
|
-
hash: 3
|
139
|
-
segments:
|
140
|
-
- 0
|
141
99
|
version: "0"
|
142
|
-
version_requirements: *id008
|
143
|
-
name: thin
|
144
|
-
prerelease: false
|
145
100
|
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *id008
|
146
103
|
description: A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure.
|
147
104
|
email: chef@opscode.com
|
148
105
|
executables:
|
@@ -224,19 +181,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
224
181
|
requirements:
|
225
182
|
- - ">="
|
226
183
|
- !ruby/object:Gem::Version
|
227
|
-
hash: 3
|
228
|
-
segments:
|
229
|
-
- 0
|
230
184
|
version: "0"
|
231
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
186
|
none: false
|
233
187
|
requirements:
|
234
|
-
- - "
|
188
|
+
- - ">"
|
235
189
|
- !ruby/object:Gem::Version
|
236
|
-
|
237
|
-
segments:
|
238
|
-
- 0
|
239
|
-
version: "0"
|
190
|
+
version: 1.3.1
|
240
191
|
requirements: []
|
241
192
|
|
242
193
|
rubyforge_project:
|