diff options
author | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-01-02 21:31:41 +0000 |
---|---|---|
committer | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-01-02 21:31:41 +0000 |
commit | 2d25816b027b1837bded7b7a723a44ce1c77405e (patch) | |
tree | 50848cec15b2ee76b3c12e7a78b2f9ffc408fefa | |
parent | 50965c7a0f4f9cf342c469f8d586d0a2f2b4efa8 (diff) | |
download | puppet-2d25816b027b1837bded7b7a723a44ce1c77405e.tar.gz puppet-2d25816b027b1837bded7b7a723a44ce1c77405e.tar.xz puppet-2d25816b027b1837bded7b7a723a44ce1c77405e.zip |
Fix trac #354, and some other oddities around installing multiple versions of the same package.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2018 980ebf18-57e1-0310-9a29-db15c13687c0
-rwxr-xr-x | lib/puppet/provider/package/rpm.rb | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/puppet/provider/package/rpm.rb b/lib/puppet/provider/package/rpm.rb index a3bd3e897..7700bf0d6 100755 --- a/lib/puppet/provider/package/rpm.rb +++ b/lib/puppet/provider/package/rpm.rb @@ -3,6 +3,9 @@ Puppet::Type.type(:package).provide :rpm do desc "RPM packaging support; should work anywhere with a working ``rpm`` binary." + # The query format by which we identify installed packages + IDSTRING = "%{NAME}-%{VERSION}-%{RELEASE}" + VERSIONSTRING = "%{VERSION}-%{RELEASE}" commands :rpm => "rpm" @@ -47,7 +50,7 @@ Puppet::Type.type(:package).provide :rpm do :description => "DESCRIPTION" } - cmd = ["-q", @model[:name], "--qf", "%{NAME} #{VERSIONSTRING}\n"] + cmd = ["-q", @model[:name], "--qf", "#{IDSTRING} #{VERSIONSTRING}\n"] begin output = rpm *cmd @@ -78,9 +81,8 @@ Puppet::Type.type(:package).provide :rpm do @model.fail "RPMs must specify a package source" end - cmd = "#{command(:rpm)} -q --qf '#{VERSIONSTRING}' -p #{@model[:source]}" + cmd = [command(:rpm), "-q", "--qf", "#{VERSIONSTRING}", "-p", "#{@model[:source]}"] version = execfail(cmd, Puppet::Error) - return version end @@ -89,13 +91,19 @@ Puppet::Type.type(:package).provide :rpm do unless source = @model[:source] @model.fail "RPMs must specify a package source" end + if @model.should(:ensure) == @model.is(:ensure) || + @model.should(:ensure) == :latest && @model.is(:ensure) == latest + # RPM gets pissy if you try to install an already + # installed package + return + end flag = "-i" if @model.is(:ensure) != :absent flag = "-U" end - rpm flag, source + rpm flag, "--oldpackage", source end def uninstall |