This work flips from onlyif to unless (mistakenly looked at the
[puppet-modules/puppetlabs-apt.git] / manifests / ppa.pp
1 # ppa.pp
2
3 define apt::ppa(
4   $release = $::lsbdistcodename,
5   $options = '-y'
6 ) {
7   include apt::params
8   include apt::update
9
10   $sources_list_d = $apt::params::sources_list_d
11
12   if ! $release {
13     fail('lsbdistcodename fact not available: release parameter required')
14   }
15
16   $filename_without_slashes = regsubst($name, '/', '-', 'G')
17   $filename_without_dots    = regsubst($filename_without_slashes, '\.', '_', 'G')
18   $filename_without_ppa     = regsubst($filename_without_dots, '^ppa:', '', 'G')
19   $sources_list_d_filename  = "${filename_without_ppa}-${release}.list"
20
21   $package = $::lsbdistrelease ? {
22     /^[1-9]\..*|1[01]\..*|12.04$/ => 'python-software-properties',
23     default  => 'software-properties-common',
24   }
25
26   if ! defined(Package[$package]) {
27     package { $package: }
28   }
29
30   if defined(Class[apt]) {
31     $proxy_host = getparam(Class[apt], 'proxy_host')
32     $proxy_port = getparam(Class[apt], 'proxy_port')
33     case  $proxy_host {
34       false, '': {
35         $proxy_env = []
36       }
37       default: {$proxy_env = ["http_proxy=http://${proxy_host}:${proxy_port}", "https_proxy=http://${proxy_host}:${proxy_port}"]}
38     }
39   } else {
40     $proxy_env = []
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 ${sources_list_d}/${sources_list_d_filename}",
46     logoutput    => 'on_failure',
47     notify       => Exec['apt_update'],
48     require      => [
49       File[$sources_list_d],
50       Package[$package],
51     ],
52   }
53
54   file { "${sources_list_d}/${sources_list_d_filename}":
55     ensure  => file,
56     require => Exec["add-apt-repository-${name}"],
57   }
58
59   # Need anchor to provide containment for dependencies.
60   anchor { "apt::ppa::${name}":
61     require => Class['apt::update'],
62   }
63 }