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
This commit is contained in:
Daniele Sluijters 2014-02-22 10:56:50 +01:00
parent 738ef15316
commit 2ca97c8210
3 changed files with 110 additions and 1 deletions

View file

@ -29,6 +29,7 @@ class apt(
$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 @@ class apt(
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 @@ class apt(
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,

View file

@ -175,6 +175,50 @@ describe 'apt class' do
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

View file

@ -18,6 +18,10 @@ describe 'apt', :type => :class do
:purge_sources_list => true,
:purge_sources_list_d => true,
},
{
:purge_preferences => true,
:purge_preferences_d => true,
},
{
:disable_keys => false
}
@ -85,6 +89,49 @@ describe 'apt', :type => :class do
})
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({