summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-03 17:08:21 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-03 17:08:21 +0000
commit4daf2c13ae5cdab4ee0de1fcb8ea7f0fc7b3573a (patch)
tree2c1f1c8c18c2f589b1c771422ed705eb040cf172
parentf37154e69e57049f2bf6870d2c524fa29c3c0e35 (diff)
downloadpuppet-4daf2c13ae5cdab4ee0de1fcb8ea7f0fc7b3573a.tar.gz
puppet-4daf2c13ae5cdab4ee0de1fcb8ea7f0fc7b3573a.tar.xz
puppet-4daf2c13ae5cdab4ee0de1fcb8ea7f0fc7b3573a.zip
Adding apple package support, but it is very limited -- packages can only be installed, not upgraded or removed.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1055 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--lib/puppet/type/package.rb2
-rwxr-xr-xlib/puppet/type/package/apple.rb27
-rw-r--r--test/types/package.rb38
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