Merge pull request #543 from puppetlabs/revert-542-fix_apt_params
[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_ppa     = regsubst($filename_without_dots, '^ppa:', '', 'G')
20   $sources_list_d_filename  = "${filename_without_ppa}-${release}.list"
21
22   if $ensure == 'present' {
23     if $package_manage {
24       package { $package_name: }
25
26       $_require = [File['sources.list.d'], Package[$package_name]]
27     } else {
28       $_require = File['sources.list.d']
29     }
30
31     $_proxy = $::apt::_proxy
32     if $_proxy['host'] {
33       if $_proxy['https'] {
34         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
35       } else {
36         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
37       }
38     } else {
39       $_proxy_env = []
40     }
41
42     exec { "add-apt-repository-${name}":
43       environment => $_proxy_env,
44       command     => "/usr/bin/add-apt-repository ${options} ${name}",
45       unless      => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
46       user        => 'root',
47       logoutput   => 'on_failure',
48       notify      => Exec['apt_update'],
49       require     => $_require,
50     }
51
52     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
53       ensure  => file,
54       require => Exec["add-apt-repository-${name}"],
55     }
56   }
57   else {
58     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
59       ensure => 'absent',
60       notify => Exec['apt_update'],
61     }
62   }
63 }