]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/blob - manifests/ppa.pp
Stop redeclaring variables from params
[puppet-modules/puppetlabs-apt.git] / manifests / ppa.pp
1 # ppa.pp
2 define apt::ppa(
3   $ensure  = 'present',
4   $release = $::lsbdistcodename,
5   $options = $::apt::ppa_options,
6 ) {
7
8   if ! $release {
9     fail('lsbdistcodename fact not available: release parameter required')
10   }
11
12   if $::operatingsystem != 'Ubuntu' {
13     fail('apt::ppa is currently supported on Ubuntu only.')
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   if $ensure == 'present' {
22     $package = $::lsbdistrelease ? {
23         /^[1-9]\..*|1[01]\..*|12.04$/ => 'python-software-properties',
24         default  => 'software-properties-common',
25     }
26
27     if ! defined(Package[$package]) {
28         package { $package: }
29     }
30
31     if defined(Class[apt]) {
32         $proxy_host = $apt::proxy_host
33         $proxy_port = $apt::proxy_port
34         case $proxy_host {
35           false, '', undef: {
36             $proxy_env = []
37           }
38           default: {
39             $proxy_env = ["http_proxy=http://${proxy_host}:${proxy_port}", "https_proxy=http://${proxy_host}:${proxy_port}"]
40           }
41         }
42     } else {
43         $proxy_env = []
44     }
45     exec { "add-apt-repository-${name}":
46         environment => $proxy_env,
47         command     => "/usr/bin/add-apt-repository ${options} ${name}",
48         unless      => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
49         user        => 'root',
50         logoutput   => 'on_failure',
51         notify      => Exec['apt_update'],
52         require     => [
53         File['sources.list.d'],
54         Package[$package],
55         ],
56     }
57
58     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
59         ensure  => file,
60         require => Exec["add-apt-repository-${name}"],
61     }
62   }
63   else {
64
65     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
66         ensure => 'absent',
67         notify => Exec['apt_update'],
68     }
69   }
70
71   # Need anchor to provide containment for dependencies.
72   anchor { "apt::ppa::${name}":
73     require => Class['apt::update'],
74   }
75 }