Merge pull request #588 from werekraken/modules2873
[puppet-modules/puppetlabs-apt.git] / manifests / ppa.pp
1 # ppa.pp
2 define apt::ppa(
3   $ensure         = 'present',
4   $options        = $::apt::ppa_options,
5   $release        = $::apt::xfacts['lsbdistcodename'],
6   $package_name   = $::apt::ppa_package,
7   $package_manage = false,
8 ) {
9   unless $release {
10     fail('lsbdistcodename fact not available: release parameter required')
11   }
12
13   if $::apt::xfacts['lsbdistid'] == 'Debian' {
14     fail('apt::ppa is not currently supported on Debian.')
15   }
16
17   $filename_without_slashes = regsubst($name, '/', '-', 'G')
18   $filename_without_dots    = regsubst($filename_without_slashes, '\.', '_', 'G')
19   $filename_without_pluses  = regsubst($filename_without_dots, '\+', '_', 'G')
20   $filename_without_ppa     = regsubst($filename_without_pluses, '^ppa:', '', 'G')
21   $sources_list_d_filename  = "${filename_without_ppa}-${release}.list"
22
23   if $ensure == 'present' {
24     if $package_manage {
25       ensure_packages($package_name)
26
27       $_require = [File['sources.list.d'], Package[$package_name]]
28     } else {
29       $_require = File['sources.list.d']
30     }
31
32     $_proxy = $::apt::_proxy
33     if $_proxy['host'] {
34       if $_proxy['https'] {
35         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
36       } else {
37         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
38       }
39     } else {
40       $_proxy_env = []
41     }
42
43     exec { "add-apt-repository-${name}":
44       environment => $_proxy_env,
45       command     => "/usr/bin/add-apt-repository ${options} ${name}",
46       unless      => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
47       user        => 'root',
48       logoutput   => 'on_failure',
49       notify      => Class['apt::update'],
50       require     => $_require,
51     }
52
53     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
54       ensure  => file,
55       require => Exec["add-apt-repository-${name}"],
56     }
57   }
58   else {
59     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
60       ensure => 'absent',
61       notify => Class['apt::update'],
62     }
63   }
64 }