apt::setting: Parse type and name from title.

Instead of having two additional parameters, `base_name` and
`setting_type` simply parse it from `title`.

We need to prefix most resources with `list-`, `conf-`, or `pref-` any
way to avoid duplicate resources so we might as well leverage that.
This commit is contained in:
Daniele Sluijters 2015-02-26 19:12:53 +01:00
parent e588ab622b
commit d261d8f11b
7 changed files with 35 additions and 71 deletions

View file

@ -5,8 +5,6 @@ define apt::conf (
) { ) {
apt::setting { "conf-${name}": apt::setting { "conf-${name}":
ensure => $ensure, ensure => $ensure,
base_name => $name,
setting_type => 'conf',
priority => $priority, priority => $priority,
content => template('apt/_header.erb', 'apt/conf.erb'), content => template('apt/_header.erb', 'apt/conf.erb'),
} }

View file

@ -31,8 +31,6 @@ class apt(
} }
apt::setting { 'conf-update-stamp': apt::setting { 'conf-update-stamp':
base_name => 'update-stamp',
setting_type => 'conf',
priority => 15, priority => 15,
content => template('apt/_header.erb', 'apt/15update-stamp.erb'), content => template('apt/_header.erb', 'apt/15update-stamp.erb'),
} }

View file

@ -63,8 +63,6 @@ define apt::pin(
apt::setting { "pref-${file_name}": apt::setting { "pref-${file_name}":
ensure => $ensure, ensure => $ensure,
base_name => $file_name,
setting_type => 'pref',
priority => $order, priority => $order,
content => template('apt/_header.erb', 'apt/pin.pref.erb'), content => template('apt/_header.erb', 'apt/pin.pref.erb'),
} }

View file

@ -1,6 +1,4 @@
define apt::setting ( define apt::setting (
$setting_type,
$base_name = $title,
$priority = 50, $priority = 50,
$ensure = file, $ensure = file,
$source = undef, $source = undef,
@ -18,13 +16,17 @@ define apt::setting (
fail('apt::setting needs either of content or source') fail('apt::setting needs either of content or source')
} }
validate_re($setting_type, ['conf', 'pref', 'list'])
validate_re($ensure, ['file', 'present', 'absent']) validate_re($ensure, ['file', 'present', 'absent'])
validate_string($base_name)
$title_array = split($title, '-')
$setting_type = $title_array[0]
$base_name = join(delete_at($title_array, 0), '-')
validate_re($setting_type, ['\Aconf\z', '\Apref\z', '\Alist\z'], "apt::setting resource name/title must start with either 'conf-', 'pref-' or 'list-'")
unless is_integer($priority) { unless is_integer($priority) {
# need this to allow zero-padded priority. # need this to allow zero-padded priority.
validate_re($priority, '^\d+$', 'apt::setting priority must be an integer or a zero-padded integer.') validate_re($priority, '^\d+$', 'apt::setting priority must be an integer or a zero-padded integer')
} }
if $source { if $source {

View file

@ -25,8 +25,6 @@ define apt::source(
apt::setting { "list-${name}": apt::setting { "list-${name}":
ensure => $ensure, ensure => $ensure,
base_name => $name,
setting_type => 'list',
content => template('apt/_header.erb', 'apt/source.list.erb'), content => template('apt/_header.erb', 'apt/source.list.erb'),
notify => Exec['apt_update'], notify => Exec['apt_update'],
} }

View file

@ -8,11 +8,7 @@ describe 'apt::pin', :type => :define do
context 'defaults' do context 'defaults' do
it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: \*\nPin: release a=my_pin\nPin-Priority: 0\n/)} it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: \*\nPin: release a=my_pin\nPin-Priority: 0\n/)}
it { is_expected.to contain_apt__setting("pref-my_pin").with({ it { is_expected.to contain_apt__setting("pref-my_pin") }
'setting_type' => 'pref',
'base_name' => 'my_pin',
})
}
end end
context 'set version' do context 'set version' do
@ -23,11 +19,7 @@ describe 'apt::pin', :type => :define do
} }
end end
it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: version 1\nPin-Priority: 0\n/)} it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: version 1\nPin-Priority: 0\n/)}
it { is_expected.to contain_apt__setting("pref-my_pin").with({ it { is_expected.to contain_apt__setting("pref-my_pin") }
'setting_type' => 'pref',
'base_name' => 'my_pin',
})
}
end end
context 'set origin' do context 'set origin' do
@ -38,11 +30,7 @@ describe 'apt::pin', :type => :define do
} }
end end
it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: origin test\nPin-Priority: 0\n/)} it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: origin test\nPin-Priority: 0\n/)}
it { is_expected.to contain_apt__setting("pref-my_pin").with({ it { is_expected.to contain_apt__setting("pref-my_pin") }
'setting_type' => 'pref',
'base_name' => 'my_pin',
})
}
end end
context 'not defaults' do context 'not defaults' do
@ -61,8 +49,6 @@ describe 'apt::pin', :type => :define do
end end
it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: foo\nPackage: \*\nPin: release a=1, n=bar, v=2, c=baz, o=foobar, l=foobaz\nPin-Priority: 10\n/) } it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: foo\nPackage: \*\nPin: release a=1, n=bar, v=2, c=baz, o=foobar, l=foobaz\nPin-Priority: 10\n/) }
it { is_expected.to contain_apt__setting("pref-my_pin").with({ it { is_expected.to contain_apt__setting("pref-my_pin").with({
'setting_type' => 'pref',
'base_name' => 'my_pin',
'priority' => 99, 'priority' => 99,
}) })
} }

View file

@ -3,41 +3,36 @@ require 'spec_helper'
describe 'apt::setting' do describe 'apt::setting' do
let(:pre_condition) { 'class { "apt": }' } let(:pre_condition) { 'class { "apt": }' }
let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } } let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
let(:title) { 'teddybear' } let(:title) { 'conf-teddybear' }
let(:default_params) { { :setting_type => 'conf', :content => 'di' } } let(:default_params) { { :content => 'di' } }
describe 'when using the defaults' do describe 'when using the defaults' do
context 'without setting_type' do
it do
expect { is_expected.to compile }.to raise_error(Puppet::Error, /Must pass setting_type /)
end
end
context 'without source or content' do context 'without source or content' do
let(:params) { { :setting_type => 'conf' } }
it do it do
expect { is_expected.to compile }.to raise_error(Puppet::Error, /needs either of /) expect { is_expected.to compile }.to raise_error(Puppet::Error, /needs either of /)
end end
end end
context 'with setting_type=conf' do context 'with title=conf-teddybear ' do
let(:params) { default_params } let(:params) { default_params }
it { is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear') } it { is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear') }
end end
context 'with setting_type=pref' do context 'with title=pref-teddybear' do
let(:params) { { :setting_type => 'pref', :content => 'di' } } let(:title) { 'pref-teddybear' }
let(:params) { default_params }
it { is_expected.to contain_file('/etc/apt/preferences.d/50teddybear') } it { is_expected.to contain_file('/etc/apt/preferences.d/50teddybear') }
end end
context 'with setting_type=list' do context 'with title=list-teddybear' do
let(:params) { { :setting_type => 'list', :content => 'di' } } let(:title) { 'list-teddybear' }
let(:params) { default_params }
it { is_expected.to contain_file('/etc/apt/sources.list.d/teddybear.list') } it { is_expected.to contain_file('/etc/apt/sources.list.d/teddybear.list') }
end end
context 'with source' do context 'with source' do
let(:params) { { :setting_type => 'conf', :source => 'puppet:///la/die/dah' } } let(:params) { { :source => 'puppet:///la/die/dah' } }
it { it {
is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').with({ is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').with({
:ensure => 'file', :ensure => 'file',
@ -68,10 +63,11 @@ describe 'apt::setting' do
end end
end end
context 'with setting_type=ext' do context 'with title=ext-teddybear' do
let(:params) { default_params.merge({ :setting_type => 'ext' }) } let(:title) { 'ext-teddybear' }
let(:params) { default_params }
it do it do
expect { is_expected.to compile }.to raise_error(Puppet::Error, /"ext" does not /) expect { is_expected.to compile }.to raise_error(Puppet::Error, /must start with /)
end end
end end
@ -95,18 +91,6 @@ describe 'apt::setting' do
it { is_expected.to contain_file('/etc/apt/apt.conf.d/100teddybear') } it { is_expected.to contain_file('/etc/apt/apt.conf.d/100teddybear') }
end end
describe 'with base_name=puppy' do
let(:params) { default_params.merge({ :base_name => 'puppy' }) }
it { should contain_file('/etc/apt/apt.conf.d/50puppy') }
end
describe 'with base_name=true' do
let(:params) { default_params.merge({ :base_name => true }) }
it do
expect { should compile }.to raise_error(Puppet::Error, /not a string/)
end
end
describe 'with ensure=absent' do describe 'with ensure=absent' do
let(:params) { default_params.merge({ :ensure => 'absent' }) } let(:params) { default_params.merge({ :ensure => 'absent' }) }
it { is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').with({ it { is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').with({