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