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