From a1ce8bdea47165bd6a26310ab6de90c85c7c8436 Mon Sep 17 00:00:00 2001 From: Daniele Sluijters Date: Sat, 28 Feb 2015 16:12:47 +0100 Subject: [PATCH] apt: Change how purging is managed. * Instead of having 4 options controlling purging we now have a single hash with four possible keys. * We purge everything by default. * `/etc/apt/preferences` is now always managed. * Add missing `mode` to some of the files. --- manifests/init.pp | 54 ++++++++++++++++-------- manifests/params.pp | 7 ++++ spec/classes/apt_spec.rb | 90 +++++++++++++++++++--------------------- 3 files changed, 86 insertions(+), 65 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 86e49c8..cc4a330 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,12 +1,9 @@ # class apt( + $purge = {}, $proxy = {}, $always_apt_update = false, $apt_update_frequency = 'reluctantly', - $purge_sources_list = false, - $purge_sources_list_d = false, - $purge_preferences = false, - $purge_preferences_d = false, $update_timeout = undef, $update_tries = undef, $sources = undef, @@ -17,8 +14,21 @@ class apt( $frequency_options = ['always','daily','weekly','reluctantly'] validate_re($apt_update_frequency, $frequency_options) - validate_bool($purge_sources_list, $purge_sources_list_d, - $purge_preferences, $purge_preferences_d) + validate_hash($purge) + if $purge['sources.list'] { + validate_bool($purge['sources.list']) + } + if $purge['sources.list.d'] { + validate_bool($purge['sources.list.d']) + } + if $purge['preferences'] { + validate_bool($purge['preferences']) + } + if $purge['preferences.d'] { + validate_bool($purge['preferences.d']) + } + + $_purge = merge($::apt::purge_defaults, $purge) validate_hash($proxy) if $proxy['host'] { @@ -42,11 +52,16 @@ class apt( } } - $sources_list_content = $purge_sources_list ? { + $sources_list_content = $_purge['sources.list'] ? { false => undef, true => "# Repos managed by puppet.\n", } + $preferences_ensure = $_purge['preferences'] ? { + false => file, + true => absent, + } + if $always_apt_update == true { Exec <| title=='apt_update' |> { refreshonly => false, @@ -59,7 +74,7 @@ class apt( } file { 'sources.list': - ensure => present, + ensure => file, path => $::apt::sources_list, owner => root, group => root, @@ -73,16 +88,19 @@ class apt( path => $::apt::sources_list_d, owner => root, group => root, - purge => $purge_sources_list_d, - recurse => $purge_sources_list_d, + mode => '0644', + purge => $_purge['sources.list.d'], + recurse => $_purge['sources.list.d'], notify => Exec['apt_update'], } - if $purge_preferences { - file { 'apt-preferences': - ensure => absent, - path => $::apt::preferences, - } + file { 'preferences': + ensure => $preferences_ensure, + path => $::apt::preferences, + owner => root, + group => root, + mode => '0644', + notify => Exec['apt_update'], } file { 'preferences.d': @@ -90,8 +108,10 @@ class apt( path => $::apt::preferences_d, owner => root, group => root, - purge => $purge_preferences_d, - recurse => $purge_preferences_d, + mode => '0644', + purge => $_purge['preferences.d'], + recurse => $_purge['preferences.d'], + notify => Exec['apt_update'], } # Need anchor to provide containment for dependencies. diff --git a/manifests/params.pp b/manifests/params.pp index eda6adc..51b6aea 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -37,6 +37,13 @@ class apt::params { 'https' => false, } + $purge_defaults = { + 'sources.list' => true, + 'sources.list.d' => true, + 'preferences' => true, + 'preferences.d' => true, + } + $file_defaults = { 'owner' => 'root', 'group' => 'root', diff --git a/spec/classes/apt_spec.rb b/spec/classes/apt_spec.rb index c53e2a7..a021993 100644 --- a/spec/classes/apt_spec.rb +++ b/spec/classes/apt_spec.rb @@ -4,12 +4,13 @@ describe 'apt' do context 'defaults' do it { is_expected.to contain_file('sources.list').that_notifies('Exec[apt_update]').only_with({ - :ensure => 'present', - :path => '/etc/apt/sources.list', - :owner => 'root', - :group => 'root', - :mode => '0644', - :notify => 'Exec[apt_update]', + :ensure => 'file', + :path => '/etc/apt/sources.list', + :owner => 'root', + :group => 'root', + :mode => '0644', + :content => "# Repos managed by puppet.\n", + :notify => 'Exec[apt_update]', })} it { is_expected.to contain_file('sources.list.d').that_notifies('Exec[apt_update]').only_with({ @@ -17,18 +18,30 @@ describe 'apt' do :path => '/etc/apt/sources.list.d', :owner => 'root', :group => 'root', - :purge => false, - :recurse => false, + :mode => '0644', + :purge => true, + :recurse => true, :notify => 'Exec[apt_update]', })} - it { is_expected.to contain_file('preferences.d').only_with({ + it { is_expected.to contain_file('preferences').that_notifies('Exec[apt_update]').only_with({ + :ensure => 'absent', + :path => '/etc/apt/preferences', + :owner => 'root', + :group => 'root', + :mode => '0644', + :notify => 'Exec[apt_update]', + })} + + it { is_expected.to contain_file('preferences.d').that_notifies('Exec[apt_update]').only_with({ :ensure => 'directory', :path => '/etc/apt/preferences.d', :owner => 'root', :group => 'root', - :purge => false, - :recurse => false, + :mode => '0644', + :purge => true, + :recurse => true, + :notify => 'Exec[apt_update]', })} it 'should lay down /etc/apt/apt.conf.d/15update-stamp' do @@ -84,32 +97,29 @@ describe 'apt' do let :params do { :always_apt_update => true, - :purge_sources_list => true, - :purge_sources_list_d => true, - :purge_preferences => true, - :purge_preferences_d => true, + :purge => { 'sources.list' => false, 'sources.list.d' => false, + 'preferences' => false, 'preferences.d' => false, }, :update_timeout => '1', :update_tries => '3', } end - it { is_expected.to contain_file('sources.list').with({ - :content => "# Repos managed by puppet.\n" + it { is_expected.to contain_file('sources.list').without({ + :content => "# Repos managed by puppet.\n", })} it { is_expected.to contain_file('sources.list.d').with({ - :purge => 'true', - :recurse => 'true', + :purge => false, + :recurse => false, })} - it { is_expected.to contain_file('apt-preferences').only_with({ - :ensure => 'absent', - :path => '/etc/apt/preferences', + it { is_expected.to contain_file('preferences').with({ + :ensure => 'file', })} it { is_expected.to contain_file('preferences.d').with({ - :purge => 'true', - :recurse => 'true', + :purge => false, + :recurse => false, })} it { is_expected.to contain_exec('apt_update').with({ @@ -164,12 +174,8 @@ describe 'apt' do end describe 'failing tests' do - context 'bad purge_sources_list' do - let :params do - { - :purge_sources_list => 'foo' - } - end + context "purge['sources.list']=>'banana'" do + let(:params) { { :purge => { 'sources.list' => 'banana' }, } } it do expect { is_expected.to compile @@ -177,12 +183,8 @@ describe 'apt' do end end - context 'bad purge_sources_list_d' do - let :params do - { - :purge_sources_list_d => 'foo' - } - end + context "purge['sources.list.d']=>'banana'" do + let(:params) { { :purge => { 'sources.list.d' => 'banana' }, } } it do expect { is_expected.to compile @@ -190,12 +192,8 @@ describe 'apt' do end end - context 'bad purge_preferences' do - let :params do - { - :purge_preferences => 'foo' - } - end + context "purge['preferences']=>'banana'" do + let(:params) { { :purge => { 'preferences' => 'banana' }, } } it do expect { is_expected.to compile @@ -203,12 +201,8 @@ describe 'apt' do end end - context 'bad purge_preferences_d' do - let :params do - { - :purge_preferences_d => 'foo' - } - end + context "purge['preferences.d']=>'banana'" do + let(:params) { { :purge => { 'preferences.d' => 'banana' }, } } it do expect { is_expected.to compile -- 2.45.2