Merge pull request #429 from mhaskel/remove_include_update
[puppet-modules/puppetlabs-apt.git] / manifests / source.pp
1 # source.pp
2 # add an apt source
3
4 define apt::source(
5   $comment           = $name,
6   $ensure            = present,
7   $location          = '',
8   $release           = 'UNDEF',
9   $repos             = 'main',
10   $include_src       = true,
11   $include_deb       = true,
12   $key               = undef,
13   $key_server        = 'keyserver.ubuntu.com',
14   $key_content       = undef,
15   $key_source        = undef,
16   $pin               = false,
17   $architecture      = undef,
18   $trusted_source    = false,
19 ) {
20   validate_string($architecture)
21   validate_bool($trusted_source)
22
23   $sources_list_d = $apt::params::sources_list_d
24   $provider       = $apt::params::provider
25
26   if $release == 'UNDEF' {
27     if $::lsbdistcodename == undef {
28       fail('lsbdistcodename fact not available: release parameter required')
29     } else {
30       $release_real = $::lsbdistcodename
31     }
32   } else {
33     $release_real = $release
34   }
35
36   file { "${name}.list":
37     ensure  => $ensure,
38     path    => "${sources_list_d}/${name}.list",
39     owner   => root,
40     group   => root,
41     mode    => '0644',
42     content => template('apt/_header.erb', 'apt/source.list.erb'),
43     notify  => Exec['apt_update'],
44   }
45
46
47   if ($pin != false) {
48     # Get the host portion out of the url so we can pin to origin
49     $url_split = split($location, '/')
50     $host      = $url_split[2]
51
52     apt::pin { $name:
53       ensure   => $ensure,
54       priority => $pin,
55       before   => File["${name}.list"],
56       origin   => $host,
57     }
58   }
59
60   # We do not want to remove keys when the source is absent.
61   if $key and ($ensure == 'present') {
62     apt::key { "Add key: ${key} from Apt::Source ${title}":
63       ensure      => present,
64       key         => $key,
65       key_server  => $key_server,
66       key_content => $key_content,
67       key_source  => $key_source,
68       before      => File["${name}.list"],
69     }
70   }
71
72   # Need anchor to provide containment for dependencies.
73   anchor { "apt::source::${name}":
74     require => Class['apt::update'],
75   }
76 }