From 2ca97c82105f07c993eca15e1d19f3b8243aa4f7 Mon Sep 17 00:00:00 2001 From: Daniele Sluijters Date: Sat, 22 Feb 2014 10:56:50 +0100 Subject: [PATCH] apt: Allow managing of preferences file. We already had a feature to manage and purge entries in preferences.d but not the preferences file in /etc/apt. This commit adds that capability. Fixes #199 --- manifests/init.pp | 20 +++++++++++++++- spec/acceptance/apt_spec.rb | 44 ++++++++++++++++++++++++++++++++++ spec/classes/apt_spec.rb | 47 +++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/manifests/init.pp b/manifests/init.pp index b106ad4909..2de6aa056f 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -29,6 +29,7 @@ $proxy_port = '8080', $purge_sources_list = false, $purge_sources_list_d = false, + $purge_preferences = false, $purge_preferences_d = false, $update_timeout = undef ) { @@ -36,13 +37,21 @@ include apt::params include apt::update - validate_bool($purge_sources_list, $purge_sources_list_d, $purge_preferences_d) + validate_bool($purge_sources_list, $purge_sources_list_d, + $purge_preferences, $purge_preferences_d) $sources_list_content = $purge_sources_list ? { false => undef, true => "# Repos managed by puppet.\n", } + $preferences_content = $purge_preferences ? { + false => undef, + true => "Explanation: Preferences managed by Puppet\n +Explanation: We need a bogus package line because of Debian Bug #732746\n +Package: bogus-package\n", + } + if $always_apt_update == true { Exec <| title=='apt_update' |> { refreshonly => false, @@ -75,6 +84,15 @@ notify => Exec['apt_update'], } + file { 'apt-preferences': + ensure => present, + path => "${root}/preferences", + owner => root, + group => root, + mode => '0644', + content => $preferences_content, + } + file { 'preferences.d': ensure => directory, path => $preferences_d, diff --git a/spec/acceptance/apt_spec.rb b/spec/acceptance/apt_spec.rb index 35a0d3e70b..336161cc6d 100644 --- a/spec/acceptance/apt_spec.rb +++ b/spec/acceptance/apt_spec.rb @@ -175,6 +175,50 @@ class { 'apt': end end + context 'purge_preferences' do + context 'false' do + it 'creates a preferences file' do + shell("echo 'original' > /etc/apt/preferences") + end + + it 'should work with no errors' do + pp = <<-EOS + class { 'apt': purge_preferences => false } + EOS + + apply_manifest(pp, :catch_failures => true) + end + + describe file('/etc/apt/preferences') do + it { should be_file } + it 'is not managed by Puppet' do + shell("grep 'original' /etc/apt/preferences", {:acceptable_exit_codes => 0}) + end + end + end + + context 'true' do + it 'creates a preferences file' do + shell('touch /etc/apt/preferences') + end + + it 'should work with no errors' do + pp = <<-EOS + class { 'apt': purge_preferences => true } + EOS + + apply_manifest(pp, :catch_failures => true) + end + + describe file('/etc/apt/preferences') do + it { should be_file } + it 'is managed by Puppet' do + shell("grep 'Explanation' /etc/apt/preferences", {:acceptable_exit_codes => 0}) + end + end + end + end + context 'purge_preferences_d' do context 'false' do it 'creates a preferences file' do diff --git a/spec/classes/apt_spec.rb b/spec/classes/apt_spec.rb index 6d87cc64dc..5d8a597b90 100644 --- a/spec/classes/apt_spec.rb +++ b/spec/classes/apt_spec.rb @@ -18,6 +18,10 @@ :purge_sources_list => true, :purge_sources_list_d => true, }, + { + :purge_preferences => true, + :purge_preferences_d => true, + }, { :disable_keys => false } @@ -85,6 +89,49 @@ }) end } + it { + if param_hash[:purge_preferences] + should create_file('apt-preferences').with({ + :ensure => 'present', + :path => '/etc/apt/preferences', + :owner => 'root', + :group => 'root', + :mode => '0644', + :content => /Explanation/, + }) + else + should create_file('apt-preferences').with({ + :ensure => 'present', + :path => '/etc/apt/preferences', + :owner => 'root', + :group => 'root', + :mode => '0644', + :content => nil, + }) + end + } + + it { + if param_hash[:purge_preferences_d] + should create_file("preferences.d").with({ + 'path' => "/etc/apt/preferences.d", + 'ensure' => "directory", + 'owner' => "root", + 'group' => "root", + 'purge' => true, + 'recurse' => true, + }) + else + should create_file("preferences.d").with({ + 'path' => "/etc/apt/preferences.d", + 'ensure' => "directory", + 'owner' => "root", + 'group' => "root", + 'purge' => false, + 'recurse' => false, + }) + end + } it { should contain_exec("apt_update").with({