summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rwxr-xr-xlib/puppet/provider/package/rpm.rb16
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