Merge pull request #447 from puppetlabs/daenney/hulk-smash-2
[puppet-modules/puppetlabs-apt.git] / manifests / source.pp
1 # source.pp
2 # add an apt source
3 define apt::source(
4   $comment           = $name,
5   $ensure            = present,
6   $location          = '',
7   $release           = $::lsbdistcodename,
8   $repos             = 'main',
9   $include_src       = false,
10   $include_deb       = true,
11   $key               = undef,
12   $pin               = false,
13   $architecture      = undef,
14   $trusted_source    = false,
15 ) {
16   validate_string($architecture, $comment, $location, $release, $repos)
17   validate_bool($trusted_source, $include_src, $include_deb)
18
19   if ! $release {
20     fail('lsbdistcodename fact not available: release parameter required')
21   }
22
23   $_before = Apt::Setting["list-${title}"]
24
25   if $key {
26     if is_hash($key) {
27       unless $key['id'] {
28         fail('key hash must contain at least an id entry')
29       }
30       $_key = merge($::apt::source_key_defaults, $key)
31     } else {
32       validate_string($key)
33     }
34   }
35
36   apt::setting { "list-${name}":
37     ensure  => $ensure,
38     content => template('apt/_header.erb', 'apt/source.list.erb'),
39   }
40
41   if ($pin != false) {
42     # Get the host portion out of the url so we can pin to origin
43     $url_split = split($location, '/')
44     $host      = $url_split[2]
45
46     apt::pin { $name:
47       ensure   => $ensure,
48       priority => $pin,
49       before   => $_before,
50       origin   => $host,
51     }
52   }
53
54   # We do not want to remove keys when the source is absent.
55   if $key and ($ensure == 'present') {
56     if is_hash($_key) {
57       apt::key { "Add key: ${_key['id']} from Apt::Source ${title}":
58         ensure  => present,
59         id      => $_key['id'],
60         server  => $_key['server'],
61         content => $_key['content'],
62         source  => $_key['source'],
63         options => $_key['options'],
64         before  => $_before,
65       }
66     } else {
67       apt::key { "Add key: ${key} from Apt::Source ${title}":
68         ensure => present,
69         id     => $key,
70         before => $_before,
71       }
72     }
73   }
74 }