# class Chef::REST

## Chef::REST¶ ↑

Chef’s custom REST client with built-in JSON support and RSA signed header authentication.

### Public Class Methods

new(url, client_name=Chef::Config[:node_name], signing_key_filename=Chef::Config[:client_key], options={}) click to toggle source

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

Calls superclass method Chef::HTTP.new

    # 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

auth_credentials() click to toggle source

    # File lib/chef/rest.rb, line 87
    def auth_credentials
      authenticator.auth_credentials
    end

authentication_headers(method, url, json_body=nil) click to toggle source

    # File lib/chef/rest.rb, line 204
    def authentication_headers(method, url, json_body=nil)
      authenticator.authentication_headers(method, url, json_body)
    end

client_name() click to toggle source

    # File lib/chef/rest.rb, line 91
    def client_name
      authenticator.client_name
    end

decompress_body(body) click to toggle source

DEPRECATED

    # File lib/chef/rest.rb, line 200
    def decompress_body(body)
      @decompressor.decompress_body(body)
    end

fetch(path, headers={}) { |tmp_file| ... } click to toggle source

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

follow_redirect() click to toggle source
Calls superclass method Chef::HTTP#follow_redirect

    # 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

get(path, raw=false, headers={}) click to toggle source

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

Also aliased as: get_rest
get_rest(path, raw=false, headers={})
Alias for: get
http_client(base_url=nil) click to toggle source

    # 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

raw_http_request(method, path, headers, data) click to toggle source

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

retriable_http_request(method, url, req_body, headers) { |rest_request| ... } click to toggle source

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

Also aliased as: retriable_rest_request
retriable_rest_request(method, url, req_body, headers)
Alias for: retriable_http_request
sign_requests?() click to toggle source

    # File lib/chef/rest.rb, line 99
    def sign_requests?
      authenticator.sign_requests?
    end

signing_key() click to toggle source

    # File lib/chef/rest.rb, line 95
    def signing_key
      authenticator.raw_key
    end

signing_key_filename() click to toggle source

    # File lib/chef/rest.rb, line 83
    def signing_key_filename
      authenticator.signing_key_filename
    end

streaming_request(url, headers, &block) click to toggle source

Customized streaming behavior; sets the accepted content type to “/” if not otherwise specified for compatibility purposes

Calls superclass method Chef::HTTP#streaming_request

    # File lib/chef/rest.rb, line 173
    def streaming_request(url, headers, &block)
      headers["Accept"] ||= "*/*"
      super
    end