diff options
-rw-r--r-- | lib/puppet/type/package.rb | 2 | ||||
-rwxr-xr-x | lib/puppet/type/package/apple.rb | 27 | ||||
-rw-r--r-- | test/types/package.rb | 38 |
3 files changed, 67 insertions, 0 deletions
diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb index ee978e11f..02a95289d 100644 --- a/lib/puppet/type/package.rb +++ b/lib/puppet/type/package.rb @@ -383,6 +383,7 @@ module Puppet when "fedora": @default = :yum when "redhat": @default = :rpm when "openbsd": @default = :bsd + when "darwin": @default = :apple else if Facter["kernel"] == "Linux" Puppet.warning "Defaulting to RPM for %s" % @@ -592,5 +593,6 @@ require 'puppet/type/package/rpm.rb' require 'puppet/type/package/yum.rb' require 'puppet/type/package/sun.rb' require 'puppet/type/package/bsd.rb' +require 'puppet/type/package/apple.rb' # $Id$ diff --git a/lib/puppet/type/package/apple.rb b/lib/puppet/type/package/apple.rb new file mode 100755 index 000000000..34d66ef37 --- /dev/null +++ b/lib/puppet/type/package/apple.rb @@ -0,0 +1,27 @@ +module Puppet + # OS X Packaging sucks. We can install packages, but that's about it. + Puppet.type(:package).newpkgtype(:apple) do + def query + if FileTest.exists?("/Library/Receipts/#{self[:name]}.pkg") + return {:name => self[:name], :ensure => :present} + else + return nil + end + end + + def install + source = nil + unless source = self[:source] + self.fail "Mac OS X packages must specify a package source" + end + + output = %x{/usr/sbin/installer -pkg #{source} -target / 2>&1} + + unless $? == 0 + raise Puppet::PackageError.new(output) + end + end + end +end + +# $Id$ diff --git a/test/types/package.rb b/test/types/package.rb index 2fe29aecf..224e7a5f6 100644 --- a/test/types/package.rb +++ b/test/types/package.rb @@ -167,6 +167,7 @@ class TestPackages < Test::Unit::TestCase def test_latestpkg mkpkgs { |pkg| + next unless pkg.respond_to? :latest assert_nothing_raised { assert(pkg.latest, "Package did not return value for 'latest'") } @@ -283,6 +284,43 @@ class TestPackages < Test::Unit::TestCase assert(pkg.insync?, "Package is not in sync") end end + + # Stupid darwin, not supporting package uninstallation + if Facter["operatingsystem"].value == "Darwin" + def test_darwinpkgs + pkg = nil + assert_nothing_raised { + pkg = Puppet::Type.type(:package).create( + :name => "pkgtesting", + :source => "/Users/luke/Documents/Puppet/pkgtesting.pkg", + :ensure => :present + ) + } + + assert_nothing_raised { + pkg.retrieve + } + + if pkg.insync? + Puppet.notice "Test package is already installed; please remove it" + next + end + + # The file installed, and the receipt + @@tmpfiles << "/tmp/file" + @@tmpfiles << "/Library/Receipts/pkgtesting.pkg" + + assert_events([:package_created], pkg, "package") + + assert_nothing_raised { + pkg.retrieve + } + + assert(pkg.insync?, "Package is not insync") + + assert(FileTest.exists?("/tmp/pkgtesting/file"), "File did not get created") + end + end end end end |