summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlib/puppet/provider/package/dpkg.rb2
-rw-r--r--lib/puppet/type/package.rb2
-rwxr-xr-xtest/ral/providers/package/apt.rb69
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