[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, experimental, updated. debian/2.6.8-1-844-g7ec39d5
Maciej Blizinski
maciej at opencsw.org
Tue May 10 07:58:39 UTC 2011
The following commit has been merged in the experimental branch:
commit fc1859119b8fad1edaabdbce48545e1583bfa24c
Author: Maciej Blizinski <maciej at opencsw.org>
Date: Thu Jul 22 12:48:53 2010 +0200
Adding pkgutil support.
diff --git a/lib/puppet/provider/package/pkgutil.rb b/lib/puppet/provider/package/pkgutil.rb
new file mode 100755
index 0000000..cde7482
--- /dev/null
+++ b/lib/puppet/provider/package/pkgutil.rb
@@ -0,0 +1,111 @@
+# Packaging using pkgutil from http://pkgutil.wikidot.com/
+Puppet::Type.type(:package).provide :pkgutil, :parent => :sun, :source => :sun do
+ desc "Package management using ``pkgutil`` command on Solaris."
+ pkgutil = "pkgutil"
+ if FileTest.executable?("/opt/csw/bin/pkgutil")
+ pkgutil = "/opt/csw/bin/pkgutil"
+ end
+
+ confine :operatingsystem => :solaris
+
+ commands :pkgutil => pkgutil
+
+ # This is so stupid, but then, so is Solaris.
+ ENV["PAGER"] = "/usr/bin/cat"
+
+ def self.extended(mod)
+ unless command(:pkgutil) != "pkgutil"
+ raise Puppet::Error,
+ "The pkgutil command is missing; pkgutil packaging unavailable"
+ end
+ end
+
+ def self.instances(hash = {})
+ blastlist(hash).collect do |bhash|
+ bhash.delete(:avail)
+ new(bhash)
+ end
+ end
+
+ # Turn our pkgutil listing into a bunch of hashes.
+ def self.blastlist(hash)
+ command = ["-c"]
+
+ if hash[:justme]
+ command << hash[:justme]
+ end
+
+ output = pkgutil command
+
+ list = output.split("\n").collect do |line|
+ next if line =~ /^#/
+ next if line =~ /^WARNING/
+ next if line =~ /localrev\s+remoterev/
+
+ blastsplit(line)
+ end.reject { |h| h.nil? }
+
+ if hash[:justme]
+ return list[0]
+ else
+ list.reject! { |h|
+ h[:ensure] == :absent
+ }
+ return list
+ end
+
+ end
+
+ # Split the different lines into hashes.
+ def self.blastsplit(line)
+ if line =~ /\s*(\S+)\s+((\[Not installed\])|(\S+))\s+(\S+)/
+ hash = {}
+ hash[:name] = $1
+ hash[:ensure] = if $2 == "[Not installed]"
+ :absent
+ else
+ $2
+ end
+ hash[:avail] = $5
+
+ if hash[:avail] == "SAME"
+ hash[:avail] = hash[:ensure]
+ end
+
+ # Use the name method, so it works with subclasses.
+ hash[:provider] = self.name
+
+ return hash
+ else
+ Puppet.warning "Cannot match %s" % line
+ return nil
+ end
+ end
+
+ def install
+ pkgutil "-y", "--install", @resource[:name]
+ end
+
+ # Retrieve the version from the current package file.
+ def latest
+ hash = self.class.blastlist(:justme => @resource[:name])
+ hash[:avail]
+ end
+
+ def query
+ if hash = self.class.blastlist(:justme => @resource[:name])
+ hash
+ else
+ {:ensure => :absent}
+ end
+ end
+
+ # Remove the old package, and install the new one
+ def update
+ pkgutil "-y", "--upgrade", @resource[:name]
+ end
+
+ def uninstall
+ pkgutil "-y", "--remove", @resource[:name]
+ end
+end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list