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