Merge pull request #52 from nanliu/tb/14308
[puppet-modules/puppetlabs-apt.git] / manifests / source.pp
1 # source.pp
2 # add an apt source
3
4 define apt::source(
5   $ensure = present,
6   $location = '',
7   $release = $lsbdistcodename,
8   $repos = 'main',
9   $include_src = true,
10   $required_packages = false,
11   $key = false,
12   $key_server = 'keyserver.ubuntu.com',
13   $key_content = false,
14   $key_source  = false,
15   $pin = false
16 ) {
17
18   include apt::params
19
20   $sources_list_d = $apt::params::sources_list_d
21   $provider       = $apt::params::provider
22
23   if $release == undef {
24     fail('lsbdistcodename fact not available: release parameter required')
25   }
26
27   file { "${name}.list":
28     ensure  => $ensure,
29     path    => "${sources_list_d}/${name}.list",
30     owner   => root,
31     group   => root,
32     mode    => '0644',
33     content => template("${module_name}/source.list.erb"),
34   }
35
36   if ($pin != false) and ($ensure == 'present') {
37     apt::pin { $release:
38       priority => $pin,
39       before   => File["${name}.list"]
40     }
41   }
42
43   exec { "${name} apt update":
44     command     => "${provider} update",
45     subscribe   => File["${name}.list"],
46     refreshonly => true,
47   }
48
49   if ($required_packages != false) and ($ensure == 'present') {
50     exec { "Required packages: '${required_packages}' for ${name}":
51       command     => "${provider} -y install ${required_packages}",
52       subscribe   => File["${name}.list"],
53       refreshonly => true,
54     }
55   }
56
57   # We do not want to remove keys when the source is absent.
58   if ($key != false) and ($ensure == 'present') {
59     apt::key { "Add key: ${key} from Apt::Source ${title}":
60       ensure      => present,
61       key         => $key,
62       key_server  => $key_server,
63       key_content => $key_content,
64       key_source  => $key_source,
65       before      => File["${name}.list"],
66     }
67   }
68 }