cf98fdd5e1a153da357f58afb7888399ea113814
[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::params::xfacts['lsbdistcodename'],
6   $package_name   = $::apt::ppa_package,
7   $package_manage = false,
8 ) {
9   include 'apt::params'
10
11   unless $release {
12     fail('lsbdistcodename fact not available: release parameter required')
13   }
14
15   if $::apt::params::xfacts['lsbdistid'] == 'Debian' {
16     fail('apt::ppa is not currently supported on Debian.')
17   }
18
19   $filename_without_slashes = regsubst($name, '/', '-', 'G')
20   $filename_without_dots    = regsubst($filename_without_slashes, '\.', '_', 'G')
21   $filename_without_ppa     = regsubst($filename_without_dots, '^ppa:', '', 'G')
22   $sources_list_d_filename  = "${filename_without_ppa}-${release}.list"
23
24   if $ensure == 'present' {
25     if $package_manage {
26       package { $package_name: }
27
28       $_require = [File['sources.list.d'], Package[$package_name]]
29     } else {
30       $_require = File['sources.list.d']
31     }
32
33     $_proxy = $::apt::_proxy
34     if $_proxy['host'] {
35       if $_proxy['https'] {
36         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
37       } else {
38         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
39       }
40     } else {
41       $_proxy_env = []
42     }
43
44     exec { "add-apt-repository-${name}":
45       environment => $_proxy_env,
46       command     => "/usr/bin/add-apt-repository ${options} ${name}",
47       unless      => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
48       user        => 'root',
49       logoutput   => 'on_failure',
50       notify      => Exec['apt_update'],
51       require     => $_require,
52     }
53
54     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
55       ensure  => file,
56       require => Exec["add-apt-repository-${name}"],
57     }
58   }
59   else {
60     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
61       ensure => 'absent',
62       notify => Exec['apt_update'],
63     }
64   }
65 }