diff options
author | Dmitry Shestoperov <dmitrys@northernlight.com> | 2017-11-29 14:06:05 -0500 |
---|---|---|
committer | Dmitry Shestoperov <dmitrys@northernlight.com> | 2017-11-29 14:06:05 -0500 |
commit | 6377c9f91c05a2282f825934b15020736aa8e32e (patch) | |
tree | 0d70c7f6b430375841a2f1050b772bd240252b14 /lib | |
parent | 335de911e800a49b94565ea7cb56c50ed1ae39a6 (diff) | |
parent | 493947028e8560e86a014aced4273f509a678c31 (diff) | |
download | chef-6377c9f91c05a2282f825934b15020736aa8e32e.tar.gz |
Merge branch 'master' of github.com:dimsh99/chef into fix_for_6242
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/client.rb | 2 | ||||
-rw-r--r-- | lib/chef/provider/package.rb | 3 | ||||
-rw-r--r-- | lib/chef/provider/package/apt.rb | 17 | ||||
-rw-r--r-- | lib/chef/provider/package/dpkg.rb | 16 | ||||
-rw-r--r-- | lib/chef/version.rb | 2 |
5 files changed, 34 insertions, 6 deletions
diff --git a/lib/chef/client.rb b/lib/chef/client.rb index ed55cd791d..1211e9425e 100644 --- a/lib/chef/client.rb +++ b/lib/chef/client.rb @@ -602,7 +602,7 @@ class Chef # @api private # def run_ohai - filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version os os_version} : nil + filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version ohai_time os os_version} : nil ohai.all_plugins(filter) events.ohai_completed(node) rescue Ohai::Exceptions::CriticalPluginFailure => e diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb index 95d16dd666..7116bc9045 100644 --- a/lib/chef/provider/package.rb +++ b/lib/chef/provider/package.rb @@ -477,6 +477,9 @@ class Chef elsif candidate_version.nil? Chef::Log.debug("#{new_resource} #{package_name} has no candidate_version to upgrade to") target_version_array.push(nil) + elsif current_version.nil? + Chef::Log.debug("#{new_resource} has no existing installed version. Installing install #{candidate_version}") + target_version_array.push(candidate_version) elsif version_compare(current_version, candidate_version) == 1 && !new_resource.allow_downgrade Chef::Log.debug("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{candidate_version}. Skipping...)") target_version_array.push(nil) diff --git a/lib/chef/provider/package/apt.rb b/lib/chef/provider/package/apt.rb index da86016621..3f32f9d380 100644 --- a/lib/chef/provider/package/apt.rb +++ b/lib/chef/provider/package/apt.rb @@ -127,11 +127,20 @@ class Chef private + # compare 2 versions to each other to see which is newer. + # this differs from the standard package method because we + # need to be able to parse debian version strings which contain + # tildes which Gem cannot properly parse + # + # @return [Integer] 1 if v1 > v2. 0 if they're equal. -1 if v1 < v2 def version_compare(v1, v2) - gem_v1 = v1.gsub(/[_+]/, "+" => "-", "_" => "-") unless v1.nil? - gem_v2 = v2.gsub(/[_+]/, "+" => "-", "_" => "-") unless v2.nil? - - Gem::Version.new(gem_v1) <=> Gem::Version.new(gem_v2) + if !shell_out_compact_timeout("dpkg", "--compare-versions", v1.to_s, "gt", v2.to_s).error? + 1 + elsif !shell_out_compact_timeout("dpkg", "--compare-versions", v1.to_s, "eq", v2.to_s).error? + 0 + else + -1 + end end # Runs command via shell_out with magic environment to disable diff --git a/lib/chef/provider/package/dpkg.rb b/lib/chef/provider/package/dpkg.rb index 89a57affac..cf92e6d3e7 100644 --- a/lib/chef/provider/package/dpkg.rb +++ b/lib/chef/provider/package/dpkg.rb @@ -106,6 +106,22 @@ class Chef private + # compare 2 versions to each other to see which is newer. + # this differs from the standard package method because we + # need to be able to parse debian version strings which contain + # tildes which Gem cannot properly parse + # + # @return [Integer] 1 if v1 > v2. 0 if they're equal. -1 if v1 < v2 + def version_compare(v1, v2) + if !shell_out_compact_timeout("dpkg", "--compare-versions", v1.to_s, "gt", v2.to_s).error? + 1 + elsif !shell_out_compact_timeout("dpkg", "--compare-versions", v1.to_s, "eq", v2.to_s).error? + 0 + else + -1 + end + end + def read_current_version_of_package(package_name) Chef::Log.debug("#{new_resource} checking install state of #{package_name}") status = shell_out_compact_timeout!("dpkg", "-s", package_name, returns: [0, 1]) diff --git a/lib/chef/version.rb b/lib/chef/version.rb index e4e21ac871..33f8b0cf00 100644 --- a/lib/chef/version.rb +++ b/lib/chef/version.rb @@ -23,7 +23,7 @@ require "chef/version_string" class Chef CHEF_ROOT = File.expand_path("../..", __FILE__) - VERSION = Chef::VersionString.new("13.5.25") + VERSION = Chef::VersionString.new("13.6.7") end # |