class Chef::REST
Chef::REST¶ ↑
Chef's custom REST client with built-in JSON support and RSA signed header authentication.
Public Class Methods
Create a REST client object. The supplied
url
is used as the base for all subsequent requests. For
example, when initialized with a base url localhost:4000, a call to
get_rest
with 'nodes' will make an HTTP GET request to localhost:4000/nodes
# File lib/chef/rest.rb, line 59 def initialize(url, client_name=Chef::Config[:node_name], signing_key_filename=Chef::Config[:client_key], options={}) options = options.dup options[:client_name] = client_name options[:signing_key_filename] = signing_key_filename super(url, options) @decompressor = Decompressor.new(options) @authenticator = Authenticator.new(options) @request_id = RemoteRequestID.new(options) @middlewares << JSONInput.new(options) @middlewares << JSONToModelOutput.new(options) @middlewares << CookieManager.new(options) @middlewares << @decompressor @middlewares << @authenticator @middlewares << @request_id # ValidateContentLength should come after Decompressor # because the order of middlewares is reversed when handling # responses. @middlewares << ValidateContentLength.new(options) end
Public Instance Methods
# File lib/chef/rest.rb, line 87 def auth_credentials authenticator.auth_credentials end
# File lib/chef/rest.rb, line 204 def authentication_headers(method, url, json_body=nil) authenticator.authentication_headers(method, url, json_body) end
# File lib/chef/rest.rb, line 91 def client_name authenticator.client_name end
DEPRECATED
# File lib/chef/rest.rb, line 200 def decompress_body(body) @decompressor.decompress_body(body) end
Streams a download to a tempfile, then yields the tempfile to a block. After the download, the tempfile will be closed and unlinked. If you rename the tempfile, it will not be deleted. Beware that if the server streams infinite content, this method will stream it until you run out of disk space.
# File lib/chef/rest.rb, line 132 def fetch(path, headers={}) streaming_request(create_url(path), headers) {|tmp_file| yield tmp_file } end
# File lib/chef/rest.rb, line 180 def follow_redirect unless @sign_on_redirect @authenticator.sign_request = false end super ensure @authenticator.sign_request = true end
Send an HTTP GET request to the path
Using this method to fetch
a file is considered deprecated.
Parameters¶ ↑
- path
-
The path to GET
- raw
-
Whether you want the raw body returned, or JSON inflated. Defaults
to JSON inflated.
# File lib/chef/rest.rb, line 111 def get(path, raw=false, headers={}) if raw streaming_request(path, headers) else request(:GET, path, headers) end end
# File lib/chef/rest.rb, line 191 def http_client(base_url=nil) base_url ||= url BasicClient.new(base_url, :ssl_policy => Chef::HTTP::APISSLPolicy) end
Do a HTTP request where no middleware is loaded (e.g. JSON input/output conversion) but the standard Chef Authentication headers are added to the request.
# File lib/chef/rest.rb, line 141 def raw_http_request(method, path, headers, data) url = create_url(path) method, url, headers, data = @authenticator.handle_request(method, url, headers, data) method, url, headers, data = @request_id.handle_request(method, url, headers, data) response, rest_request, return_value = send_http_request(method, url, headers, data) response.error! unless success_response?(response) return_value rescue Exception => exception log_failed_request(response, return_value) unless response.nil? if exception.respond_to?(:chef_rest_request=) exception.chef_rest_request = rest_request end raise end
Deprecated: Responsibilities of this method have been split up. The http_client is now responsible for making individual requests, while retrying_http_errors handles error/retry logic.
# File lib/chef/rest.rb, line 161 def retriable_http_request(method, url, req_body, headers) rest_request = Chef::HTTP::HTTPRequest.new(method, url, req_body, headers) Chef::Log.debug("Sending HTTP Request via #{method} to #{url.host}:#{url.port}#{rest_request.path}") retrying_http_errors(url) do yield rest_request end end
# File lib/chef/rest.rb, line 99 def sign_requests? authenticator.sign_requests? end
# File lib/chef/rest.rb, line 95 def signing_key authenticator.raw_key end
# File lib/chef/rest.rb, line 83 def signing_key_filename authenticator.signing_key_filename end
Customized streaming behavior; sets the accepted content type to “/” if not otherwise specified for compatibility purposes
# File lib/chef/rest.rb, line 173 def streaming_request(url, headers, &block) headers["Accept"] ||= "*/*" super end