11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/chef_fs/raw_request.rb', line 11
def self.api_request(chef_rest, method, url, ={}, data=nil, options = {})
json_body = data || nil
= (chef_rest, method, url, , json_body)
chef_rest.retriable_rest_request(method, url, json_body, ) do |rest_request|
response = rest_request.call {|r| r.read_body}
response_body = chef_rest.decompress_body(response)
if response.kind_of?(Net::HTTPSuccess)
if options[:parse_json] && response['content-type'] =~ /json/
JSON.parse(response_body, :create_additions => false)
else
response_body
end
elsif redirect_location = redirected_to(response)
if [:GET, :HEAD].include?(method)
chef_rest.follow_redirect do
api_request(chef_rest, method, chef_rest.create_url(redirect_location), , nil, options)
end
else
raise Exceptions::InvalidRedirect, "#{method} request was redirected from #{url} to #{redirect_location}. Only GET and HEAD support redirects."
end
else
response.body.replace(chef_rest.decompress_body(response)) if response.body.respond_to?(:replace)
if response['content-type'] =~ /json/
exception = response_body
msg = "HTTP Request Returned #{response.code} #{response.message}: "
msg << (exception["error"].respond_to?(:join) ? exception["error"].join(", ") : exception["error"].to_s)
Chef::Log.info(msg)
end
response.error!
end
end
end
|