summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-06-08 18:49:53 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-06-08 18:49:53 +0000
commit3479387598a290eb687cea5decd0a5e1b0ca59b0 (patch)
tree2dddcf861a7afb34d87814e3dc016f8cc8a3582f /lib
parent73502a7cac443890792ffd9d3bb4778a90413e61 (diff)
downloadpuppet-3479387598a290eb687cea5decd0a5e1b0ca59b0.tar.gz
puppet-3479387598a290eb687cea5decd0a5e1b0ca59b0.tar.xz
puppet-3479387598a290eb687cea5decd0a5e1b0ca59b0.zip
Adding (slightly modified) urpmi support from #592 by Devin
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2556 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/provider/package/urpmi.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/puppet/provider/package/urpmi.rb b/lib/puppet/provider/package/urpmi.rb
new file mode 100644
index 000000000..4a7de233c
--- /dev/null
+++ b/lib/puppet/provider/package/urpmi.rb
@@ -0,0 +1,51 @@
+Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
+ desc "Support via ``urpmi``."
+ commands :urpmi => "urpmi", :rpm => "rpm"
+
+ defaultfor :operatingsystem => [:mandriva, :mandrake]
+
+ has_feature :versionable
+
+ def install
+ should = @resource.should(:ensure)
+ self.debug "Ensuring => #{should}"
+ wanted = @resource[:name]
+
+ # XXX: We don't actually deal with epochs here.
+ case should
+ when true, false, Symbol
+ # pass
+ else
+ # Add the package version
+ wanted += "-%s" % should
+ end
+
+ output = urpmi "--auto", wanted
+
+ unless self.query
+ raise Puppet::Error.new(
+ "Could not find package %s" % self.name
+ )
+ end
+ end
+
+ # What's the latest package version available?
+ def latest
+ output = urpmi "-S", :available, @resource[:name]
+
+ if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
+ return $1
+ else
+ # urpmi didn't find updates, pretend the current
+ # version is the latest
+ return @resource[:ensure]
+ end
+ end
+
+ def update
+ # Install in urpmi can be used for update, too
+ self.install
+ end
+end
+
+# $Id$