chef-api 0.9.0 → 0.10.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef-api.rb +19 -20
  3. data/lib/chef-api/aclable.rb +35 -0
  4. data/lib/chef-api/authentication.rb +23 -25
  5. data/lib/chef-api/configurable.rb +14 -14
  6. data/lib/chef-api/connection.rb +69 -68
  7. data/lib/chef-api/defaults.rb +25 -24
  8. data/lib/chef-api/error_collection.rb +1 -1
  9. data/lib/chef-api/errors.rb +3 -3
  10. data/lib/chef-api/log.rb +7 -0
  11. data/lib/chef-api/multipart.rb +17 -17
  12. data/lib/chef-api/resource.rb +17 -15
  13. data/lib/chef-api/resources/base.rb +25 -23
  14. data/lib/chef-api/resources/client.rb +5 -3
  15. data/lib/chef-api/resources/collection_proxy.rb +4 -3
  16. data/lib/chef-api/resources/cookbook.rb +2 -2
  17. data/lib/chef-api/resources/cookbook_version.rb +1 -1
  18. data/lib/chef-api/resources/data_bag.rb +4 -4
  19. data/lib/chef-api/resources/data_bag_item.rb +2 -3
  20. data/lib/chef-api/resources/environment.rb +1 -1
  21. data/lib/chef-api/resources/group.rb +15 -0
  22. data/lib/chef-api/resources/node.rb +11 -8
  23. data/lib/chef-api/resources/organization.rb +2 -2
  24. data/lib/chef-api/resources/partial_search.rb +4 -4
  25. data/lib/chef-api/resources/principal.rb +1 -1
  26. data/lib/chef-api/resources/role.rb +2 -1
  27. data/lib/chef-api/resources/search.rb +6 -6
  28. data/lib/chef-api/resources/user.rb +5 -3
  29. data/lib/chef-api/util.rb +8 -8
  30. data/lib/chef-api/validator.rb +3 -3
  31. data/lib/chef-api/validators/base.rb +3 -3
  32. data/lib/chef-api/validators/required.rb +1 -1
  33. data/lib/chef-api/validators/type.rb +1 -1
  34. data/lib/chef-api/version.rb +1 -1
  35. data/templates/errors/abstract_method.erb +5 -0
  36. data/templates/errors/cannot_regenerate_key.erb +1 -0
  37. data/templates/errors/chef_api_error.erb +1 -0
  38. data/templates/errors/file_not_found.erb +1 -0
  39. data/templates/errors/http_bad_request.erb +3 -0
  40. data/templates/errors/http_forbidden_request.erb +3 -0
  41. data/templates/errors/http_gateway_timeout.erb +3 -0
  42. data/templates/errors/http_method_not_allowed.erb +3 -0
  43. data/templates/errors/http_not_acceptable.erb +3 -0
  44. data/templates/errors/http_not_found.erb +3 -0
  45. data/templates/errors/http_server_unavailable.erb +1 -0
  46. data/templates/errors/http_unauthorized_request.erb +3 -0
  47. data/templates/errors/insufficient_file_permissions.erb +1 -0
  48. data/templates/errors/invalid_resource.erb +1 -0
  49. data/templates/errors/invalid_validator.erb +1 -0
  50. data/templates/errors/missing_url_parameter.erb +1 -0
  51. data/templates/errors/not_a_directory.erb +1 -0
  52. data/templates/errors/resource_already_exists.erb +1 -0
  53. data/templates/errors/resource_not_found.erb +1 -0
  54. data/templates/errors/resource_not_mutable.erb +1 -0
  55. data/templates/errors/unknown_attribute.erb +1 -0
  56. metadata +44 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee8604bcf5bcfe321caabd69eaf49850a1cb3a2a2e64f4ba3f1f9f19dbe23b70
4
- data.tar.gz: 792c8bf1f685f45317e80b13b389fd5898e57db767f447bacc5bf5711a47d3af
3
+ metadata.gz: 9190cfe613a46da5a280ffc69ba7f58a0a955a354e3272c166f8e76c8bbbbc49
4
+ data.tar.gz: a8851cab2284d7935300c90883eb27ffc3c88673cb1d3566528fb37167a120de
5
5
  SHA512:
6
- metadata.gz: e0ec7e3b00bbfee5ccb9774803f1db57b8c326e0ba4f63d61e4dceebadd921ff6281f560873ef4a31372e0158fdda4173b0380162e16014171bbf817eaf6d7db
7
- data.tar.gz: a346455a325f6454efd34a6b4fe370e8f37734886e8ad85f00118cc67467c0d473a3140b87d1ca86f2fa9c003159679b5debd5a3527a6e8fdb9ab65d89a7e8ba
6
+ metadata.gz: 5275c0487d47da3cb81c1a9eff0bb07cdd5a71fe24534dff2b5e78e547db9c8c2e65b63fc817b0041f952770ea10a97e5438083829ed4c0a76439a37b225970e
7
+ data.tar.gz: bf8f4fb60b9c8da3a4071da529f4b54093bf73c80d0e806594f6ed741f4d8df8e2dc6ddd69bcc4fae9779c65a2d4f305d73919fc19dbcd7d19a1343cff114ad1
@@ -1,21 +1,21 @@
1
- require 'json'
2
- require 'logify'
3
- require 'pathname'
4
- require 'chef-api/version'
1
+ require "json" unless defined?(JSON)
2
+ require "pathname" unless defined?(Pathname)
3
+ require_relative "chef-api/log"
4
+ require_relative "chef-api/version"
5
5
 
6
6
  module ChefAPI
7
- autoload :Authentication, 'chef-api/authentication'
8
- autoload :Boolean, 'chef-api/boolean'
9
- autoload :Configurable, 'chef-api/configurable'
10
- autoload :Connection, 'chef-api/connection'
11
- autoload :Defaults, 'chef-api/defaults'
12
- autoload :Error, 'chef-api/errors'
13
- autoload :ErrorCollection, 'chef-api/error_collection'
14
- autoload :Multipart, 'chef-api/multipart'
15
- autoload :Resource, 'chef-api/resource'
16
- autoload :Schema, 'chef-api/schema'
17
- autoload :Util, 'chef-api/util'
18
- autoload :Validator, 'chef-api/validator'
7
+ autoload :Authentication, "chef-api/authentication"
8
+ autoload :Boolean, "chef-api/boolean"
9
+ autoload :Configurable, "chef-api/configurable"
10
+ autoload :Connection, "chef-api/connection"
11
+ autoload :Defaults, "chef-api/defaults"
12
+ autoload :Error, "chef-api/errors"
13
+ autoload :ErrorCollection, "chef-api/error_collection"
14
+ autoload :Multipart, "chef-api/multipart"
15
+ autoload :Resource, "chef-api/resource"
16
+ autoload :Schema, "chef-api/schema"
17
+ autoload :Util, "chef-api/util"
18
+ autoload :Validator, "chef-api/validator"
19
19
 
20
20
  #
21
21
  # @todo Document this and why it's important
@@ -35,7 +35,7 @@ module ChefAPI
35
35
  # the log level to set
36
36
  #
37
37
  def log_level=(level)
38
- Logify.level = level
38
+ ChefAPI::Log.level = level
39
39
  end
40
40
 
41
41
  #
@@ -44,7 +44,7 @@ module ChefAPI
44
44
  # @return [Symbol]
45
45
  #
46
46
  def log_level
47
- Logify.level
47
+ ChefAPI::Log.level
48
48
  end
49
49
 
50
50
  #
@@ -54,7 +54,7 @@ module ChefAPI
54
54
  # @return [Pathname]
55
55
  #
56
56
  def root
57
- @root ||= Pathname.new(File.expand_path('../../', __FILE__))
57
+ @root ||= Pathname.new(File.expand_path("../../", __FILE__))
58
58
  end
59
59
 
60
60
  #
@@ -93,4 +93,3 @@ end
93
93
 
94
94
  # Load the initial default values
95
95
  ChefAPI.setup
96
-
@@ -0,0 +1,35 @@
1
+ module ChefAPI
2
+ module AclAble
3
+ def acl_path
4
+ resource_path + "/_acl"
5
+ end
6
+
7
+ def load_acl
8
+ data = self.class.connection.get(acl_path)
9
+ # make deep copy
10
+ @orig_acl_data = Marshal.load(Marshal.dump(data))
11
+ data.freeze
12
+ @acl = data
13
+ end
14
+
15
+ def acl
16
+ unless @acl
17
+ load_acl
18
+ end
19
+ @acl
20
+ end
21
+
22
+ def save!
23
+ super
24
+ if @acl != @orig_acl_data
25
+ %w{create update grant read delete}.each { |action|
26
+ if @acl[action] != @orig_acl_data[action]
27
+ url = "#{acl_path}/#{action}"
28
+ self.class.connection.put(url, { action => @acl[action] }.to_json)
29
+ end
30
+ }
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -1,7 +1,7 @@
1
- require 'base64'
2
- require 'digest'
3
- require 'openssl'
4
- require 'time'
1
+ require "base64" unless defined?(Base64)
2
+ require "digest" unless defined?(Digest)
3
+ require "openssl" unless defined?(OpenSSL)
4
+ require "time" unless defined?(Time)
5
5
 
6
6
  #
7
7
  # DEBUG steps:
@@ -11,20 +11,19 @@ require 'time'
11
11
 
12
12
  module ChefAPI
13
13
  class Authentication
14
- include Logify
15
14
 
16
15
  # @todo: Enable this in the future when Mixlib::Authentication supports
17
16
  # signing the full request body instead of just the uploaded file parameter.
18
17
  SIGN_FULL_BODY = false
19
18
 
20
- SIGNATURE = 'algorithm=sha1;version=1.0;'.freeze
19
+ SIGNATURE = "algorithm=sha1;version=1.0;".freeze
21
20
 
22
21
  # Headers
23
- X_OPS_SIGN = 'X-Ops-Sign'.freeze
24
- X_OPS_USERID = 'X-Ops-Userid'.freeze
25
- X_OPS_TIMESTAMP = 'X-Ops-Timestamp'.freeze
26
- X_OPS_CONTENT_HASH = 'X-Ops-Content-Hash'.freeze
27
- X_OPS_AUTHORIZATION = 'X-Ops-Authorization'.freeze
22
+ X_OPS_SIGN = "X-Ops-Sign".freeze
23
+ X_OPS_USERID = "X-Ops-Userid".freeze
24
+ X_OPS_TIMESTAMP = "X-Ops-Timestamp".freeze
25
+ X_OPS_CONTENT_HASH = "X-Ops-Content-Hash".freeze
26
+ X_OPS_AUTHORIZATION = "X-Ops-Authorization".freeze
28
27
 
29
28
  class << self
30
29
  #
@@ -96,9 +95,9 @@ module ChefAPI
96
95
  #
97
96
  def headers
98
97
  {
99
- X_OPS_SIGN => SIGNATURE,
100
- X_OPS_USERID => @user,
101
- X_OPS_TIMESTAMP => canonical_timestamp,
98
+ X_OPS_SIGN => SIGNATURE,
99
+ X_OPS_USERID => @user,
100
+ X_OPS_TIMESTAMP => canonical_timestamp,
102
101
  X_OPS_CONTENT_HASH => content_hash,
103
102
  }.merge(signature_lines)
104
103
  end
@@ -114,7 +113,7 @@ module ChefAPI
114
113
  return @content_hash if @content_hash
115
114
 
116
115
  if SIGN_FULL_BODY
117
- @content_hash = hash(@body || '').chomp
116
+ @content_hash = hash(@body || "").chomp
118
117
  else
119
118
  if @body.is_a?(Multipart::MultiIO)
120
119
  filepart = @body.ios.find { |io| io.is_a?(Multipart::MultiIO) }
@@ -122,7 +121,7 @@ module ChefAPI
122
121
 
123
122
  @content_hash = hash(file).chomp
124
123
  else
125
- @content_hash = hash(@body || '').chomp
124
+ @content_hash = hash(@body || "").chomp
126
125
  end
127
126
  end
128
127
 
@@ -148,29 +147,28 @@ module ChefAPI
148
147
  def canonical_key
149
148
  return @canonical_key if @canonical_key
150
149
 
151
- log.info "Parsing private key..."
150
+ ChefAPI::Log.info "Parsing private key..."
152
151
 
153
152
  if @key.nil?
154
- log.warn "No private key given!"
155
- raise 'No private key given!'
153
+ ChefAPI::Log.warn "No private key given!"
154
+ raise "No private key given!"
156
155
  end
157
156
 
158
157
  if @key.is_a?(OpenSSL::PKey::RSA)
159
- log.debug "Detected private key is an OpenSSL Ruby object"
158
+ ChefAPI::Log.debug "Detected private key is an OpenSSL Ruby object"
160
159
  @canonical_key = @key
161
- elsif @key =~ /(.+)\.pem$/ || File.exists?(File.expand_path(@key))
162
- log.debug "Detected private key is the path to a file"
160
+ elsif @key =~ /(.+)\.pem$/ || File.exist?(File.expand_path(@key))
161
+ ChefAPI::Log.debug "Detected private key is the path to a file"
163
162
  contents = File.read(File.expand_path(@key))
164
163
  @canonical_key = OpenSSL::PKey::RSA.new(contents)
165
164
  else
166
- log.debug "Detected private key was the literal string key"
165
+ ChefAPI::Log.debug "Detected private key was the literal string key"
167
166
  @canonical_key = OpenSSL::PKey::RSA.new(@key)
168
167
  end
169
168
 
170
169
  @canonical_key
171
170
  end
172
171
 
173
-
174
172
  #
175
173
  # The canonical path, with duplicate and trailing slashes removed. This
176
174
  # value is then hashed.
@@ -181,7 +179,7 @@ module ChefAPI
181
179
  # @return [String]
182
180
  #
183
181
  def canonical_path
184
- @canonical_path ||= hash(@path.squeeze('/').gsub(/(\/)+$/,'')).chomp
182
+ @canonical_path ||= hash(@path.squeeze("/").gsub(%r{(/)+$}, "")).chomp
185
183
  end
186
184
 
187
185
  #
@@ -11,20 +11,20 @@ module ChefAPI
11
11
  # @return [Array<Symbol>]
12
12
  #
13
13
  def keys
14
- @keys ||= [
15
- :endpoint,
16
- :flavor,
17
- :client,
18
- :key,
19
- :proxy_address,
20
- :proxy_password,
21
- :proxy_port,
22
- :proxy_username,
23
- :ssl_pem_file,
24
- :ssl_verify,
25
- :user_agent,
26
- :read_timeout,
27
- ]
14
+ @keys ||= %i{
15
+ endpoint
16
+ flavor
17
+ client
18
+ key
19
+ proxy_address
20
+ proxy_password
21
+ proxy_port
22
+ proxy_username
23
+ ssl_pem_file
24
+ ssl_verify
25
+ user_agent
26
+ read_timeout
27
+ }
28
28
  end
29
29
  end
30
30
 
@@ -1,7 +1,7 @@
1
- require 'net/http'
2
- require 'net/https'
3
- require 'openssl'
4
- require 'uri'
1
+ require "net/http" unless defined?(Net::HTTP)
2
+ require "openssl" unless defined?(OpenSSL)
3
+ require "uri" unless defined?(URI)
4
+ require "cgi" unless defined?(CGI)
5
5
 
6
6
  module ChefAPI
7
7
  #
@@ -34,20 +34,21 @@ module ChefAPI
34
34
  end
35
35
  end
36
36
 
37
- include Logify
38
37
  include ChefAPI::Configurable
39
38
 
40
- proxy :clients, 'Resource::Client'
41
- proxy :cookbooks, 'Resource::Cookbook'
42
- proxy :data_bags, 'Resource::DataBag'
43
- proxy :environments, 'Resource::Environment'
44
- proxy :nodes, 'Resource::Node'
45
- proxy :partial_search, 'Resource::PartialSearch'
46
- proxy :principals, 'Resource::Principal'
47
- proxy :roles, 'Resource::Role'
48
- proxy :search, 'Resource::Search'
49
- proxy :users, 'Resource::User'
50
- proxy :organizations, 'Resource::Organization'
39
+ proxy :clients, "Resource::Client"
40
+ proxy :cookbooks, "Resource::Cookbook"
41
+ proxy :data_bags, "Resource::DataBag"
42
+ proxy :data_bag_item, "Resource::DataBagItem"
43
+ proxy :environments, "Resource::Environment"
44
+ proxy :groups, "Resource::Group"
45
+ proxy :nodes, "Resource::Node"
46
+ proxy :partial_search, "Resource::PartialSearch"
47
+ proxy :principals, "Resource::Principal"
48
+ proxy :roles, "Resource::Role"
49
+ proxy :search, "Resource::Search"
50
+ proxy :users, "Resource::User"
51
+ proxy :organizations, "Resource::Organization"
51
52
 
52
53
  #
53
54
  # Create a new ChefAPI Connection with the given options. Any options
@@ -73,9 +74,9 @@ module ChefAPI
73
74
  # Use any options given, but fall back to the defaults set on the module
74
75
  ChefAPI::Configurable.keys.each do |key|
75
76
  value = if options[key].nil?
76
- ChefAPI.instance_variable_get(:"@#{key}")
77
- else
78
- options[key]
77
+ ChefAPI.instance_variable_get(:"@#{key}")
78
+ else
79
+ options[key]
79
80
  end
80
81
 
81
82
  instance_variable_set(:"@#{key}", value)
@@ -196,11 +197,11 @@ module ChefAPI
196
197
  # the response body
197
198
  #
198
199
  def request(verb, path, data = {}, params = {}, request_options = {})
199
- log.info "#{verb.to_s.upcase} #{path}..."
200
- log.debug "Chef flavor: #{flavor.inspect}"
200
+ ChefAPI::Log.info "#{verb.to_s.upcase} #{path}..."
201
+ ChefAPI::Log.debug "Chef flavor: #{flavor.inspect}"
201
202
 
202
203
  # Build the URI and request object from the given information
203
- if [:delete, :get].include?(verb)
204
+ if %i{delete get}.include?(verb)
204
205
  uri = build_uri(verb, path, data)
205
206
  else
206
207
  uri = build_uri(verb, path, params)
@@ -211,38 +212,38 @@ module ChefAPI
211
212
  add_request_headers(request)
212
213
 
213
214
  # Setup PATCH/POST/PUT
214
- if [:patch, :post, :put].include?(verb)
215
+ if %i{patch post put}.include?(verb)
215
216
  if data.respond_to?(:read)
216
- log.info "Detected file/io presence"
217
+ ChefAPI::Log.info "Detected file/io presence"
217
218
  request.body_stream = data
218
219
  elsif data.is_a?(Hash)
219
220
  # If any of the values in the hash are File-like, assume this is a
220
221
  # multi-part post
221
222
  if data.values.any? { |value| value.respond_to?(:read) }
222
- log.info "Detected multipart body"
223
+ ChefAPI::Log.info "Detected multipart body"
223
224
 
224
225
  multipart = Multipart::Body.new(data)
225
226
 
226
- log.debug "Content-Type: #{multipart.content_type}"
227
- log.debug "Content-Length: #{multipart.content_length}"
227
+ ChefAPI::Log.debug "Content-Type: #{multipart.content_type}"
228
+ ChefAPI::Log.debug "Content-Length: #{multipart.content_length}"
228
229
 
229
230
  request.content_length = multipart.content_length
230
231
  request.content_type = multipart.content_type
231
232
 
232
233
  request.body_stream = multipart.stream
233
234
  else
234
- log.info "Detected form data"
235
+ ChefAPI::Log.info "Detected form data"
235
236
  request.form_data = data
236
237
  end
237
238
  else
238
- log.info "Detected regular body"
239
+ ChefAPI::Log.info "Detected regular body"
239
240
  request.body = data
240
241
  end
241
242
  end
242
243
 
243
244
  # Sign the request
244
245
  if request_options[:sign] == false
245
- log.info "Skipping signed header authentication (user requested)..."
246
+ ChefAPI::Log.info "Skipping signed header authentication (user requested)..."
246
247
  else
247
248
  add_signing_headers(verb, uri.path, request)
248
249
  end
@@ -259,7 +260,7 @@ module ChefAPI
259
260
  connection.read_timeout = read_timeout if read_timeout
260
261
 
261
262
  # Apply SSL, if applicable
262
- if uri.scheme == 'https'
263
+ if uri.scheme == "https"
263
264
  # Turn on SSL
264
265
  connection.use_ssl = true
265
266
 
@@ -274,8 +275,8 @@ module ChefAPI
274
275
  # Naughty, naughty, naughty! Don't blame when when someone hops in
275
276
  # and executes a MITM attack!
276
277
  unless ssl_verify
277
- log.warn "Disabling SSL verification..."
278
- log.warn "Neither ChefAPI nor the maintainers are responsible for " \
278
+ ChefAPI::Log.warn "Disabling SSL verification..."
279
+ ChefAPI::Log.warn "Neither ChefAPI nor the maintainers are responsible for " \
279
280
  "damages incurred as a result of disabling SSL verification. " \
280
281
  "Please use this with extreme caution, or consider specifying " \
281
282
  "a custom certificate using `config.ssl_pem_file'."
@@ -288,13 +289,13 @@ module ChefAPI
288
289
  connection.start do |http|
289
290
  response = http.request(request)
290
291
 
291
- log.debug "Raw response:"
292
- log.debug response.body
292
+ ChefAPI::Log.debug "Raw response:"
293
+ ChefAPI::Log.debug response.body
293
294
 
294
295
  case response
295
296
  when Net::HTTPRedirection
296
- redirect = URI.parse(response['location']).to_s
297
- log.debug "Performing HTTP redirect to #{redirect}"
297
+ redirect = URI.parse(response["location"]).to_s
298
+ ChefAPI::Log.debug "Performing HTTP redirect to #{redirect}"
298
299
  request(verb, redirect, data)
299
300
  when Net::HTTPSuccess
300
301
  success(response)
@@ -303,7 +304,7 @@ module ChefAPI
303
304
  end
304
305
  end
305
306
  rescue SocketError, Errno::ECONNREFUSED, EOFError
306
- log.warn "Unable to reach the Chef Server"
307
+ ChefAPI::Log.warn "Unable to reach the Chef Server"
307
308
  raise Error::HTTPServerUnavailable.new
308
309
  end
309
310
 
@@ -326,14 +327,14 @@ module ChefAPI
326
327
  # @return [URI]
327
328
  #
328
329
  def build_uri(verb, path, params = {})
329
- log.info "Building URI..."
330
+ ChefAPI::Log.info "Building URI..."
330
331
 
331
332
  # Add any query string parameters
332
333
  if querystring = to_query_string(params)
333
- log.debug "Detected verb deserves a querystring"
334
- log.debug "Building querystring using #{params.inspect}"
335
- log.debug "Compiled querystring is #{querystring.inspect}"
336
- path = [path, querystring].compact.join('?')
334
+ ChefAPI::Log.debug "Detected verb deserves a querystring"
335
+ ChefAPI::Log.debug "Building querystring using #{params.inspect}"
336
+ ChefAPI::Log.debug "Compiled querystring is #{querystring.inspect}"
337
+ path = [path, querystring].compact.join("?")
337
338
  end
338
339
 
339
340
  # Parse the URI
@@ -341,8 +342,8 @@ module ChefAPI
341
342
 
342
343
  # Don't merge absolute URLs
343
344
  unless uri.absolute?
344
- log.debug "Detected URI is relative"
345
- log.debug "Appending #{path} to #{endpoint}"
345
+ ChefAPI::Log.debug "Detected URI is relative"
346
+ ChefAPI::Log.debug "Appending #{path} to #{endpoint}"
346
347
  uri = URI.parse(File.join(endpoint, path))
347
348
  end
348
349
 
@@ -375,8 +376,8 @@ module ChefAPI
375
376
  #
376
377
  def to_query_string(hash)
377
378
  hash.map do |key, value|
378
- "#{URI.escape(key.to_s)}=#{URI.escape(value.to_s)}"
379
- end.join('&')[/.+/]
379
+ "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}"
380
+ end.join("&")[/.+/]
380
381
  end
381
382
 
382
383
  private
@@ -393,15 +394,15 @@ module ChefAPI
393
394
  # the parsed response, as an object
394
395
  #
395
396
  def success(response)
396
- log.info "Parsing response as success..."
397
+ ChefAPI::Log.info "Parsing response as success..."
397
398
 
398
- case response['Content-Type']
399
+ case response["Content-Type"]
399
400
  when /json/
400
- log.debug "Detected response as JSON"
401
- log.debug "Parsing response body as JSON"
401
+ ChefAPI::Log.debug "Detected response as JSON"
402
+ ChefAPI::Log.debug "Parsing response body as JSON"
402
403
  JSON.parse(response.body)
403
404
  else
404
- log.debug "Detected response as text/plain"
405
+ ChefAPI::Log.debug "Detected response as text/plain"
405
406
  response.body
406
407
  end
407
408
  end
@@ -414,15 +415,15 @@ module ChefAPI
414
415
  # the response object from the request
415
416
  #
416
417
  def error(response)
417
- log.info "Parsing response as error..."
418
+ ChefAPI::Log.info "Parsing response as error..."
418
419
 
419
- case response['Content-Type']
420
+ case response["Content-Type"]
420
421
  when /json/
421
- log.debug "Detected error response as JSON"
422
- log.debug "Parsing error response as JSON"
422
+ ChefAPI::Log.debug "Detected error response as JSON"
423
+ ChefAPI::Log.debug "Parsing error response as JSON"
423
424
  message = JSON.parse(response.body)
424
425
  else
425
- log.debug "Detected response as text/plain"
426
+ ChefAPI::Log.debug "Detected response as text/plain"
426
427
  message = response.body
427
428
  end
428
429
 
@@ -454,19 +455,19 @@ module ChefAPI
454
455
  # @param [Net::HTTP::Request] request
455
456
  #
456
457
  def add_request_headers(request)
457
- log.info "Adding request headers..."
458
+ ChefAPI::Log.info "Adding request headers..."
458
459
 
459
460
  headers = {
460
- 'Accept' => 'application/json',
461
- 'Content-Type' => 'application/json',
462
- 'Connection' => 'keep-alive',
463
- 'Keep-Alive' => '30',
464
- 'User-Agent' => user_agent,
465
- 'X-Chef-Version' => '11.4.0',
461
+ "Accept" => "application/json",
462
+ "Content-Type" => "application/json",
463
+ "Connection" => "keep-alive",
464
+ "Keep-Alive" => "30",
465
+ "User-Agent" => user_agent,
466
+ "X-Chef-Version" => "11.4.0",
466
467
  }
467
468
 
468
469
  headers.each do |key, value|
469
- log.debug "#{key}: #{value}"
470
+ ChefAPI::Log.debug "#{key}: #{value}"
470
471
  request[key] = value
471
472
  end
472
473
  end
@@ -482,18 +483,18 @@ module ChefAPI
482
483
  # @param [Net::HTTP::Request] request
483
484
  #
484
485
  def add_signing_headers(verb, path, request)
485
- log.info "Adding signed header authentication..."
486
+ ChefAPI::Log.info "Adding signed header authentication..."
486
487
 
487
488
  authentication = Authentication.from_options(
488
489
  user: client,
489
490
  key: key,
490
491
  verb: verb,
491
492
  path: path,
492
- body: request.body || request.body_stream,
493
+ body: request.body || request.body_stream
493
494
  )
494
495
 
495
496
  authentication.headers.each do |key, value|
496
- log.debug "#{key}: #{value}"
497
+ ChefAPI::Log.debug "#{key}: #{value}"
497
498
  request[key] = value
498
499
  end
499
500