]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/blob - manifests/setting.pp
Merge pull request #440 from mhaskel/fix_setting_validation
[puppet-modules/puppetlabs-apt.git] / manifests / setting.pp
1 define apt::setting (
2   $setting_type,
3   $priority   = 50,
4   $ensure     = file,
5   $source     = undef,
6   $content    = undef,
7   $file_perms = {},
8 ) {
9
10   $_file = merge($::apt::file_defaults, $file_perms)
11
12   if $content and $source {
13     fail('apt::setting cannot have both content and source')
14   }
15
16   if !$content and !$source {
17     fail('apt::setting needs either of content or source')
18   }
19
20   validate_re($setting_type, ['conf', 'pref', 'list'])
21   validate_re($ensure,  ['file', 'present', 'absent'])
22
23   unless is_integer($priority) {
24     # need this to allow zero-padded priority.
25     validate_re($priority, '^\d+$', 'apt::setting priority must be an integer or a zero-padded integer.')
26   }
27
28   if $source {
29     validate_string($source)
30   }
31
32   if $content {
33     validate_string($content)
34   }
35
36   if $setting_type == 'list' {
37     $_priority = ''
38   } else {
39     $_priority = $priority
40   }
41
42   $_path = $::apt::config_files[$setting_type]['path']
43   $_ext  = $::apt::config_files[$setting_type]['ext']
44
45   file { "${_path}/${_priority}${title}${_ext}":
46     ensure  => $ensure,
47     owner   => $_file['owner'],
48     group   => $_file['group'],
49     mode    => $_file['mode'],
50     content => $content,
51     source  => $source,
52   }
53 }