diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-05-05 07:43:28 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-05-15 07:04:20 -0700 |
commit | 422e9a95df1c542f76c3060b48f4f7b0a99c531d (patch) | |
tree | b6cf03d74f018ece40ae80acc3570ab7a04eead7 | |
parent | 3b5beef887ad02f634b386713d406b77bb876d17 (diff) | |
download | chef-422e9a95df1c542f76c3060b48f4f7b0a99c531d.tar.gz |
Allow users to override remote_file attributes in windows_package
-rw-r--r-- | lib/chef/provider/package/windows.rb | 28 | ||||
-rw-r--r-- | lib/chef/resource/windows_package.rb | 8 | ||||
-rw-r--r-- | spec/unit/provider/package/windows_spec.rb | 13 |
3 files changed, 39 insertions, 10 deletions
diff --git a/lib/chef/provider/package/windows.rb b/lib/chef/provider/package/windows.rb index 543c94fac8..599b554ea4 100644 --- a/lib/chef/provider/package/windows.rb +++ b/lib/chef/provider/package/windows.rb @@ -122,22 +122,30 @@ class Chef end def source_resource - @remote_file ||= Chef::Resource::RemoteFile.new(source_location, run_context).tap do |r| + @source_resource ||= Chef::Resource::RemoteFile.new(default_download_cache_path, run_context).tap do |r| r.source(new_resource.source) r.backup(false) + + if new_resource.remote_file_attributes + new_resource.remote_file_attributes.each do |(k,v)| + r.send(k.to_sym, v) + end + end end end + def default_download_cache_path + uri = ::URI.parse(new_resource.source) + filename = ::File.basename(::URI.unescape(uri.path)) + file_cache_dir = Chef::FileCache.create_cache_path("package/") + Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}") + end + def source_location - @source_location ||= begin - if uri_scheme?(new_resource.source) - uri = ::URI.parse(new_resource.source) - filename = ::File.basename(::URI.unescape(uri.path)) - file_cache_dir = Chef::FileCache.create_cache_path("package/") - Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}") - else - Chef::Util::PathHelper.cleanpath(new_resource.source) - end + if uri_scheme?(new_resource.source) + source_resource.path + else + Chef::Util::PathHelper.cleanpath(new_resource.source) end end end diff --git a/lib/chef/resource/windows_package.rb b/lib/chef/resource/windows_package.rb index c02d38fba9..6c6dea0f5a 100644 --- a/lib/chef/resource/windows_package.rb +++ b/lib/chef/resource/windows_package.rb @@ -79,6 +79,14 @@ class Chef end end + def remote_file_attributes(arg=nil) + set_or_return( + :remote_file_attributes, + arg, + :kind_of => [ Hash ] + ) + end + end end end diff --git a/spec/unit/provider/package/windows_spec.rb b/spec/unit/provider/package/windows_spec.rb index ab1ce103e0..345d7bd57f 100644 --- a/spec/unit/provider/package/windows_spec.rb +++ b/spec/unit/provider/package/windows_spec.rb @@ -76,6 +76,19 @@ describe Chef::Provider::Package::Windows, :windows_only do end it_behaves_like "a local file" end + + context "when remote_file_attributes are provided" do + let (:remote_file_attributes) { {:path => 'C:\\foobar.msi'} } + before(:each) do + new_resource.remote_file_attributes(remote_file_attributes) + end + + it 'should override the attributes of the remote file resource used' do + expect(::File).to receive(:exists?).with(remote_file_attributes[:path]) + provider.load_current_resource + end + + end end context "when source is a local file" do |