summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2020-04-15 14:30:37 -0700
committerGitHub <noreply@github.com>2020-04-15 14:30:37 -0700
commitf7814f3186ae6bcaaca59b5723b23559a0b4b4fd (patch)
tree9868bbddd97e2ffdc3aeeaccf99cf4a1f91a3d78
parent951ea92875f5999b5508465e6e4e1f82fab39bda (diff)
parent936025c20767cc6cd4ecd439b77bb21c2adbbec4 (diff)
downloadchef-f7814f3186ae6bcaaca59b5723b23559a0b4b4fd.tar.gz
Merge pull request #9649 from MsysTechnologiesllc/dh/fix-msu-pkg-cumulative-update
msu_package: Fix cumulative updates installation and provide a 3600s default timeout
-rw-r--r--lib/chef/provider/package/cab.rb2
-rw-r--r--lib/chef/provider/package/msu.rb1
-rw-r--r--lib/chef/resource/msu_package.rb5
-rw-r--r--spec/functional/resource/msu_package_spec.rb7
-rw-r--r--spec/unit/resource/msu_package_spec.rb4
5 files changed, 16 insertions, 3 deletions
diff --git a/lib/chef/provider/package/cab.rb b/lib/chef/provider/package/cab.rb
index 71c649173f..3ede6dbe10 100644
--- a/lib/chef/provider/package/cab.rb
+++ b/lib/chef/provider/package/cab.rb
@@ -93,7 +93,7 @@ class Chef
split_package_identity(p["package_identity"])
end
found_packages = existing_package_identities.select do |existing_package_ident|
- existing_package_ident["name"] == package["name"]
+ existing_package_ident["version"] == package["version"].chomp && existing_package_ident["name"] == package["name"]
end
if found_packages.empty?
nil
diff --git a/lib/chef/provider/package/msu.rb b/lib/chef/provider/package/msu.rb
index 2c67e36e06..a8a8da858a 100644
--- a/lib/chef/provider/package/msu.rb
+++ b/lib/chef/provider/package/msu.rb
@@ -110,6 +110,7 @@ class Chef
@cab_files.each do |cab_file|
declare_resource(:cab_package, new_resource.name) do
source cab_file
+ timeout new_resource.timeout
action :install
end
end
diff --git a/lib/chef/resource/msu_package.rb b/lib/chef/resource/msu_package.rb
index c801cdd971..d07d7893a3 100644
--- a/lib/chef/resource/msu_package.rb
+++ b/lib/chef/resource/msu_package.rb
@@ -44,6 +44,11 @@ class Chef
property :checksum, String, desired_state: false,
description: "SHA-256 digest used to verify the checksum of the downloaded MSU package."
+
+ property :timeout, [String, Integer],
+ default: 3600,
+ description: "The amount of time (in seconds) to wait before timing out.",
+ desired_state: false
end
end
end
diff --git a/spec/functional/resource/msu_package_spec.rb b/spec/functional/resource/msu_package_spec.rb
index 0609c8d6ea..1161049571 100644
--- a/spec/functional/resource/msu_package_spec.rb
+++ b/spec/functional/resource/msu_package_spec.rb
@@ -23,6 +23,8 @@ describe Chef::Resource::MsuPackage, :win2012r2_only do
let(:package_name) { "Package_for_KB2959977" }
let(:package_source) { "https://download.microsoft.com/download/3/B/3/3B320C07-B7B1-41E5-81F4-79EBC02DF7D3/Windows8.1-KB2959977-x64.msu" }
+ let(:package_identity) { "Package_for_KB2959977~31bf3856ad364e35~amd64~~6.3.1.1" }
+ let(:timeout) { 3600 }
let(:new_resource) { Chef::Resource::CabPackage.new("windows_test_pkg") }
let(:cab_provider) do
@@ -36,6 +38,7 @@ describe Chef::Resource::MsuPackage, :win2012r2_only do
new_resource = Chef::Resource::MsuPackage.new("test msu package", run_context)
new_resource.package_name package_name
new_resource.source package_source
+ new_resource.timeout timeout
new_resource
end
@@ -44,7 +47,7 @@ describe Chef::Resource::MsuPackage, :win2012r2_only do
it "installs the package successfully" do
subject.run_action(:install)
- found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] =~ /^#{package_name}~/ }
+ found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] == package_identity }
expect(found_packages.length).to be == 1
end
end
@@ -53,7 +56,7 @@ describe Chef::Resource::MsuPackage, :win2012r2_only do
it "removes an installed package" do
subject.run_action(:install)
remove_package
- found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] =~ /^#{package_name}~/ }
+ found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] == package_identity }
expect(found_packages.length).to be == 0
end
end
diff --git a/spec/unit/resource/msu_package_spec.rb b/spec/unit/resource/msu_package_spec.rb
index 49fe61b7b9..3c7462a1a7 100644
--- a/spec/unit/resource/msu_package_spec.rb
+++ b/spec/unit/resource/msu_package_spec.rb
@@ -60,4 +60,8 @@ describe Chef::Resource::MsuPackage do
resource.source("package.msu")
expect(resource.source).not_to eq("package.msu")
end
+
+ it "sets timeout property to 3600 by default" do
+ expect(resource.timeout).to eql(3600)
+ end
end