b06d6101b1d4eb058881e4bc1f11dcb7a7541c9c
[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   include apt::update
21
22   validate_string($architecture)
23   validate_bool($trusted_source)
24
25   $sources_list_d = $apt::params::sources_list_d
26   $provider       = $apt::params::provider
27
28   if $release == 'UNDEF' {
29     if $::lsbdistcodename == undef {
30       fail('lsbdistcodename fact not available: release parameter required')
31     } else {
32       $release_real = $::lsbdistcodename
33     }
34   } else {
35     $release_real = $release
36   }
37
38   file { "${name}.list":
39     ensure  => $ensure,
40     path    => "${sources_list_d}/${name}.list",
41     owner   => root,
42     group   => root,
43     mode    => '0644',
44     content => template('apt/_header.erb', 'apt/source.list.erb'),
45     notify  => Exec['apt_update'],
46   }
47
48
49   if ($pin != false) {
50     # Get the host portion out of the url so we can pin to origin
51     $url_split = split($location, '/')
52     $host      = $url_split[2]
53
54     apt::pin { $name:
55       ensure   => $ensure,
56       priority => $pin,
57       before   => File["${name}.list"],
58       origin   => $host,
59     }
60   }
61
62   # We do not want to remove keys when the source is absent.
63   if $key and ($ensure == 'present') {
64     apt::key { "Add key: ${key} from Apt::Source ${title}":
65       ensure      => present,
66       key         => $key,
67       key_server  => $key_server,
68       key_content => $key_content,
69       key_source  => $key_source,
70       before      => File["${name}.list"],
71     }
72   }
73
74   # Need anchor to provide containment for dependencies.
75   anchor { "apt::source::${name}":
76     require => Class['apt::update'],
77   }
78 }