summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Mundrawala <jdmundrawala@gmail.com>2015-05-05 07:43:28 -0700
committerJay Mundrawala <jdmundrawala@gmail.com>2015-05-15 07:04:20 -0700
commit422e9a95df1c542f76c3060b48f4f7b0a99c531d (patch)
treeb6cf03d74f018ece40ae80acc3570ab7a04eead7
parent3b5beef887ad02f634b386713d406b77bb876d17 (diff)
downloadchef-422e9a95df1c542f76c3060b48f4f7b0a99c531d.tar.gz
Allow users to override remote_file attributes in windows_package
-rw-r--r--lib/chef/provider/package/windows.rb28
-rw-r--r--lib/chef/resource/windows_package.rb8
-rw-r--r--spec/unit/provider/package/windows_spec.rb13
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