diff options
Diffstat (limited to 'lib/chef/provider/file/content/remote_file.rb')
-rw-r--r-- | lib/chef/provider/file/content/remote_file.rb | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/lib/chef/provider/file/content/remote_file.rb b/lib/chef/provider/file/content/remote_file.rb deleted file mode 100644 index 7e006d5415..0000000000 --- a/lib/chef/provider/file/content/remote_file.rb +++ /dev/null @@ -1,112 +0,0 @@ -# -# Author:: Jesse Campbell (<hikeit@gmail.com>) -# Author:: Lamont Granquist (<lamont@opscode.com>) -# Copyright:: Copyright (c) 2013 Opscode, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require 'rest_client' -require 'uri' -require 'tempfile' -require 'chef/provider/file/content' - -class Chef - class Provider - class File - class Content - class RemoteFile < Chef::Provider::File::Content - - attr_reader :raw_file_source - - private - - def file_for_provider - Chef::Log.debug("#{@new_resource} checking for changes") - - if current_resource_matches_target_checksum? - Chef::Log.debug("#{@new_resource} checksum matches target checksum (#{@new_resource.checksum}) - not updating") - else - sources = @new_resource.source - raw_file, @raw_file_source = try_multiple_sources(sources) - end - raw_file - end - - private - - # Given an array of source uris, iterate through them until one does not fail - def try_multiple_sources(sources) - sources = sources.dup - source = sources.shift - begin - uri = URI.parse(source) - raw_file = grab_file_from_uri(uri) - rescue SocketError, Errno::ECONNREFUSED, Errno::ENOENT, Errno::EACCES, Timeout::Error, Net::HTTPFatalError, Net::FTPError => e - Chef::Log.warn("#{@new_resource} cannot be downloaded from #{source}: #{e.to_s}") - if source = sources.shift - Chef::Log.info("#{@new_resource} trying to download from another mirror") - retry - else - raise e - end - end - if uri.userinfo - uri.password = "********" - end - return raw_file, uri.to_s - end - - # Given a source uri, return a Tempfile, or a File that acts like a Tempfile (close! method) - def grab_file_from_uri(uri) - if_modified_since = @new_resource.last_modified - if_none_match = @new_resource.etag - uri_dup = uri.dup - if uri_dup.userinfo - uri_dup.password = "********" - end - if uri_dup.to_s == @current_resource.source[0] - if_modified_since ||= @current_resource.last_modified - if_none_match ||= @current_resource.etag - end - if URI::HTTP === uri - #HTTP or HTTPS - raw_file, mtime, etag = Chef::Provider::RemoteFile::HTTP.fetch(uri, if_modified_since, if_none_match) - elsif URI::FTP === uri - #FTP - raw_file, mtime = Chef::Provider::RemoteFile::FTP.fetch(uri, @new_resource.ftp_active_mode, if_modified_since) - etag = nil - elsif uri.scheme == "file" - #local/network file - raw_file, mtime = Chef::Provider::RemoteFile::LocalFile.fetch(uri, if_modified_since) - etag = nil - else - raise ArgumentError, "Invalid uri. Only http(s), ftp, and file are currently supported" - end - unless raw_file.nil? - @new_resource.etag etag unless @new_resource.etag - @new_resource.last_modified mtime unless @new_resource.last_modified - end - return raw_file - end - - def current_resource_matches_target_checksum? - @new_resource.checksum && @current_resource.checksum && @current_resource.checksum =~ /^#{Regexp.escape(@new_resource.checksum)}/ - end - - end - end - end - end -end |