[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