From effb3f7ff35675afd512f87c24bb81d2a712b983 Mon Sep 17 00:00:00 2001 From: Nan Liu Date: Thu, 3 May 2012 16:59:13 -0700 Subject: [PATCH] (#14308) Add ensure=>absent for define resource. Several apt::* define resource type does not support ensurable. This update allows ensure=>absent to support the removal of these configuration files. * apt::conf * apt::pin * apt::source --- manifests/conf.pp | 3 ++- manifests/pin.pp | 3 ++- manifests/source.pp | 10 ++++++---- spec/defines/conf_spec.rb | 25 ++++++++++++++++++++++++- spec/defines/pin_spec.rb | 12 +++++++++--- spec/defines/source_spec.rb | 9 ++++++++- 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/manifests/conf.pp b/manifests/conf.pp index fa7f97d..03aab8e 100644 --- a/manifests/conf.pp +++ b/manifests/conf.pp @@ -1,4 +1,5 @@ define apt::conf ( + $ensure = present, $priority = '50', $content ) { @@ -8,7 +9,7 @@ define apt::conf ( $apt_conf_d = $apt::params::apt_conf_d file { "${apt_conf_d}/${priority}${name}": - ensure => file, + ensure => $ensure, content => $content, owner => root, group => root, diff --git a/manifests/pin.pp b/manifests/pin.pp index 2899fce..b69e230 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -2,6 +2,7 @@ # pin a release in apt, useful for unstable repositories define apt::pin( + $ensure = present, $packages = '*', $priority = 0 ) { @@ -11,7 +12,7 @@ define apt::pin( $preferences_d = $apt::params::preferences_d file { "${name}.pref": - ensure => file, + ensure => $ensure, path => "${preferences_d}/${name}", owner => root, group => root, diff --git a/manifests/source.pp b/manifests/source.pp index 17d2d8e..c63fc2f 100644 --- a/manifests/source.pp +++ b/manifests/source.pp @@ -2,6 +2,7 @@ # add an apt source define apt::source( + $ensure = present, $location = '', $release = $lsbdistcodename, $repos = 'main', @@ -24,7 +25,7 @@ define apt::source( } file { "${name}.list": - ensure => file, + ensure => $ensure, path => "${sources_list_d}/${name}.list", owner => root, group => root, @@ -32,7 +33,7 @@ define apt::source( content => template("${module_name}/source.list.erb"), } - if $pin != false { + if ($pin != false) and ($ensure == 'present') { apt::pin { $release: priority => $pin, before => File["${name}.list"] @@ -45,7 +46,7 @@ define apt::source( refreshonly => true, } - if $required_packages != false { + if ($required_packages != false) and ($ensure == 'present') { exec { "Required packages: '${required_packages}' for ${name}": command => "${provider} -y install ${required_packages}", subscribe => File["${name}.list"], @@ -53,7 +54,8 @@ define apt::source( } } - if $key != false { + # We do not want to remove keys when the source is absent. + if ($key != false) and ($ensure == 'present') { apt::key { "Add key: ${key} from Apt::Source ${title}": ensure => present, key => $key, diff --git a/spec/defines/conf_spec.rb b/spec/defines/conf_spec.rb index 7c04db1..5a81b51 100644 --- a/spec/defines/conf_spec.rb +++ b/spec/defines/conf_spec.rb @@ -23,7 +23,7 @@ describe 'apt::conf', :type => :define do } it { should contain_file(filename).with({ - 'ensure' => 'file', + 'ensure' => 'present', 'content' => "Apt::Install-Recommends 0;\nApt::AutoRemove::InstallRecommends 1;\n", 'owner' => 'root', 'group' => 'root', @@ -31,4 +31,27 @@ describe 'apt::conf', :type => :define do }) } end + + describe "when removing an apt preference" do + let :params do + { + :ensure => 'absent', + :priority => '00', + :content => "Apt::Install-Recommends 0;\nApt::AutoRemove::InstallRecommends 1;\n" + } + end + + let :filename do + "/etc/apt/apt.conf.d/00norecommends" + end + + it { should contain_file(filename).with({ + 'ensure' => 'absent', + 'content' => "Apt::Install-Recommends 0;\nApt::AutoRemove::InstallRecommends 1;\n", + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + }) + } + end end diff --git a/spec/defines/pin_spec.rb b/spec/defines/pin_spec.rb index dbc595c..c5d3fd9 100644 --- a/spec/defines/pin_spec.rb +++ b/spec/defines/pin_spec.rb @@ -4,13 +4,19 @@ describe 'apt::pin', :type => :define do let :default_params do { + :ensure => 'present', :packages => '*', :priority => '0' } end - [{}, - { + [ {}, + { + :packages => 'apache', + :priority => '1' + }, + { + :ensure => 'absent', :packages => 'apache', :priority => '1' } @@ -27,7 +33,7 @@ describe 'apt::pin', :type => :define do it { should include_class("apt::params") } it { should contain_file("#{title}.pref").with({ - 'ensure' => 'file', + 'ensure' => param_hash[:ensure], 'path' => "/etc/apt/preferences.d/#{title}", 'owner' => 'root', 'group' => 'root', diff --git a/spec/defines/source_spec.rb b/spec/defines/source_spec.rb index 2843429..02bc45f 100644 --- a/spec/defines/source_spec.rb +++ b/spec/defines/source_spec.rb @@ -6,6 +6,7 @@ describe 'apt::source', :type => :define do let :default_params do { + :ensure => 'present', :location => '', :release => 'karmic', :repos => 'main', @@ -35,6 +36,12 @@ describe 'apt::source', :type => :define do :key => 'key_name', :key_server => 'keyserver.debian.com', :key_content => false, + }, + { + :ensure => 'absent', + :location => 'somewhere', + :release => 'precise', + :repos => 'security', } ].each do |param_set| describe "when #{param_set == {} ? "using default" : "specifying"} class parameters" do @@ -66,7 +73,7 @@ describe 'apt::source', :type => :define do it { should contain_apt__params } it { should contain_file("#{title}.list").with({ - 'ensure' => 'file', + 'ensure' => param_hash[:ensure], 'path' => filename, 'owner' => 'root', 'group' => 'root', -- 2.32.3