class Chef::Provider::RemoteFile::HTTP
Attributes
current_resource[R]
new_resource[R]
uri[R]
Public Class Methods
new(uri, new_resource, current_resource)
click to toggle source
Parse the uri into instance variables
# File lib/chef/provider/remote_file/http.rb, line 36 def initialize(uri, new_resource, current_resource) @uri = uri @new_resource = new_resource @current_resource = current_resource end
Public Instance Methods
conditional_get_headers()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 46 def conditional_get_headers cache_control_headers = {} if last_modified = cache_control_data.mtime and want_mtime_cache_control? cache_control_headers["if-modified-since"] = last_modified end if etag = cache_control_data.etag and want_etag_cache_control? cache_control_headers["if-none-match"] = etag end Chef::Log.debug("Cache control headers: #{cache_control_headers.inspect}") cache_control_headers end
fetch()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 58 def fetch http = Chef::HTTP::Simple.new(uri, http_client_opts) tempfile = http.streaming_request(uri, headers) if tempfile update_cache_control_data(tempfile, http.last_response) tempfile.close end tempfile end
headers()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 42 def headers conditional_get_headers.merge(new_resource.headers) end
Private Instance Methods
cache_control_data()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 77 def cache_control_data @cache_control_data ||= CacheControlData.load_and_validate(uri, current_resource.checksum) end
etag_from(response)
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 93 def etag_from(response) response['etag'] end
http_client_opts()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 97 def http_client_opts opts={} # CHEF-3140 # 1. If it's already compressed, trying to compress it more will # probably be counter-productive. # 2. Some servers are misconfigured so that you GET $URL/file.tgz but # they respond with content type of tar and content encoding of gzip, # which tricks Chef::REST into decompressing the response body. In this # case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz, # which is not what you wanted. if uri.to_s =~ /gz$/ Chef::Log.debug("turning gzip compression off due to filename ending in gz") opts[:disable_gzip] = true end opts end
last_modified_time_from(response)
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 89 def last_modified_time_from(response) response['last_modified'] || response['date'] end
update_cache_control_data(tempfile, response)
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 70 def update_cache_control_data(tempfile, response) cache_control_data.checksum = Chef::Digester.checksum_for_file(tempfile.path) cache_control_data.mtime = last_modified_time_from(response) cache_control_data.etag = etag_from(response) cache_control_data.save end
want_etag_cache_control?()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 85 def want_etag_cache_control? new_resource.use_etag end
want_mtime_cache_control?()
click to toggle source
# File lib/chef/provider/remote_file/http.rb, line 81 def want_mtime_cache_control? new_resource.use_last_modified end