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