diff options
-rwxr-xr-x | lib/puppet/provider/package/dpkg.rb | 2 | ||||
-rw-r--r-- | lib/puppet/type/package.rb | 2 | ||||
-rwxr-xr-x | test/ral/providers/package/apt.rb | 69 |
3 files changed, 71 insertions, 2 deletions
diff --git a/lib/puppet/provider/package/dpkg.rb b/lib/puppet/provider/package/dpkg.rb index 45b351351..d309ae9e5 100755 --- a/lib/puppet/provider/package/dpkg.rb +++ b/lib/puppet/provider/package/dpkg.rb @@ -61,7 +61,7 @@ Puppet::Type.type(:package).provide :dpkg do ) rescue Puppet::ExecutionFailure # dpkg-query exits 1 if the package is not found. - return {:ensure => :absent, :status => 'missing', + return {:ensure => :purged, :status => 'missing', :name => @resource[:name], :error => 'ok'} end diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb index 5405b2364..d929a6ff4 100644 --- a/lib/puppet/type/package.rb +++ b/lib/puppet/type/package.rb @@ -170,7 +170,7 @@ module Puppet [is.inspect, @resource.name, @latest.inspect] end when :absent - if is == :absent + if is == :absent or is == :purged return true end when is diff --git a/test/ral/providers/package/apt.rb b/test/ral/providers/package/apt.rb index 97998e4bb..5197880ff 100755 --- a/test/ral/providers/package/apt.rb +++ b/test/ral/providers/package/apt.rb @@ -70,6 +70,75 @@ class AptPackageProviderTest < PuppetTest::TestCase pkg.evaluate.each { |state| state.transaction = self; state.forward } end + def test_dont_try_to_purge_if_already_purged + pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :purged + + pkg.provider.expects( + :dpkgquery + ).with( + '-W', + '--showformat', + '${Status} ${Package} ${Version}\n', + 'faff' + ).raises( + Puppet::ExecutionFailure, + "No packages found matching faff.\n" + ).times(1) + pkg.provider.expects( + :aptget + ).never + + pkg.evaluate.each { |state| state.transaction = self; state.forward } + end + + def test_dont_try_to_purge_if_already_purged_and_we_want_it_absent + pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :absent + + pkg.provider.expects( + :dpkgquery + ).with( + '-W', + '--showformat', + '${Status} ${Package} ${Version}\n', + 'faff' + ).raises( + Puppet::ExecutionFailure, + "No packages found matching faff.\n" + ).times(1) + pkg.provider.expects( + :aptget + ).never + + pkg.evaluate.each { |state| state.transaction = self; state.forward } + end + + def test_make_sure_we_purge_if_package_still_has_conffiles + pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :purged + + pkg.provider.expects( + :dpkgquery + ).with( + '-W', + '--showformat', + '${Status} ${Package} ${Version}\n', + 'faff' + ).returns( + "deinstall ok config-files faff 1.2.3-1\n" + ).times(2) + pkg.provider.expects( + :aptget + ).with( + '-y', + '-q', + 'remove', + '--purge', + 'faff' + ).returns(0) + + pkg.evaluate.each { |state| state.transaction = self; state.forward } + end + + def test_latest pkg = @type.create :name => 'base-files', :provider => :apt |