Skip to content

Commit 9a69d3f

Browse files
author
Nuo Yan
committed
fixing the api_client chef library's save method to expect 409 instead of 403 when client already exists, and also fixing the chef_server_rest method in role, node, api_client, data_bag, data_bag_item
1 parent f3287fc commit 9a69d3f

8 files changed

Lines changed: 60 additions & 33 deletions

File tree

chef-server-webui/app/controllers/nodes.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,11 @@ def create
118118

119119
def update
120120
begin
121-
@node = Chef::Node.load(params[:id])
122-
rescue Net::HTTPServerException => e
123-
raise NotFound, "Cannot load node #{params[:id]}"
124-
end
125-
126-
begin
121+
begin
122+
@node = Chef::Node.load(params[:id])
123+
rescue Net::HTTPServerException => e
124+
raise NotFound, "Cannot load node #{params[:id]}"
125+
end
127126
@node.run_list.reset!(params[:for_node] ? params[:for_node] : [])
128127
@node.attribute = JSON.parse(params[:attributes])
129128
@node.save

chef-server-webui/app/controllers/roles.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,11 @@ def create
122122
# PUT /roles/:id
123123
def update
124124
begin
125-
@role = Chef::Role.load(params[:id])
126-
rescue Net::HTTPServerException => e
127-
raise NotFound, "Cannot load role #{params[:id]}"
128-
end
129-
130-
begin
125+
begin
126+
@role = Chef::Role.load(params[:id])
127+
rescue Net::HTTPServerException => e
128+
raise NotFound, "Cannot load role #{params[:id]}"
129+
end
131130
@role.run_list(params[:for_role] ? params[:for_role] : [])
132131
@role.description(params[:description]) if params[:description] != ''
133132
@role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''

chef/lib/chef/api_client.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ def initialize(couchdb=nil)
7070
@admin = false
7171
@couchdb = (couchdb || Chef::CouchDB.new)
7272
end
73+
74+
def chef_server_rest
75+
self.class.chef_server_rest
76+
end
77+
78+
def self.chef_server_rest
79+
Chef::REST.new(Chef::Config[:chef_server_url])
80+
end
7381

7482
# Gets or sets the client name.
7583
#
@@ -181,7 +189,7 @@ def self.list(inflate=false)
181189
end
182190
response
183191
else
184-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("clients")
192+
chef_server_rest.get_rest("clients")
185193
end
186194
end
187195

@@ -195,7 +203,7 @@ def self.cdb_load(name, couchdb=nil)
195203

196204
# Load a client by name via the API
197205
def self.load(name)
198-
response = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("clients/#{name}")
206+
response = chef_server_rest.get_rest("clients/#{name}")
199207
if response.kind_of?(Chef::ApiClient)
200208
response
201209
else
@@ -215,7 +223,7 @@ def cdb_destroy
215223

216224
# Remove this client via the REST API
217225
def destroy
218-
Chef::REST.new(Chef::Config[:chef_server_url]).delete_rest("clients/#{@name}")
226+
chef_server_rest.delete_rest("clients/#{@name}")
219227
end
220228

221229
# Save this client to the CouchDB
@@ -228,14 +236,14 @@ def save(new_key=false, validation=false)
228236
if validation
229237
r = Chef::REST.new(Chef::Config[:chef_server_url], Chef::Config[:validation_client_name], Chef::Config[:validation_key])
230238
else
231-
r = Chef::REST.new(Chef::Config[:chef_server_url])
239+
r = chef_server_rest
232240
end
233241
# First, try and create a new registration
234242
begin
235243
r.post_rest("clients", {:name => self.name, :admin => self.admin })
236244
rescue Net::HTTPServerException => e
237245
# If that fails, go ahead and try and update it
238-
if e.response.code == "403"
246+
if e.response.code == "409"
239247
r.put_rest("clients/#{name}", { :name => self.name, :admin => self.admin, :private_key => new_key })
240248
else
241249
raise e
@@ -245,7 +253,7 @@ def save(new_key=false, validation=false)
245253

246254
# Create the client via the REST API
247255
def create
248-
Chef::REST.new(Chef::Config[:chef_server_url]).post_rest("clients", self)
256+
chef_server_rest.post_rest("clients", self)
249257
end
250258

251259
# Set up our CouchDB design document

chef/lib/chef/data_bag.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ def to_json(*a)
102102
end
103103

104104
def chef_server_rest
105+
self.class.chef_server_rest
106+
end
107+
108+
def self.chef_server_rest
105109
Chef::REST.new(Chef::Config[:chef_server_url])
106110
end
107111

@@ -131,7 +135,7 @@ def self.list(inflate=false)
131135
end
132136
response
133137
else
134-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data")
138+
chef_server_rest.get_rest("data")
135139
end
136140
end
137141

@@ -142,7 +146,7 @@ def self.cdb_load(name, couchdb=nil)
142146

143147
# Load a Data Bag by name via the RESTful API
144148
def self.load(name)
145-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{name}")
149+
chef_server_rest.get_rest("data/#{name}")
146150
end
147151

148152
# Remove this Data Bag from CouchDB

chef/lib/chef/data_bag_item.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ def initialize(couchdb=nil)
7171
end
7272

7373
def chef_server_rest
74-
Chef::REST.new(Chef::Config[:chef_server_url])
74+
self.class.chef_server_rest
75+
end
76+
77+
def self.chef_server_rest
78+
Chef::REST.new(Chef::Config[:chef_server_url])
7579
end
7680

7781
def raw_data
@@ -163,7 +167,7 @@ def self.cdb_load(data_bag, name, couchdb=nil)
163167

164168
# Load a Data Bag Item by name via RESTful API
165169
def self.load(data_bag, name)
166-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{data_bag}/#{name}")
170+
chef_server_rest.get_rest("data/#{data_bag}/#{name}")
167171
end
168172

169173
# Remove this Data Bag Item from CouchDB

chef/lib/chef/node.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,11 @@ def couchdb_id=(value)
153153
end
154154

155155
def chef_server_rest
156-
Chef::REST.new(Chef::Config[:chef_server_url])
156+
self.class.chef_server_rest
157+
end
158+
159+
def self.chef_server_rest
160+
Chef::REST.new(Chef::Config[:chef_server_url])
157161
end
158162

159163
# Find a recipe for this Chef::Node by fqdn. Will search first for
@@ -356,7 +360,7 @@ def self.list(inflate=false)
356360
end
357361
response
358362
else
359-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("nodes")
363+
chef_server_rest.get_rest("nodes")
360364
end
361365
end
362366

@@ -375,7 +379,7 @@ def self.exists?(nodename, couchdb)
375379

376380
# Load a node by name
377381
def self.load(name)
378-
Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("nodes/#{name}")
382+
chef_server_rest.get_rest("nodes/#{name}")
379383
end
380384

381385
# Remove this node from the CouchDB

chef/lib/chef/role.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ def couchdb_id=(value)
8080
end
8181

8282
def chef_server_rest
83+
self.class.chef_server_rest
84+
end
85+
86+
def self.chef_server_rest
8387
Chef::REST.new(Chef::Config[:chef_server_url])
8488
end
8589

chef/lib/chef/webui_user.rb

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@ def name=(n)
7272
@name = n.gsub(/\./, '_')
7373
end
7474

75+
def chef_server_rest
76+
self.class.chef_server_rest
77+
end
78+
79+
def self.chef_server_rest
80+
Chef::REST.new(Chef::Config[:chef_server_url])
81+
end
82+
7583
def admin?
7684
admin
7785
end
@@ -130,7 +138,7 @@ def self.cdb_list(inflate=false)
130138
end
131139

132140
def self.list(inflate=false)
133-
r = Chef::REST.new(Chef::Config[:chef_server_url])
141+
r = chef_server_rest
134142
if inflate
135143
response = Hash.new
136144
Chef::Search::Query.new.search(:user) do |n|
@@ -149,8 +157,7 @@ def self.cdb_load(name)
149157

150158
# Load a User by name
151159
def self.load(name)
152-
r = Chef::REST.new(Chef::Config[:chef_server_url])
153-
r.get_rest("users/#{name}")
160+
chef_server_rest.get_rest("users/#{name}")
154161
end
155162

156163

@@ -166,8 +173,7 @@ def cdb_destroy
166173

167174
# Remove this WebUIUser via the REST API
168175
def destroy
169-
r = Chef::REST.new(Chef::Config[:chef_server_url])
170-
r.delete_rest("users/#{@name}")
176+
chef_server_rest.delete_rest("users/#{@name}")
171177
end
172178

173179
# Save this WebUIUser to the CouchDB
@@ -178,7 +184,7 @@ def cdb_save
178184

179185
# Save this WebUIUser via the REST API
180186
def save
181-
r = Chef::REST.new(Chef::Config[:chef_server_url])
187+
r = chef_server_rest
182188
begin
183189
r.put_rest("users/#{@name}", self)
184190
rescue Net::HTTPServerException => e
@@ -193,8 +199,7 @@ def save
193199

194200
# Create the WebUIUser via the REST API
195201
def create
196-
r = Chef::REST.new(Chef::Config[:chef_server_url])
197-
r.post_rest("users", self)
202+
chef_server_rest.post_rest("users", self)
198203
self
199204
end
200205

0 commit comments

Comments
 (0)